[活动专区] 【杰发科技AC7802x测评】+多功能显示信息屏

[复制链接]
1384|3
 楼主| jinglixixi 发表于 2023-7-30 12:33 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2023-7-30 19:07 编辑

#申请原创# @21小跑堂
将点阵屏与RTC计时及传感器相配合可构建一个多功能信息信息装置,
这里仅以温度、大气压传感器BMP085和RTC计时器为例来进行介绍。
点阵屏采用的是HUB08接口,见图1所示。
1.jpg
图1 HUB08接口

该点阵屏与开发板的连接关系为:
A----PB5
B----PB3
C----PB4
D----PB6
R1----PA8
CLK----PB7
EN ----PA2
STB----PA3
BMP085与开发板的连接关系为:
SDA ----PA0
SCL ----P A1

1.电子时钟
由于AC7802x内部所配置的RTC只是一个计时器,并没有日历处理功能,故需要以秒计时通过软件的方式来实现日历的进制处理。
关于点阵屏的驱动显示参见:https://bbs.21ic.com/icview-3315650-1-1.html
在显示过程中,只提供按键来切换显示的内容,对按键所用引脚的配置函数为:
  1. void  key_GPIO(void)
  2. {
  3.           GPIO_SetFunc(GPIOB, GPIO_PIN2, GPIO_FUN0);  // NMI
  4.           GPIO_SetDir(GPIOB, GPIO_PIN2, GPIO_IN);
  5.          
  6.           GPIO_SetFunc(GPIOA, GPIO_PIN3, GPIO_FUN0);  // KEY1
  7.           GPIO_SetDir(GPIOA, GPIO_PIN11, GPIO_IN);
  8. }


实现图2和图3显示功能的主程序为:
  1. int main(void)
  2. {
  3.       char v,m=0;
  4.       InitDelay();
  5.       InitDebug();
  6.       key_GPIO();
  7.       RTC_Timeout1s();
  8.       Rtc_SetDateTime();
  9.       dzb_GPIO();
  10.       ScanRow=0;
  11.       while (1)
  12.      {
  13.                 if(GPIO_GetPinLevel(GPIOB, GPIO_PIN2)==0)   m=0;
  14.                 if(GPIO_GetPinLevel(GPIOA, GPIO_PIN11)==0)  m=1;
  15.                 if(g_timeoutFlag)
  16.                 {
  17.                           if(m==0)
  18.                           {
  19.                                         g_timeoutFlag = 0;
  20.                                         dt.sec=dt.sec+1;
  21.                                         if(dt.sec==60)
  22.                                         {
  23.                                                   dt.sec=0;
  24.                                                   dt.min=dt.min+1;
  25.                                         }
  26.                                         if(dt.min==60)
  27.                                         {
  28.                                                   dt.min=0;
  29.                                                   dt.hour=dt.hour+1;
  30.                                         }
  31.                                         if(dt.hour==24)
  32.                                         {
  33.                                                   dt.hour=0;
  34.                                                   dt.mday=dt.mday+1;
  35.                                         }
  36.                                 }
  37.                                 if(m==1)
  38.                                 {
  39.                                         if(dt.mon==2)
  40.                                         {
  41.                                                   v=(Rtc_IsLeapYear(dt.year) == 1) ? (29U) : (28U);
  42.                                         }
  43.                                         else
  44.                                         {
  45.                                                   v=month_day_num[dt.mon];
  46.                                         }
  47.                                         if(dt.mday>v)
  48.                                         {
  49.                                                   dt.mday=1;
  50.                                                   dt.mon=dt.mon+1;
  51.                                         }
  52.                                         if(dt.mon>12)
  53.                                        {
  54.                                                   dt.mon=1;
  55.                                                   dt.year=dt.year+1;
  56.                                        }
  57.                              }
  58.                          }
  59.                         if(m==0)
  60.                         {
  61.                                 sj[2]=0x0A;
  62.                                 sj[5]=0x0A;
  63.                                 sj[0]=dt.hour/10;
  64.                                 sj[1]=dt.hour%10;
  65.                                 sj[3]=dt.min/10;
  66.                                 sj[4]=dt.min%10;
  67.                                 sj[6]=dt.sec/10;
  68.                                 sj[7]=dt.sec%10;
  69.                    }
  70.                    if(m==1)
  71.                     {
  72.                                 sj[2]=0x0B;
  73.                                 sj[5]=0x0B;
  74.                                 sj[0]=dt.year/10;
  75.                                 sj[1]=dt.year%10;
  76.                                 sj[3]=dt.mon/10;
  77.                                 sj[4]=dt.mon%10;
  78.                                 sj[6]=dt.mday/10;
  79.                                 sj[7]=dt.mday%10;
  80.                    }
  81.                    Display();
  82.     }
  83. }

2.jpg
图2 时间显示效果

3.jpg
图3 日期显示效果

2.环境检测
环境检测方面,主要是显示环境的温度及大气压。
关于BMP085的使用参见:https://bbs.21ic.com/icview-3315398-1-1.html
由于在环境状态检测方面其显示内容要比时间显示功能更丰富,故需对显示字模加以扩充,所添加的内容如下:

  1. u8 S[]={
  2. ...
  3. 0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x42,0x7F,0x00,0x00,/*"L",0*/
  4. 0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x0E,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,/*"i",1*/
  5. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x22,0x22,0x1C,0x02,0x3C,0x42,0x42,0x3C,/*"g",2*/
  6. 0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x3A,0x46,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,/*"h",3*/
  7. 0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x3E,0x08,0x08,0x08,0x08,0x08,0x30,0x00,0x00,/*"t",4*/
  8. 0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,/*"=",5*/
  9. 0x00,0x00,0x00,0x7C,0x42,0x42,0x01,0x01,0x01,0x01,0x01,0x42,0x22,0x1C,0x00,0x00,/*"C",6*/
  10. 0x00,0x00,0x00,0x77,0x36,0x36,0x36,0x36,0x2A,0x2A,0x2A,0x2A,0x2A,0x6B,0x00,0x00,/*"M",7*/
  11. 0x00,0x00,0x00,0x3F,0x42,0x42,0x42,0x42,0x3E,0x02,0x02,0x02,0x02,0x07,0x00,0x00,/*"P",8*/
  12. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x78,0x44,0x42,0x42,0xFC,0x00,0x00,/*"a",9*/
  13. 0x00,0x00,0x00,0x7F,0x49,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x1C,0x00,0x00,/*"T",10*/
  14. 0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,/*"H",11*/
  15. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x00,/*".",12*/
  16. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x24,0x18,0x18,0x18,0x24,0x6E,0x00,0x00,/*"x",0*/
  17. ...
  18. }


实现图4和图5显示功能的主程序为:
  1. int main(void)
  2. {
  3.         char v,m=0;
  4.         u32 u=0,f=0;
  5.         InitDelay();
  6.         InitDebug();
  7.         GPIO_LedInit();
  8.         RTC_Timeout1s();
  9.         Rtc_SetDateTime();
  10.         dzb_GPIO();
  11.         ScanRow=0;
  12.         BMP085_Init();
  13.         Init_BMP085();
  14.         mdelay(500);
  15.         bmp085Convert();
  16.         while (1)
  17.         {
  18.                           if(GPIO_GetPinLevel(GPIOB, GPIO_PIN2)==0)  m=0;
  19.                           if(GPIO_GetPinLevel(GPIOA, GPIO_PIN11)==0)  m=1;
  20.                           if(f>50000)
  21.                           {
  22.                                    bmp085Convert();
  23.                                    f=0;
  24.                           }
  25.                           if(m==0)
  26.                           {
  27.                                    u=pressure/100;
  28.                                    sj[0]=20;
  29.                                    sj[1]=17;
  30.                                    sj[2]=u/1000;
  31.                                    sj[3]=u%1000/100;
  32.                                    sj[4]=u%100/10;
  33.                                    sj[5]=u%10;
  34.                                    sj[6]=19;
  35.                                    sj[7]=20;
  36.                           }
  37.                           if(m==1)
  38.                           {
  39.                                    u=temperature1/10;
  40.                                    sj[0]=22;
  41.                                    sj[1]=17;
  42.                                    sj[2]=u%100/10;
  43.                                    sj[3]=u%10;
  44.                                    sj[4]=26;
  45.                                    sj[5]=18;
  46.                                    sj[6]=26;
  47.                                    sj[7]=26;
  48.                           }
  49.                           Display();
  50.                           f=f+1;
  51.     }
  52. }


4.jpg
图4 温度显示效果

5.jpg
图5 气压显示效果

当然还可添加传感器BH1750来检测光照强度等,见图6所示,这里就不再细述。
6.jpg
图6 光照强度显示效果

至此,就完成了多功能显示信息屏的制作。

视频演示:




juventus9554 发表于 2023-9-5 22:25 | 显示全部楼层
这么好的原创竟然没人顶
 楼主| jinglixixi 发表于 2023-9-6 08:00 | 显示全部楼层
juventus9554 发表于 2023-9-5 22:25
这么好的原创竟然没人顶

感谢支持!!!
chenjun89 发表于 2023-9-6 08:26 来自手机 | 显示全部楼层
支持一下,原创不易。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部