查看: 4695|回复: 4

[原创] LPC11U68开发板(六)LCD+AM2302

[复制链接]
  • TA的每日心情
    开心
    2020-1-12 00:23
  • 签到天数: 745 天

    连续签到: 1 天

    [LV.9]以坛为家II

    27

    主题

    1万

    帖子

    26

    金牌会员

    Rank: 6Rank: 6

    积分
    6868
    最后登录
    2020-7-15
    发表于 2018-11-21 09:39:36 | 显示全部楼层 |阅读模式
           本次实验测试是在上次LCD基础上增加AM2302温、湿度而成,经处理的温、湿度数据通过LCD分时显示,AM2302故障时显示“Error”。
    一、实验资源
    1、LPC11U68(OM13058)开发板;
    2、KEIL V5.25.2.0;
    3、lpcopen_3_03_keil_iar_lpcxpresso_11u68;
    4、6位段码LCD(HT1621)模块;
    5、AM2302模块;
    二、实验过程
    1、硬件连接。LCD模块PCB上已引出VDD、GND、CS、WR、DATA,采用杜邦线与开发板相连接与LCD实验接法相同;AM2302的数据端口接在了PIO1_9;

    QQ截图20181119131042.png
    IMG_20181120_154733.jpg
    IMG_20181121_001856.jpg
    2、实验程序。在AM2302数据采集过程中,数据端口要根据情况适时改变方向:
    1. static void AM2302_IPU_MODE(void)
    2. {         
    3.         Chip_GPIO_SetPinDIRInput(LPC_GPIO, 1, 9);//设置PIO0_12端口为输入               
    4. }
    复制代码
    1. static void AM2302_OUT_MODE(void)
    2. {        
    3.         Chip_GPIO_SetPinDIROutput(LPC_GPIO, 1, 9);//设置PIO1_9端口为输出       
    4. }
    复制代码
    1. void AM2302_Init(void)
    2. {
    3.         Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_GPIO);//GPIO时钟使能
    4.         Chip_IOCON_PinMuxSet(LPC_IOCON, 1, 9, (IOCON_FUNC0 | IOCON_MODE_INACT | IOCON_DIGMODE_EN));
    5.         AM2302_OUT_MODE();       
    6.         AM2302_Port_HIGH();  //拉高AM2302端口
    7. }
    复制代码


    为方便操作,程序中定义了结构体并对AM2302端口进行了宏定义:
    1. /************************ AM2302 数据类型定义******************************/
    2. typedef struct
    3. {
    4.         uint8_t  humH8bit;        //湿度高8位
    5.         uint8_t  humL8bit;        //湿度低8位
    6.         uint8_t  temH8bit;        //温度高8位
    7.         uint8_t  temL8bit;        //温度高8位
    8.         uint8_t  check;                   //校验和
    9.   float    hum;       //实际湿度
    10.   float    tem;             //实际温度  
    11. } AM2302_TypeDef;


    12. #define AM2302_Port_LOW()          Chip_GPIO_WritePortBit(LPC_GPIO, 1, 9, 0)//PIO1_9端口置低
    13. #define AM2302_Port_HIGH()  Chip_GPIO_WritePortBit(LPC_GPIO, 1, 9, 1)//PIO1_9端口置高
    14. #define AM2302_Port_READ()  Chip_GPIO_GetPinState(LPC_GPIO, 1, 9)//读PIO1_9端口
    复制代码


    显示程序写了三个,分别用于温、湿度和"-Error":
    1. /********************************************************
    2. 函数名称:void DispError(void)
    3. 功能描述: AM2302故障后显示“-Error”
    4. 参数说明:                                       
    5. 说    明:                                      
    6. ********************************************************/
    7. void DispError(void)
    8. {
    9.         Ht1621WrOneData(0x0A,0x00);//-
    10.         Ht1621WrOneData(0x0B,0x02);

    11.         Ht1621WrOneData(0x08,0x01);//E
    12.         Ht1621WrOneData(0x09,0x0f);

    13.         Ht1621WrOneData(0x06,0x00);//r
    14.         Ht1621WrOneData(0x07,0x06);

    15.         Ht1621WrOneData(0x04,0x00);//r
    16.         Ht1621WrOneData(0x05,0x06);

    17.         Ht1621WrOneData(0x02,0x04);//o
    18.         Ht1621WrOneData(0x03,0x0e);

    19.         Ht1621WrOneData(0x00,0x00);//r
    20.         Ht1621WrOneData(0x01,0x06);
    21. }
    复制代码


    在主程序中分时显示:
    1. /**
    2. * @brief        main routine for blinky example
    3. * @return        Function should not exit.
    4. */
    5. AM2302_TypeDef AM2302;

    6. int main(void)
    7. {
    8. //        uint8_t i,j,t;//用于LCD测试
    9.        
    10.         SystemCoreClockUpdate();
    11.         delay_init();                     
    12.         AM2302_Init();           
    13.         Ht1621_Init();
    14.         Ht1621WrAllData(0,Ht1621Tab,16);//清屏
    15.        
    16.         while(1)
    17.         {               
    18.                 if(ReadAM2302(&AM2302) == 1)
    19.     {
    20.                         DispHum(AM2302.hum);//显示湿度
    21.                         delay_ms(500);
    22.                         delay_ms(500);
    23.                         delay_ms(500);
    24.                        
    25.                         DispTem(AM2302.tem);//显示温度
    26.                         delay_ms(500);
    27.                         delay_ms(500);
    28.                         delay_ms(500);
    29.                 }
    30.     else
    31.     {
    32.       DispError();//error
    33.     }
    34.                
    35.                 /*LCD刷屏测试,显示所有笔段*/
    36. //                Ht1621WrAllData(0,Ht1621Tab,16);//清屏
    37. //                for(i=0; i<54; i++)
    38. //                {
    39. //                        t = 0x01;
    40. //                        for(j=0; j<4; j++)
    41. //                        {
    42. //                                Ht1621WrOneData(i,t);
    43. //                                t <<= 1;
    44. //                                t++;
    45. //                                delay_ms(200);
    46. //                        }
    47. //                }
    48.         }
    49. }
    复制代码


    三、实验结果
    1、温度
    IMG_20181121_001803.jpg
    IMG_20181121_001934.jpg

    2、湿度
    IMG_20181121_002125.jpg

    3、错误
    IMG_20181121_002422.jpg

    四、实验总结
          在实验中发现前期利用SysTick测试好的延时程序不好用了,表现为实际延时时间差距很大,delay_ms(time)引入的实参大于699就会出问题,下来还要对LPC11U68的时钟深入学习理解;显示函数写了三个,看看能不能优化为一个通用显示函数。
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 10:39
  • 签到天数: 1873 天

    连续签到: 4 天

    [LV.Master]伴坛终老

    203

    主题

    3万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    112711
    最后登录
    2025-8-30
    发表于 2018-11-21 09:51:07 | 显示全部楼层
    Systick试试这个:
    https://www.nxpic.org.cn/module/forum/thread-615231-1-1.html

    不过也不是特别精确
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-1-12 00:23
  • 签到天数: 745 天

    连续签到: 1 天

    [LV.9]以坛为家II

    27

    主题

    1万

    帖子

    26

    金牌会员

    Rank: 6Rank: 6

    积分
    6868
    最后登录
    2020-7-15
     楼主| 发表于 2018-11-21 10:10:48 | 显示全部楼层
    stm1024 发表于 2018-11-21 09:51
    Systick试试这个:
    https://www.nxpic.org.cn/module/forum/thread-615231-1-1.html

    好的,我研究一下。谢谢!
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 10:39
  • 签到天数: 1873 天

    连续签到: 4 天

    [LV.Master]伴坛终老

    203

    主题

    3万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    112711
    最后登录
    2025-8-30
    发表于 2018-11-21 10:43:00 | 显示全部楼层
    lising 发表于 2018-11-21 10:10
    好的,我研究一下。谢谢!

    多交流学习
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-1-12 00:23
  • 签到天数: 745 天

    连续签到: 1 天

    [LV.9]以坛为家II

    27

    主题

    1万

    帖子

    26

    金牌会员

    Rank: 6Rank: 6

    积分
    6868
    最后登录
    2020-7-15
     楼主| 发表于 2018-11-21 18:18:19 | 显示全部楼层
    必须滴
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-31 06:31 , Processed in 0.096814 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表