[AT32F403/403A] 【原创】基于AT32F403A的图标式应用系统设计

[复制链接]
 楼主| jinglixixi 发表于 2020-10-26 12:56 | 显示全部楼层 |阅读模式
#申请原创#
AT32F403A开发板是一款功能强大的开发板,将潜能极大地发掘出来才是好的设计,为此,将先前建立在同一强大开发平台的设计移植它的上面以展示它的性能。
该设计的特点是采用图标式的界面设计,由于TFT未配置触摸功能,故以按键来辅助功能的选择,其主界面如图1所示,功能选择如图2所示。

1.jpg
图1 主界面


2.jpg
图2 功能选择

1. 电子时钟
RTC电子时钟是依靠MCU内部的RTC计时器来实现,其工作界面如图3所示。

3.jpg
图3 电子时钟

实现RTC显示功能的程序如下:
  1. LCD_Clear(WHITE);         
  2. show_imageh(10,300,0);  //200*200 * 1     
  3. showhanzi16h(60,80,0,0);
  4. showhanzi16h(60,60,1,0);
  5. showhanzi16h(60,40,2,0);
  6. Delay_ms(400u);
  7. while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pins_0)==0)
  8. {      
  9. rtc_show_time();
  10. }

2.温湿度检测
借助外挂的DHT22温湿度传感器模块,可对环境的温湿度进行采集,其显示效果如图4所示。

4.jpg
图4温湿度检测

显示温湿度显示的程序如下:
  1. LCD_Clear(WHITE);   
  2. show_imageh(10,300,0);  //200*200 * 1
  3. while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pins_0)==0)
  4. {  
  5. senflag=DHT22_Init();         
  6. if(!senflag)
  7. {
  8. DHT22_Read_Data(&temperature,&humidity);
  9. LCD_ShowCharh(100,100,'T',1);
  10. LCD_ShowCharh(100,90,'e',1);
  11. LCD_ShowCharh(100,80,'m',1);
  12. LCD_ShowCharh(100,70,'p',1);
  13. LCD_ShowCharh(100,60,':',1);
  14. LCD_ShowCharh(100,50,temperature/10+'0',0);
  15. LCD_ShowCharh(100,40,temperature%10+'0',0);
  16. LCD_ShowCharh(120,100,'H',1);
  17. LCD_ShowCharh(120,90,'u',1);
  18. LCD_ShowCharh(120,80,'m',1);
  19. LCD_ShowCharh(120,70,'i',1);
  20. LCD_ShowCharh(120,60,':',1);
  21. LCD_ShowCharh(120,50,humidity/10+'0',0);
  22. LCD_ShowCharh(120,40,humidity%10+'0',0);
  23. }
  24. Delay_ms(200u);
  25. }

3.波形绘制
在配置绘图函数的基础上,可完成波形绘制的功能,其绘制3相交流电的波形曲线如图5所示。

5.jpg
图5波形绘制

绘制正弦曲线的参数数组为:
unsigned char values[64][2]=
{
{0x07, 0xFF},{0x08, 0xC8},{0x09, 0x8E},{0x0A,0x51},{0x0B, 0x0F},
{0x0B, 0xC4},{0x0C, 0x71},{0x0D, 0x12},{0x0D,0xA7},{0x0E, 0x2E},
{0x0E, 0xA5},{0x0F, 0x0D},{0x0F, 0x63},{0x0F,0xA6},{0x0F, 0xD7},
{0x0F, 0xF5},{0x0F, 0xFF},{0x0F, 0xF5},{0x0F,0xD7},{0x0F, 0xA6},
{0x0F, 0x63},{0x0F, 0x0D},{0x0E, 0xA5},{0x0E,0x2E},{0x0D, 0xA7},
{0x0D, 0x12},{0x0C, 0x71},{0x0B, 0xC4},{0x0B,0x0F},{0x0A, 0x51},
{0x09, 0x8E},{0x08, 0xC8},{0x07, 0xFF},{0x07,0x36},{0x06, 0x70},
{0x05, 0xAD},{0x04, 0xEF},{0x04, 0x3A},{0x03,0x8D},{0x02, 0xEC},
{0x02, 0x57},{0x01, 0xD0},{0x01, 0x59},{0x00,0xF1},{0x00, 0x9B},
{0x00, 0x58},{0x00, 0x27},{0x00, 0x09},{0x00,0x00},{0x00, 0x09},
{0x00, 0x27},{0x00, 0x58},{0x00, 0x9B},{0x00,0xF1},{0x01, 0x59},
{0x01, 0xD0},{0x02, 0x57},{0x02, 0xEC},{0x03,0x8D},{0x04, 0x3A},
{0x04, 0xEF},{0x05, 0xAD},{0x06, 0x70},{0x07,0x36}
};
此外,它能利用A/D转换功能对MCU内部的温度传感器进行采集,所绘制的温度曲线如图6所示,温度波动值在1度以内。

6.jpg
图6 片内温度采集

实现该功能的相关程序如下:
  1. POINT_COLOR=RED;
  2. BACK_COLOR=WHITE;
  3. i=0;
  4. LCD_ShowCharh(20,130,'t',0);
  5. LCD_ShowCharh(20,120,'=',0);
  6. LCD_ShowCharh(20,80,'C',0);
  7. while (1)
  8. {
  9. Delay_sec(1);
  10. t=(uint16_t)(( 1.26 -(double)ADCConvertedValue*ADC_VREF/4096)/(-0.00423) +25);
  11. LCD_ShowNum(20,100,t,2);
  12. sj=t*2;
  13. if(i==0) sp=sj;  
  14. LCD_DrawLine(220-sp, 300-4*(i-1), 220-sj, 300-4*(i));
  15. sp=sj;
  16. if(i<72) i++;
  17. else
  18. {
  19. LCD_Clear(WHITE);
  20. LCD_DrawLine(10, 304, 220, 304);
  21. LCD_DrawLine(60, 10, 60, 304);
  22. LCD_DrawLine(100, 10, 100, 304);
  23. LCD_DrawLine(140, 10, 140, 304);
  24. LCD_DrawLine(180, 10, 180, 304);
  25. LCD_DrawLine(220, 10, 220, 304);
  26. LCD_ShowCharh(20,170,'A',0);
  27. LCD_ShowCharh(20,162,'/',0);
  28. LCD_ShowCharh(20,154,'D',0);
  29. LCD_ShowCharh(20,130,'t',0);
  30. LCD_ShowCharh(20,120,'=',0);
  31. LCD_ShowCharh(20,80,'C',0);
  32. i=0;
  33. }
  34. Delay_ms(200);
  35. }

4. MP3播放菜单
借助 AT32F403A的串行通讯功能,可通过串口指令来控制MP3音频播放模块,图7是其所实现的中文歌单,以辅助歌曲的选播。

7.jpg
图7歌曲选择界面

5. 图片显示
AT32F403A具有较大的内存,在不做它用的情况下,完全可以支持一张320*240像素的图片显示。在借助板载16M FLASH存储器的情况下,则可实现数码相框的功能。

8.jpg
图8图片显示

基于FLASH的图像显示程序为:
  1. // 显示一页的图像
  2. i=0;
  3. while(i<SPIM_PAGE_SIZE)
  4. {
  5. da=WriteBuffer[i];
  6. da<<=8;
  7. da|=WriteBuffer[i+1];
  8. POINT_COLOR=da;
  9. LCD_DrawPoint(10+((SPIM_ADDR+i)/400),300-((SPIM_ADDR+i)%400)/2);
  10. i=i+2;
  11. if((i+SPIM_ADDR)>=80000) goto ok;      
  12. }
  13. SPIM_ADDR=SPIM_ADDR+4096;
  14. }
  15. goto ok;
  16. /* Print the ext.flash testing result */
  17. ok:
  18. printf("test SPIM success!\r\n");
  19. }

由于其他功能缺少画面感,就不在此一一加以介绍了,相信由此便可管窥一斑地见识到 AT32F403A开发板的强大,也在此为芯片的国产化摇旗呐喊、占脚助威!

打赏榜单

21小跑堂 打赏了 10.00 元 2020-11-05
理由:恭喜通过优秀原创文章审核!打赏10元!

ts608 发表于 2020-10-26 16:20 | 显示全部楼层
LCD接口是直接IO驱动吗?
 楼主| jinglixixi 发表于 2020-10-26 18:46 | 显示全部楼层
ts608 发表于 2020-10-26 16:20
LCD接口是直接IO驱动吗?

是,这样用比较方便,易于迁移。
zeshoufx 发表于 2020-10-27 09:33 | 显示全部楼层
谢谢分享【基于AT32F403A的图标式应用系统设计】
 楼主| jinglixixi 发表于 2020-10-27 12:57 | 显示全部楼层
zeshoufx 发表于 2020-10-27 09:33
谢谢分享【基于AT32F403A的图标式应用系统设计】

感谢支持!!!
键盘手没手 发表于 2020-10-31 21:53 | 显示全部楼层
AT32F403A开发板蛮强大
键盘手没手 发表于 2020-10-31 21:56 | 显示全部楼层
谢谢分享
键盘手没手 发表于 2020-10-31 21:57 | 显示全部楼层
基于AT32F403A的图标式应用系统设计
 楼主| jinglixixi 发表于 2020-10-31 22:20 | 显示全部楼层
guijial511 发表于 2020-11-4 07:59 来自手机 | 显示全部楼层
感谢楼主分享,板子不错。
 楼主| jinglixixi 发表于 2020-11-4 08:20 | 显示全部楼层
guijial511 发表于 2020-11-4 07:59
感谢楼主分享,板子不错。


您需要登录后才可以回帖 登录 | 注册

本版积分规则

515

主题

2929

帖子

39

粉丝
快速回复 返回顶部 返回列表