3798|6

1509

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

基于GD32F450的图标式多功能应用系统设计(1) [复制链接]

1.开发背景
随着显示器件的多样化,人机交互界面也在不断地进行着变更,使用TFT显示屏以图标化的方式进行管理和使用已成为一种趋势,这里就以GD32F450为硬件平台来构建一个以图标来实现功能管理的应用系统,该系统的主要功能如图1所示,整体构成如图2所示。

    图1 功能结构图

    图2 整体构成图

功能规划:
根据功能规划,它共含有乐曲播放、PWM调节、RTC计时、波形绘制、环境温湿度检测、照明控制、时段设置、图像显示等。
在功能实现方面,所采用的技术如下。
乐曲播放
利用MCU内部的串行通讯功能向MP3语音模块发送指令,进而控制该模块实现乐曲欣赏。借助菜单,可通过按键向上或向下来选择乐曲。在播放过程中,还可通过按键来调节音量。
PWM调节
利用MCU内部的定时器实现PWM调节控制,可通过板载的LED来观察效果,同时在TFT屏上显示出LED的亮度等级。
RTC计时
利用MCU内部的RTC实现电子时钟计时功能,并可依照生肖纪年的方式来显示,因而可以提供2种不同的显示效果。
波形绘制
利用MCU内部的A/D,可实时读取A/D采样值并绘制出波形图。在与外部心率检测传感器的配合下,则可观察心率波形的变化情况。
环境温湿度检测
利用MCU所提供的GPIO口,可与单总线器件DHT11相配合,进而对周围环境的温、湿度进行测控。
照明控制
通过按键来控制光隔继电器的状态变化进而控制照明设备或其他小功率电器,也可与RTC计时器相配合来实现定时控制照明
多时段设置
RTC的配合下,通过多时段的时间设置,可实现智能语音药盒的提示功能,其语音播放部分则以依靠MP3语音模块的配合。
图像显示
可实现图像显示功能,受Flash大小的制约,在程序达到一定规模时,需将512KFlash更换为3MFlash芯片。而最好的方案是配SD及文件系统来支持数码相框功能,也为后续的配备OV7670摄像模块提供较好的支持。

   图3 原理构成图

1)显示部分
    显示部分是通过SPI接口的TFT屏来实现的,这样比较节省GPIO资源。若将NC空脚接3.3V电源,则可直接将TFT屏插入Arduino接口来使用,从而省去连线的问题,其连接关系如图4所示。

4 显示电路原理图

2)语音播放部分
语音播放部分主要是通过MP3播放模块来实现,这样有利于节省MCU资源并可形成并行处理关系。为节省连线,这里采用通讯方式来控制MP3播放模块。MP3播放模块的引脚功能如图5所示,其与MCU的连接关系为:
    RX-PD5
    TX-PD6
    BUSY-PD3

    图5  MP3播放模块引脚图

3)控制部分
    为进行电器的控制,可采用带光隔的继电器模块,以利于防止继电器对MCU的干扰。
4)传感器部分
    为进行物理信号向模拟信号的转换,可视需要来选取不同的传感器,如火焰传感器、气体传感器、心率传感器等。此外,采用单总线的温湿度传感器DHT11也是很好的选择。

3.软件设计
1)界面设计
    界面是人机交互的窗口,系统的主界面如图6所示,主要以图标的形式来进行功能调用,并通过反显的文字提示来指示当前的功能。
主菜单下的部分界面如图7~13所示。
具体的做法是:
(1)准备好相同规格的功能图标,并转化为二进制数据存放到相应的文件中以备调用。
(2)构建相应的图标显示函数,以便快速地在界面上实现刷新显示。
(3)构建相应键控函数,以实现功能的选择及反显提示功能。最终在确认的情况下,再根据选取的功能调用相关的函数进行服务。
相关的程序如下:
  1. i=0;
  2.                 while(SET == gpio_input_bit_get(GPIOA,GPIO_PIN_0))
  3. {
  4.                 if(RESET ==gpio_input_bit_get(GPIOE,GPIO_PIN_0))   
  5.                 {
  6.                 if(i<7)
  7.                 {
  8.                 i++;
  9.                 if(i==1)
  10.         {
  11.                 BACK_COLOR=RED;     
  12.             POINT_COLOR=WHITE;  
  13.                 LCD_ShowCharh(80,220,'P',0);
  14.                 LCD_ShowCharh(80,212,'W',0);
  15.                 LCD_ShowCharh(80,204,'M',0);
  16.                 showhanzi16h(80,280,3,1);
  17.                 showhanzi16h(80,264,4,1);       
  18.                 }
  19.                 if(i==2)
  20.         {
  21.                 BACK_COLOR=RED;      
  22.             POINT_COLOR=WHITE;   
  23.                 LCD_ShowCharh(80,160,'R',0);
  24.                 LCD_ShowCharh(80,152,'T',0);
  25.                 LCD_ShowCharh(80,144,'C',0);
  26.                 BACK_COLOR=WHITE;   
  27.             POINT_COLOR=RED;     
  28.                 LCD_ShowCharh(80,220,'P',0);
  29.                 LCD_ShowCharh(80,212,'W',0);
  30.                 LCD_ShowCharh(80,204,'M',0);
  31.                 }
  32.                 if(i==3)
  33.         {
  34.                 showhanzi16h(80,100,5,0);
  35.                 showhanzi16h(80,84,6,0);
  36.                 BACK_COLOR=WHITE;     
  37.             POINT_COLOR=RED;      
  38.                 LCD_ShowCharh(80,160,'R',0);
  39.                 LCD_ShowCharh(80,152,'T',0);
  40.                 LCD_ShowCharh(80,144,'C',0);       
  41.                 }
  42.                 if(i==4)
  43.         {
  44.                 showhanzi16h(80,100,5,1);
  45.                 showhanzi16h(80,84,6,1);
  46.                 showhanzi16h(180,280,13,0);
  47.                 showhanzi16h(180,264,14,0);               
  48.                 }
  49.                 if(i==5)
  50.         {
  51.                 showhanzi16h(180,280,13,1);
  52.                 showhanzi16h(180,264,14,1);               
  53.                 showhanzi16h(180,220,11,0);
  54.                 showhanzi16h(180,204,12,0);       
  55.                 }
  56.                 if(i==6)
  57.         {
  58.                 showhanzi16h(180,220,11,1);
  59.                 showhanzi16h(180,204,12,1);       
  60.                 showhanzi16h(180,160,9,0);
  61.                 showhanzi16h(180,144,10,0);       
  62.                 }
  63.                 if(i==7)
  64.         {
  65.                 showhanzi16h(180,160,9,1);
  66.                 showhanzi16h(180,144,10,1);       
  67.                 showhanzi16h(180,100,7,0);
  68.                 showhanzi16h(180,84,8,0);                       
  69.                 }
  70.                 }
  71.                 else
  72.         {
  73.                 showhanzi16h(180,100,7,1);
  74.                 showhanzi16h(180,84,8,1);
  75.                 showhanzi16h(80,280,3,0);
  76.                 showhanzi16h(80,264,4,0);       
  77.                 i=0;
  78.                 }
  79.                
  80.                 }
  81.                 if(RESET ==gpio_input_bit_get(GPIOE,GPIO_PIN_1))
  82.                 {
  83.                 if(i>0)
  84.         {
  85.                 i--;
  86.                 if(i==0)   
  87.         {
  88.                 BACK_COLOR=WHITE;     
  89.             POINT_COLOR=RED;      
  90.                 LCD_ShowCharh(80,220,'P',0);
  91.                 LCD_ShowCharh(80,212,'W',0);
  92.                 LCD_ShowCharh(80,204,'M',0);
  93.                 showhanzi16h(80,280,3,0);
  94.                 showhanzi16h(80,264,4,0);       
  95.                 }
  96.                 if(i==1)
  97.         {
  98.                 BACK_COLOR=RED;         
  99.             POINT_COLOR=WHITE;      
  100.                 LCD_ShowCharh(80,220,'P',0);
  101.                 LCD_ShowCharh(80,212,'W',0);
  102.                 LCD_ShowCharh(80,204,'M',0);
  103.                 BACK_COLOR=WHITE;     
  104.             POINT_COLOR=RED;      
  105.                 LCD_ShowCharh(80,160,'R',0);
  106.                 LCD_ShowCharh(80,152,'T',0);
  107.                 LCD_ShowCharh(80,144,'C',0);       
  108.                 }
  109.                 if(i==2)
  110.         {
  111.                 BACK_COLOR=RED;      
  112.             POINT_COLOR=WHITE;   
  113.                 LCD_ShowCharh(80,160,'R',0);
  114.                 LCD_ShowCharh(80,152,'T',0);
  115.                 LCD_ShowCharh(80,144,'C',0);
  116.                 showhanzi16h(80,100,5,1);
  117.                 showhanzi16h(80,84,6,1);
  118.                 }
  119.                 if(i==3)
  120.         {
  121.                 showhanzi16h(80,100,5,0);
  122.                 showhanzi16h(80,84,6,0);
  123.                 showhanzi16h(180,280,13,1);
  124.                 showhanzi16h(180,264,14,1);
  125.                 }
  126.                 if(i==4)
  127.         {
  128.                 showhanzi16h(180,280,13,0);
  129.                 showhanzi16h(180,264,14,0);       
  130.         showhanzi16h(180,220,11,1);
  131.                 showhanzi16h(180,204,12,1);       
  132.                 }
  133.                 if(i==5)
  134.         {
  135.                 showhanzi16h(180,220,11,0);
  136.                 showhanzi16h(180,204,12,0);       
  137.                 showhanzi16h(180,160,9,1);
  138.                 showhanzi16h(180,144,10,1);       
  139.                 }
  140.                 if(i==6)
  141.         {
  142.                 showhanzi16h(180,160,9,0);
  143.                 showhanzi16h(180,144,10,0);       
  144.                 showhanzi16h(180,100,7,1);
  145.                 showhanzi16h(180,84,8,1);                       
  146.                 }
  147.                 if(i==7)
  148.         {
  149.                 showhanzi16h(180,100,7,0);
  150.                 showhanzi16h(180,84,8,0);                       
  151.                 showhanzi16h(80,280,3,1);
  152.                 showhanzi16h(80,264,4,1);       
  153.                 }
  154.                 }
  155.                 else
  156.         {
  157.                 showhanzi16h(80,280,3,1);
  158.                 showhanzi16h(80,264,4,1);       
  159.                 showhanzi16h(180,100,7,0);
  160.                 showhanzi16h(180,84,8,0);       
  161.                 i=7;
  162.                 }
  163.                 }                       
  164.                 delay_1ms(200);
  165.                 }
复制代码

6 主界面

未完待续!!!!

此内容由EEWORLD论坛网友jinglixixi原创,如需转载或用于商业用途需征得作者同意并注明出处

B.jpg (18.41 KB, 下载次数: 0)

B.jpg
此帖出自stm32/stm8论坛

最新回复

不错,加油。  详情 回复 发表于 2017-8-16 15:08
点赞 关注
 

回复
举报

1万

帖子

2853

TA的资源

管理员

来自 5楼
 
汇总贴在此:
基于GD32F450的图标式多功能应用系统设计—by jinglixix
https://bbs.eeworld.com.cn/forum ... 2184&fromuid=536508
此帖出自stm32/stm8论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 

回复

732

帖子

2

TA的资源

纯净的硅(中级)

沙发
 
界面不错,加一个背景图片会更好
此帖出自stm32/stm8论坛

点评

感谢支持!!!  详情 回复 发表于 2017-8-14 09:20
 
个人签名亚里士缺德
 

回复

1509

帖子

1

TA的资源

五彩晶圆(初级)

板凳
 
汤权 发表于 2017-8-14 08:58
界面不错,加一个背景图片会更好

感谢支持!!!
此帖出自stm32/stm8论坛
 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

4
 
不错,加油。
按键系统可以用定时扫描,主循环响应
菜单系统可以用结构体,局部刷新
sd卡和音频可以集成到主机上用spi来做,控制更灵活,还可以做相册,电子书
加8266模块就可以远程控制了
然后电源管理,充电控制
再上个状态机或者rtos系统
就掉坑里了
此帖出自stm32/stm8论坛
 
 
 

回复

6105

帖子

4

TA的资源

版主

6
 
不错,加油。
此帖出自stm32/stm8论坛

点评

谢谢啦!!!  详情 回复 发表于 2017-8-17 09:04
 
 
 

回复

1509

帖子

1

TA的资源

五彩晶圆(初级)

7
 

谢谢啦!!!
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表