STM32+UCGUI手机界面,拼音输入法,文件浏览,BMP,指针时钟

2019-12-20 21:39发布

本帖最后由 xi_liang 于 2013-6-22 02:55 编辑

stm32_live_v2.jpg (344.56 KB, 下载次数: 7) 下载附件 2013-6-22 01:05 上传

把开发板资源汇总一下:

原理图:
http://d1.ourdev.cn/bbs_upload78 ... ev_602958HX5VN1.pdf

我翻译的书《一个内幕者对STM32的介绍》
http://www.amobbs.com/thread-5530326-1-1.html

百为STM32开发板视频教程陆续更新中
http://www.amobbs.com/thread-5531370-1-1.html

视频教程目录:
1、百为STM32开发板功能介绍
2、百为STM32开发板原理图分析
3、STM32硬件设计入门
4、Cortex-M3深入理解1 《一个内幕者对STM32的介绍1》
5、Cortex-M3深入理解2 《一个内幕者对STM32的介绍2》
6、Cortex-M3深入理解3 《一个内幕者对STM32的介绍3》
7、Cortex-M3深入理解4 《一个内幕者对STM32的介绍4》
8、如何通过串口烧写STM32程序
9、如何通过JLINK烧写STM32程序
10、如何创建RealView MDK工程和如何通过RealView MDK下载程序
11、启动代码分析
12、LED流水灯
13、按键输入
14、RCC时钟控制
15、固件函数库介绍
16、LED流水灯(库函数)
17、17、SysTick系统定时器
18、STM32中断和事件
19、USART串口通信
20、RTC实时时钟
21、备份寄存器
22、独立看门狗
23、窗口看门狗
24、SPI串行通信
25、I2C温度传感器

STM32烧写方法汇总(串口,JLINK,DFU)
http://www.amobbs.com/thread-5526370-1-1.html

百为STM32开发板官方DEMO(SD卡版本)BMP浏览,U盘WAV播放
http://www.amobbs.com/thread-5536581-1-1.html

百为STM32+RT-thread网络收音机,可点播豆瓣音乐,播放SD卡MP3
http://www.amobbs.com/thread-5530151-1-2.html

stm32官方开发板86个测试例程
http://www.amobbs.com/thread-5503748-1-1.html

3D图形显示STM32版——源码及资料
http://www.amobbs.com/thread-5504122-1-1.html

stm32_gui_lib在百为stm32开发板上运行效果
http://www.amobbs.com/thread-5041599-1-1.html

完整源码版uCOSII2.86+uCGUI3.90在stm32上的移植,含uCGUI3.9源码(不是.lib)
http://www.amobbs.com/thread-4787247-1-1.html

做了个DM9000板,准备上STM32+DM9000+LWIP
http://www.amobbs.com/thread-5511065-1-1.html

STM32+FATFS+SDIO+helix 软解MP3成功了
http://www.amobbs.com/thread-5089622-1-1.html

音乐频谱基础 百为STM32开发板 官方FFT demo演示(源码+图)
http://www.amobbs.com/thread-5500240-1-1.html

stm32 uclinux 启动成功了,在stm32f103zet6开发板上验证
http://www.amobbs.com/thread-4439872-1-1.html

最完美的触摸屏校正算法tslib——STM32实现(源码+图)
http://www.amobbs.com/thread-5523786-1-1.html

百为STM32开发板播放I2S音频(PCM格式WAV文件)
http://www.amobbs.com/thread-5521405-1-1.html

在st_gui_lib上加了tsc2046触摸功能——百为STM32
http://www.amobbs.com/thread-5529369-1-1.html

百为STM32开发板UCOSII演示程序源码+图
http://www.amobbs.com/thread-5525265-1-1.html

STM32烧写方法汇总(串口,JLINK,DFU)
http://www.amobbs.com/thread-5526370-1-1.html

百为STM32开发板播放ADPCM
http://www.amobbs.com/thread-5521225-1-1.html

百为STM32开发板 RT-THREAD代码
http://www.amobbs.com/thread-5515652-1-1.html

百为STM32+emWin5.14图形界面演示程序
http://www.amobbs.com/thread-5532161-1-1.html

百为STM32开发板接摄像头大王wangguanfu的OV7670模块,源码+图
http://www.amobbs.com/thread-5522203-1-1.html

开贴研究STM32 WIFI,打造2013年最酷的贴
http://www.amobbs.com/thread-5513966-1-1.html

百为STM32裸机+WM-G-MR-09 WIFI + LWIP源码--全球首发
http://www.amobbs.com/thread-5534196-1-1.html






友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
99条回答
zndz410
1楼-- · 2019-12-27 00:42
 精彩回答 2  元偷偷看……
llysc
2楼-- · 2019-12-27 04:09
经典,玩的酷B~~~~~~~~~~
zclcom79
3楼-- · 2019-12-27 09:23

不错!界面很漂亮
jaky80000
4楼-- · 2019-12-27 13:43
漂亮,顶一下楼主
xi_liang
5楼-- · 2019-12-27 18:24
ersha4877 发表于 2013-6-24 07:18

2013-6-25 1-09-37.jpg (91.68 KB, 下载次数: 1)

下载附件

2013-6-25 01:09 上传



3、增加LCD驱动接口LCDDriver.c
实现UCGUI的LCD接口,主要是实现下面LCD_L0_XXXX这些函数,因为上层画点画线画图形最终调用的都是这些函数:
   LCD_L0_Init,
    (tLCDDEV_DrawBitmap*)LCD_L0_DrawBitmap,
    LCD_L0_DrawHLine,
    LCD_L0_DrawVLine,
    LCD_L0_FillRect,
    LCD_L0_GetPixelIndex,
    LCD_L0_SetPixelIndex,
    LCD_L0_XorPixel,
    LCD_L0_SetLUTEntry,

但最简单的方法不是每个函数重新去编写,按照LCDWin.c来修改比较快,
在LCD_L0_Init初始化时增加调用9320 LCD初始化代码STM3210E_LCD_Init();
把LCDSIM_SetPixelIndex改名为ili9320_SetPixelIndex
把LCDSIM_GetPixelIndex改名为ili9320_GetPixelIndex

然后在底层ili9320_lcd.c里增加以下三个函数
void ili9320_SetPixelIndex(u16 Xpos, u16 Ypos, u16 c)
{

  LCD_SetCursor(Xpos, Ypos);
  LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
  LCD_WriteRAM(c);

}

u16 ili9320_GetPixelIndex(u16 Xpos, u16 Ypos)
{
  u16 c;
  LCD_SetCursor(Xpos, Ypos);
  c = LCD_ReadRAM();
  return(ili9320_BGR2RGB(c));
}

u16 ili9320_BGR2RGB(u16 c)
{
  u16 r,g,b;
  u16 rgb;
  b = (c>>0) & 0x1f;
  g = (c>>5) & 0x3f;
  r = (c>>11) & 0x1f;
  rgb = (b<<11) + (g<<5) + (r<<0);
  return( rgb );
}

4、在GUI_X_Touch.c里增加触摸驱动接口
主要是实现读触摸坐标的两个函数:
int  GUI_TOUCH_X_MeasureX(void) {
  U32 i,j=0;
  for(i=0;i<10;i++)
  {
    j+=SPI_TOUCH_Read_X();
  }
       
  return j/10;
}

int  GUI_TOUCH_X_MeasureY(void) {
  U32 i,j=0;
  for(i=0;i<10;i++)
  {
    j+=SPI_TOUCH_Read_Y();
  }
       
  return j/10;
}

#define TOUCH_X_MeasureX   GUI_TOUCH_X_MeasureX
#define TOUCH_X_MeasureY   GUI_TOUCH_X_MeasureY

在GUI_TOUCH_Exec里面会默认调用上面两个函数采样坐标并转换,然后调用_StoreUnstable -> GUI_TOUCH_StoreUnstable ……
-> GUI_PID_StoreState存储触摸按下状态。

然后在WM_Exec -> WM_Exec1里会调用 WM_pfHandlePID -> WM_HandlePID - > GUI_PID_GetState获取出触摸按下状态并发送到相应窗口处理


在app.c里增加一个UCOS任务,在里面不断地调用GUI_TOUCH_Exec处理触摸消息
static  void  App_TaskKbd (void *p_arg)
{
    ……

    while (DEF_TRUE) {
    ……
    GUI_TOUCH_Exec();
    OSTimeDlyHMSM(0, 0, 0, 20);
    }
}


5、在GUI_X_uCOS.c里增加UCOS和UCGUI之间的接口:

void GUI_X_ExecIdle (void)
{
    OS_X_Delay(1);
}
改为
void GUI_X_ExecIdle (void)
{
    GUI_X_Delay(1);
}

实现下面几个空函数,作为打印调试信息等用途
void GUI_X_Log(const char *s)
{

}

void GUI_X_Warn(const char *s)
{

}

void GUI_X_ErrorOut(const char *s)
{

}

6、增加UCOS任务,在里面调用UCGUI DEMO任务MainTask:
static  void  App_TaskUserIF (void *p_arg)
{
    ……
   
    while(1)
    {
        MainTask();
    }
}

MainTask任务如下,使用UCGUI前先调用 GUI_Init初始化UCGUI,然后运行UCGUI DEMO:

void MainTask(void) {
  GUI_Init();
  while(1) {
    GUIDEMO_main();
  }
}

Shaw.Embedi
6楼-- · 2019-12-27 19:14
 精彩回答 2  元偷偷看……

一周热门 更多>