查看: 2931|回复: 2

以麒麟座开发板实现温湿度曲线显示

[复制链接]
  • TA的每日心情
    奋斗
    2023-5-10 20:09
  • 签到天数: 1742 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2017-9-12 09:39:03 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 jinglixixi 于 2017-9-12 12:09 编辑

           为了进行温湿度曲线的绘制,这里先介绍一下TFT液晶屏的用法,由于并行的TFT屏占用GPIO资源较多,使用这里选用SPI通讯方式的串口屏,它与MCU的连接关系如下:
    TFT_CS  --PA4
    TFT_RST --PA5
    TFT_D/C --PA6
    TFT_SDI --PA7
    TFT_SCK --PA8
    TFT_LED --PB0
    定义TFT屏输出高低电平语句:
    #define LCD_CS_High() GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_SET)
    #define LCD_CS_Low()  GPIO_WriteBit(GPIOA, GPIO_Pin_4,Bit_RESET)
    #define LCD_REST_High() GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET)
    #define LCD_REST_Low()  GPIO_WriteBit(GPIOA, GPIO_Pin_5,Bit_RESET)
    #define LCD_DC_High() GPIO_WriteBit(GPIOA, GPIO_Pin_6, Bit_SET)
    #define LCD_DC_Low()  GPIO_WriteBit(GPIOA, GPIO_Pin_6,Bit_RESET)
    #define LCD_SDI_High() GPIO_WriteBit(GPIOA, GPIO_Pin_7, Bit_SET)
    #define LCD_SDI_Low()  GPIO_WriteBit(GPIOA, GPIO_Pin_7,Bit_RESET)
    #define LCD_SCK_High() GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_SET)
    #define LCD_SCK_Low()  GPIO_WriteBit(GPIOA, GPIO_Pin_8,Bit_RESET)
    #define LCD_LED_High() GPIO_WriteBit(GPIOB, GPIO_Pin_0,Bit_SET)
    TFT屏引脚配置函数:
    1. void SPI_CONFIG()
    2. {
    3.         GPIO_InitTypeDef gpioInitStrcut;
    4.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);                                       
    5.         gpioInitStrcut.GPIO_Mode = GPIO_Mode_Out_PP;                                                                        
    6.         gpioInitStrcut.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;
    7.         gpioInitStrcut.GPIO_Speed = GPIO_Speed_50MHz;                                                                        
    8.         GPIO_Init(GPIOA, &gpioInitStrcut);
    9.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);                                       
    10.         gpioInitStrcut.GPIO_Mode = GPIO_Mode_Out_PP;                                                                        
    11.         gpioInitStrcut.GPIO_Pin = GPIO_Pin_0;
    12.         gpioInitStrcut.GPIO_Speed = GPIO_Speed_50MHz;                                                                        
    13.         GPIO_Init(GPIOB, &gpioInitStrcut);
    14.         LCD_LED_High();
    15. }
    复制代码
          TFT屏初始化函数:
    1. void Lcd_Init(void)
    2. {   
    3.     LCD_REST_Low();
    4.     DelayXms(20);
    5.     LCD_REST_High();
    6.     DelayXms(20);
    7.     LCD_CS_Low();  
    8.     LCD_WR_REG(0xCB);   
    9.     LCD_WR_DATA8(0x39);
    10.     LCD_WR_DATA8(0x2C);
    11.     LCD_WR_DATA8(0x00);
    12.     LCD_WR_DATA8(0x34);
    13.     LCD_WR_DATA8(0x02);
    14.     LCD_WR_REG(0xCF);  
    15.     LCD_WR_DATA8(0x00);
    16.     LCD_WR_DATA8(0XC1);
    17.     LCD_WR_DATA8(0X30);
    18.     LCD_WR_REG(0xE8);  
    19.     LCD_WR_DATA8(0x85);
    20.     LCD_WR_DATA8(0x00);
    21.     LCD_WR_DATA8(0x78);
    22.     LCD_WR_REG(0xEA);  
    23.     LCD_WR_DATA8(0x00);
    24.     LCD_WR_DATA8(0x00);
    25.     LCD_WR_REG(0xED);  
    26.     LCD_WR_DATA8(0x64);
    27.     LCD_WR_DATA8(0x03);
    28.     LCD_WR_DATA8(0X12);
    29.     LCD_WR_DATA8(0X81);
    30.     LCD_WR_REG(0xF7);  
    31.     LCD_WR_DATA8(0x20);
    32.     LCD_WR_REG(0xC0);      
    33.     LCD_WR_DATA8(0x23);   
    34.     LCD_WR_REG(0xC1);      
    35.     LCD_WR_DATA8(0x10);   
    36.     LCD_WR_REG(0xC5);      
    37.     LCD_WR_DATA8(0x3e);   
    38.     LCD_WR_DATA8(0x28);
    39.     LCD_WR_REG(0xC7);      
    40.     LCD_WR_DATA8(0x86);   
    41.     LCD_WR_REG(0x36);      
    42.     LCD_WR_DATA8(0x48);   
    43.     LCD_WR_REG(0x3A);   
    44.     LCD_WR_DATA8(0x55);
    45.     LCD_WR_REG(0xB1);   
    46.     LCD_WR_DATA8(0x00);  
    47.     LCD_WR_DATA8(0x18);
    48.     LCD_WR_REG(0xB6);     
    49.     LCD_WR_DATA8(0x08);
    50.     LCD_WR_DATA8(0x82);
    51.     LCD_WR_DATA8(0x27);  
    52.     LCD_WR_REG(0xF2);     
    53.     LCD_WR_DATA8(0x00);
    54.     LCD_WR_REG(0x26);     
    55.     LCD_WR_DATA8(0x01);
    56.     LCD_WR_REG(0xE0);     
    57.     LCD_WR_DATA8(0x0F);
    58.     LCD_WR_DATA8(0x31);
    59.     LCD_WR_DATA8(0x2B);
    60.     LCD_WR_DATA8(0x0C);
    61.     LCD_WR_DATA8(0x0E);
    62.     LCD_WR_DATA8(0x08);
    63.     LCD_WR_DATA8(0x4E);
    64.     LCD_WR_DATA8(0xF1);
    65.     LCD_WR_DATA8(0x37);
    66.     LCD_WR_DATA8(0x07);
    67.     LCD_WR_DATA8(0x10);
    68.     LCD_WR_DATA8(0x03);
    69.     LCD_WR_DATA8(0x0E);
    70.     LCD_WR_DATA8(0x09);
    71.     LCD_WR_DATA8(0x00);
    72.     LCD_WR_REG(0XE1);   
    73.     LCD_WR_DATA8(0x00);
    74.     LCD_WR_DATA8(0x0E);
    75.     LCD_WR_DATA8(0x14);
    76.     LCD_WR_DATA8(0x03);
    77.     LCD_WR_DATA8(0x11);
    78.     LCD_WR_DATA8(0x07);
    79.     LCD_WR_DATA8(0x31);
    80.     LCD_WR_DATA8(0xC1);
    81.     LCD_WR_DATA8(0x48);
    82.     LCD_WR_DATA8(0x08);
    83.     LCD_WR_DATA8(0x0F);
    84.     LCD_WR_DATA8(0x0C);
    85.     LCD_WR_DATA8(0x31);
    86.     LCD_WR_DATA8(0x36);
    87.     LCD_WR_DATA8(0x0F);
    88.     LCD_WR_REG(0x11);     
    89.     DelayXms(120);               
    90.     LCD_WR_REG(0x29);     
    91.     LCD_WR_REG(0x2c);
    92. }
    复制代码
           为自行构建小字库,可像OLED屏那样使用字模提取软件PCtoLCD2002,其操作界面如图1所示。
           图片1.png
           1 字模提取

           由于所购置的2.2寸串口屏是一块竖向显示屏,因此在制作图2的显示效果时,必须对相应的显示函数进行转置,如字符、数值、中文显示函数及波形绘制函数等。
           图片2.png
           图2 转置处理

          利用温湿度检测例程,在配置字符显示函数和图形绘制函数的情况下,可以实现图3所示的设计效果。
           图片3.png
           图3 曲线绘制

           实现温湿度曲线绘制的主函数如下:
    1. int main(void)
    2. {
    3.         int16_t i,sj,sp,j,sq,sg;
    4.         uint32_t tem;            
    5.         uint32_t hum;
    6.         uint32_t n=0,m;
    7.         Hardware_Init();                                
    8.         SPI_CONFIG();
    9.         DelayXms(1000);
    10.         Lcd_Init();         
    11.         LCD_Clear(RED);   
    12.         BACK_COLOR=RED;  
    13.         POINT_COLOR=WHITE;
    14.         showhanzi16h(40,100,6,0);
    15.         showhanzi16h(40,120,5,0);
    16.         showhanzi16h(40,140,4,0);
    17.         showhanzi16h(40,160,3,0);
    18.         showhanzi16h(40,180,2,0);
    19.         showhanzi16h(40,200,1,0);
    20.         showhanzi16h(40,220,0,0);        
    21.         showhanzi16h(200,160,2,0);
    22.         showhanzi16h(200,180,1,0);
    23.         showhanzi16h(200,280,2,0);
    24.         showhanzi16h(200,300,0,0);
    25.         POINT_COLOR=WHITE;         
    26.         DelayMs(1000);
    27.         KEY_Init();
    28.         LCD_DrawLine(10, 300, 190, 300);
    29.         LCD_DrawLine(190, 10, 190, 300);
    30.         sp=220-190;
    31.         sq=sp;        

    32.         while(1)
    33.         {        
    34.           SHT20_GetValue();
    35.           tem=sht20Info.tempreture;
    36.           hum=sht20Info.humidity;        
    37.           j++;
    38.           POINT_COLOR=YELLOW;
    39.           sj=tem*4;  
    40.           sg=hum*2;
    41.           LCD_DrawLine(220-sp, 300-4*(j-1), 220-sj, 300-4*(j));
    42.           POINT_COLOR=GREEN;
    43.           LCD_DrawLine(220-sq, 300-4*(j-1), 220-sg, 300-4*(j));
    44.           POINT_COLOR=YELLOW;
    45.           sp=sj;
    46.           sq=sg;
    47.           if(j>=64)
    48.          {
    49.           Loop:
    50.           LCD_Clear(RED);        
    51.           j=0;
    52.           POINT_COLOR=WHITE;
    53.           showhanzi16h(40,100,6,0);
    54.           showhanzi16h(40,120,5,0);
    55.           showhanzi16h(40,140,4,0);
    56.           showhanzi16h(40,160,3,0);
    57.           showhanzi16h(40,180,2,0);
    58.           showhanzi16h(40,200,1,0);
    59.           showhanzi16h(40,220,0,0);
    60.           showhanzi16h(200,160,2,0);
    61.           showhanzi16h(200,180,1,0);
    62.           showhanzi16h(200,280,2,0);
    63.           showhanzi16h(200,300,0,0);
    64.           POINT_COLOR=WHITE;  
    65.           LCD_DrawLine(10, 300, 190, 300);
    66.           LCD_DrawLine(190, 10, 190, 300);
    67.           }        
    68.                
    69.                 POINT_COLOR=YELLOW;
    70.                 tem=tem*10;
    71.                 hum=hum*10;
    72.                 LCD_ShowCharh(200,140,':',0);
    73.                 LCD_ShowCharh(200,260,':',0);
    74.                
    75.                 LCD_ShowCharh(200,250,tem/100+0x30,0);
    76.                 LCD_ShowCharh(200,240,tem%100/10+0x30,0);
    77.                 LCD_ShowCharh(200,230,'.',0);
    78.                 tem=tem%10;
    79.                 LCD_ShowCharh(200,220,tem+0x30,0);
    80.                 POINT_COLOR=GREEN;
    81.                
    82.                 LCD_ShowCharh(200,130,hum/100+0x30,0);
    83.                 LCD_ShowCharh(200,120,hum%100/10+0x30,0);
    84.                 LCD_ShowCharh(200,110,'.',0);
    85.                 hum=hum%10;
    86.                 LCD_ShowCharh(200,100,hum+0x30,0);
    87.                 //  采样间隔设置
    88.                 if (!GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12)) n=18000; //时级  
    89.                 if (!GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13)) goto loop;//清除
    90.                 if (!GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14)) n=5;    //秒级
    91.                 if (!GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_15)) n=300;  //分级
    92.                 For(m=0;m<n;m++)  DelayMs(200);
    93.         
    94.         }

    95. }
    复制代码
    回复

    使用道具 举报

    该用户从未签到

    发表于 2017-9-12 09:44:15 | 显示全部楼层
    你可以把自己之前的帖子,名称链接也放在后面的文章的开头
    行成系列,多好多好
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-5-10 20:09
  • 签到天数: 1742 天

    连续签到: 1 天

    [LV.Master]伴坛终老

     楼主| 发表于 2017-9-12 12:05:26 | 显示全部楼层
    ky123 发表于 2017-9-12 09:44
    你可以把自己之前的帖子,名称链接也放在后面的文章的开头
    行成系列,多好多好 ...

    好的!!!
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-25 21:00 , Processed in 0.132038 second(s), 20 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.