[LKS32 硬件] 【凌鸥创芯电机开发板LKS32MC071CBT8评测报告】+多功能信息牌的实现

[复制链接]
1043|2
 楼主| jinglixixi 发表于 2023-7-31 23:09 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2023-8-2 11:04 编辑

#申请原创# @21小跑堂

将点阵显示屏与RTC计时器及传感器结合起来可构成一个多功能的信息显示牌,这里仅以温度与大气压传感器为例来加以介绍,至于用RTC计时器来实现电子时钟的方法可参见:
https://bbs.21ic.com/icview-3310866-1-1.html

1.jpg
图1  电子时钟显示效果


BMP085是一种温度与大气压传感器,它采用I2C接口来工作,其与开发板的连接关系为:
SCL ---P00
SDA ---P32

为便于输出高低电平,所作的语句定义为:
#define SCL_Set1()      GPIO_SetBits(GPIO0, GPIO_Pin_0)
#define SCL_Clr1()      GPIO_ResetBits(GPIO0, GPIO_Pin_0)
#define SDA_Set1()      GPIO_SetBits(GPIO3, GPIO_Pin_2)
#define SDA_Clr1()      GPIO_ResetBits(GPIO3, GPIO_Pin_2)

为读取数据引脚的状态,所作的语句定义为:
#define SDA_IN          GPIO_ReadInputDataBit(GPIO3,GPIO_Pin_2)

由于在工作过程中,数据引脚要在输入与输出模式间频繁变换,故为模式切换定义了相应的模式设置函数,其内容如下:
  1. void INPUT_MODE_SET()
  2. {
  3.     GPIO_InitTypeDef GPIO_InitStruct;
  4.     GPIO_StructInit(&GPIO_InitStruct);
  5.     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
  6.     GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
  7.     GPIO_InitStruct.GPIO_Pin =  GPIO_Pin_2;
  8.     GPIO_Init(GPIO3, &GPIO_InitStruct);
  9. }

  10. void OUTPUT_MODE_SET()
  11. {
  12.     GPIO_InitTypeDef GPIO_InitStruct;
  13.     GPIO_StructInit(&GPIO_InitStruct);
  14.     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
  15.     GPIO_InitStruct.GPIO_Pin =  GPIO_Pin_2;
  16.     GPIO_Init(GPIO3, &GPIO_InitStruct);
  17. }

BMP085完成数据检测后,需通过数值变换来生成标准的显示值,实现该变换处理的函数为:
  1. void bmp085Convert()
  2. {
  3.       unsigned int ut;
  4.       unsigned long up;
  5.       long x1, x2, b5, b6, x3, b3, p;
  6.       unsigned long b4, b7;
  7.       ut = bmp085ReadTemp();
  8.       up = bmp085ReadPressure();
  9.       x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15;
  10.       x2 = ((long) mc << 11) / (x1 + md);
  11.       b5 = x1 + x2;
  12.       temperature1 = ((b5 + 8) >> 4);
  13.       b6 = b5 - 4000;
  14.       x1 = (b2 * (b6 * b6)>>12)>>11;
  15.       x2 = (ac2 * b6)>>11;
  16.       x3 = x1 + x2;
  17.       b3 = (((((long)ac1)*4 + x3)<<OSS) + 2)>>2;
  18.       x1 = (ac3 * b6)>>13;
  19.       x2 = (b1 * ((b6 * b6)>>12))>>16;
  20.       x3 = ((x1 + x2) + 2)>>2;
  21.       b4 = (ac4 * (unsigned long)(x3 + 32768))>>15;
  22.       b7 = ((unsigned long)(up - b3) * (50000>>OSS));
  23.       if (b7 < 0x80000000)
  24.             p = (b7<<1)/b4;
  25.       else
  26.             p = (b7/b4)<<1;
  27.       x1 = (p>>8) * (p>>8);
  28.       x1 = (x1 * 3038)>>16;
  29.       x2 = (-7357 * p)>>16;
  30.       pressure = p+((x1 + x2 + 3791)>>4);
  31. }

实现温度显示的函数为:
  1. void t_disp(void)
  2. {
  3.           long  mm;
  4.           mm=temperature1/10;
  5.           sj[0]=13;
  6.           sj[1]=15;
  7.           sj[2]=mm%100/10;
  8.           sj[3]=mm%10;
  9.           sj[4]=12;
  10.           sj[5]=18;
  11.           sj[6]=12;
  12.           sj[7]=12;
  13. }

实现大气压显示的函数为:
  1. void p_disp(void)
  2. {
  3.           long  mm;
  4.           mm=pressure/100;
  5.           sj[0]=14;
  6.           sj[1]=15;
  7.           sj[2]=mm/1000;
  8.           sj[3]=mm%1000/100;
  9.           sj[4]=mm%100/10;
  10.           sj[5]=mm%10;
  11.           sj[6]=16;
  12.           sj[7]=17;
  13. }

在以上函数的支持下,实现信息自动切换显示功能的主程序为:
  1. int main(void)
  2. {
  3.         u32 p;
  4.         u8 o=0;
  5.         Hardware_init();
  6.         Delay_Ms(500);
  7.         ScanRow=0;
  8.         Init_BMP085();
  9.         dzb_init();
  10.         bmp085Convert();
  11.         while (1)
  12.         {
  13.              for(p=0;p<40000;p++)
  14.              {
  15.                       Display();
  16.              }
  17.              o=(o+1)%2;
  18.              bmp085Convert();
  19.              f(o==1)
  20.              {
  21.                      p_disp();
  22.              }
  23.              else
  24.              {
  25.                      t_dispp();
  26.              }
  27.         }
  28. }

经程序的编译和下载,其显示效果如图2和图3所示。

2.jpg
2  大气压显示效果

3.jpg
3  温度显示效果

演示视频:


caigang13 发表于 2023-8-1 07:31 来自手机 | 显示全部楼层
这个点阵屏是智能接口的,还是直接控制。
 楼主| jinglixixi 发表于 2023-8-1 13:11 | 显示全部楼层
caigang13 发表于 2023-8-1 07:31
这个点阵屏是智能接口的,还是直接控制。

直接控制
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

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