【杰发科技AC7802x测评】+多功能显示信息屏

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

图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
在显示过程中,只提供按键来切换显示的内容,对按键所用引脚的配置函数为:
void  key_GPIO(void)

{

          GPIO_SetFunc(GPIOB, GPIO_PIN2, GPIO_FUN0);  // NMI

          GPIO_SetDir(GPIOB, GPIO_PIN2, GPIO_IN);

          

          GPIO_SetFunc(GPIOA, GPIO_PIN3, GPIO_FUN0);  // KEY1

          GPIO_SetDir(GPIOA, GPIO_PIN11, GPIO_IN);

}

实现图2和图3显示功能的主程序为:

int main(void)

{

      char v,m=0;

      InitDelay();

      InitDebug();

      key_GPIO();

      RTC_Timeout1s();

      Rtc_SetDateTime();

      dzb_GPIO();

      ScanRow=0;

      while (1)

     {

                if(GPIO_GetPinLevel(GPIOB, GPIO_PIN2)==0)   m=0;

                if(GPIO_GetPinLevel(GPIOA, GPIO_PIN11)==0)  m=1;

                if(g_timeoutFlag)

                {

                          if(m==0)

                          {

                                        g_timeoutFlag = 0;

                                        dt.sec=dt.sec+1;

                                        if(dt.sec==60)

                                        {

                                                  dt.sec=0;

                                                  dt.min=dt.min+1;

                                        }

                                        if(dt.min==60) 

                                        {

                                                  dt.min=0;

                                                  dt.hour=dt.hour+1;

                                        }

                                        if(dt.hour==24) 

                                        {

                                                  dt.hour=0;

                                                  dt.mday=dt.mday+1;

                                        }

                                }

                                if(m==1)

                                {

                                        if(dt.mon==2)

                                        {

                                                  v=(Rtc_IsLeapYear(dt.year) == 1) ? (29U) : (28U);

                                        }

                                        else

                                        {

                                                  v=month_day_num[dt.mon];

                                        }

                                        if(dt.mday>v)

                                        {

                                                  dt.mday=1;

                                                  dt.mon=dt.mon+1;

                                        }

                                        if(dt.mon>12)

                                       {

                                                  dt.mon=1;

                                                  dt.year=dt.year+1;

                                       }

                             }

                         }

                        if(m==0)

                        {

                                sj[2]=0x0A;

                                sj[5]=0x0A;

                                sj[0]=dt.hour/10;

                                sj[1]=dt.hour%10;

                                sj[3]=dt.min/10;

                                sj[4]=dt.min%10;

                                sj[6]=dt.sec/10;

                                sj[7]=dt.sec%10;

                   }

                   if(m==1)

                    {

                                sj[2]=0x0B;

                                sj[5]=0x0B;

                                sj[0]=dt.year/10;

                                sj[1]=dt.year%10;

                                sj[3]=dt.mon/10;

                                sj[4]=dt.mon%10;

                                sj[6]=dt.mday/10;

                                sj[7]=dt.mday%10;

                   }

                   Display();

    }

}

图2 时间显示效果

图3 日期显示效果

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

...

0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x42,0x7F,0x00,0x00,/*"L",0*/

0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x0E,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,/*"i",1*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x22,0x22,0x1C,0x02,0x3C,0x42,0x42,0x3C,/*"g",2*/

0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x3A,0x46,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,/*"h",3*/

0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x3E,0x08,0x08,0x08,0x08,0x08,0x30,0x00,0x00,/*"t",4*/

0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,/*"=",5*/

0x00,0x00,0x00,0x7C,0x42,0x42,0x01,0x01,0x01,0x01,0x01,0x42,0x22,0x1C,0x00,0x00,/*"C",6*/

0x00,0x00,0x00,0x77,0x36,0x36,0x36,0x36,0x2A,0x2A,0x2A,0x2A,0x2A,0x6B,0x00,0x00,/*"M",7*/

0x00,0x00,0x00,0x3F,0x42,0x42,0x42,0x42,0x3E,0x02,0x02,0x02,0x02,0x07,0x00,0x00,/*"P",8*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x78,0x44,0x42,0x42,0xFC,0x00,0x00,/*"a",9*/

0x00,0x00,0x00,0x7F,0x49,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x1C,0x00,0x00,/*"T",10*/

0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,/*"H",11*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x00,/*".",12*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x24,0x18,0x18,0x18,0x24,0x6E,0x00,0x00,/*"x",0*/

...

}


实现图4和图5显示功能的主程序为:
int main(void)

{

        char v,m=0;

        u32 u=0,f=0;

        InitDelay();

        InitDebug();

        GPIO_LedInit();

        RTC_Timeout1s();

        Rtc_SetDateTime();

        dzb_GPIO();

        ScanRow=0;

        BMP085_Init();

        Init_BMP085();

        mdelay(500);

        bmp085Convert();

        while (1)

        {

                          if(GPIO_GetPinLevel(GPIOB, GPIO_PIN2)==0)  m=0;

                          if(GPIO_GetPinLevel(GPIOA, GPIO_PIN11)==0)  m=1;

                          if(f>50000) 

                          {

                                   bmp085Convert();

                                   f=0;

                          }

                          if(m==0)

                          {

                                   u=pressure/100;

                                   sj[0]=20;

                                   sj[1]=17;

                                   sj[2]=u/1000;

                                   sj[3]=u%1000/100;

                                   sj[4]=u%100/10;

                                   sj[5]=u%10;

                                   sj[6]=19;

                                   sj[7]=20;

                          }

                          if(m==1)

                          {

                                   u=temperature1/10;

                                   sj[0]=22;

                                   sj[1]=17;

                                   sj[2]=u%100/10;

                                   sj[3]=u%10;

                                   sj[4]=26;

                                   sj[5]=18;

                                   sj[6]=26;

                                   sj[7]=26;

                          }

                          Display();

                          f=f+1;

    }

}



 

图4 温度显示效果

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

图6 光照强度显示效果
至此,就完成了多功能显示信息屏的制作。
---------------------
作者:jinglixixi
链接:https://bbs.21ic.com/icview-3318152-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值