查看: 3297|回复: 1

CYPRESS psoc4初次使用感想三 —— 电子温度计

[复制链接]
  • TA的每日心情
    无聊
    2013-8-20 13:08
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2013-12-3 19:00:39 | 显示全部楼层 |阅读模式
    分享到:

    PsoC4内置了温度传感模块,因此可以使用此模块取得环境温度并将结果输出到显示屏上,实现同时显示摄氏温度和绝对温度的功能。


    要用到的材料:

    公头杜邦线12根;

    1602液晶屏一个;

    PsoC4开发板一块;

    1.1KOhm电阻一枚;

    USB线一条。


    温度信息在1602上这样显示,上方显示绝对温度, 下方显示摄氏温度:

    TempK = 300.15 °K

    TempS  = 27        °C


    然后设计需要用到的组件:



    根据针脚定义图确定接线位置:

    http://blog.csdn.net/firedom/article/details/17028489

    http://pan.baidu.com/s/1f7r3B 第13页说明



    连接好后会像这个样子:


    然后链接电源和背光线和对比度控制线:


    将一个1.1KOhm电阻接在对比度控制端,使文字更容易辨认。

    然后是程序:


    [cpp] view plaincopy


    • #include <device.h>  
    • #include <stdio.h>  
    • #define CH0_N           0x00u  
    • #define TEMP_CH         0x01u  
    • #define DELAY_1SEC      1000u  
    • volatile uint32 dataReady = 0u;  
    • volatile int16 result[ADC_SAR_SEQ_TOTAL_CHANNELS_NUM];  
    • volatile uint32 timer_delay = 0u;  
    •   
    •   
    • void main()  
    • {  
    •     float temperature;  
    •     LCD_Start();  
    •     LCD_Position(0u,0u);  
    •     LCD_PrintString("TempK =       ");  
    •     LCD_PutChar(LCD_CUSTOM_0);  
    •     LCD_PutChar('K');  
    •     LCD_Position(1u,0u);  
    •     LCD_PrintString("TempS =       ");  
    •     LCD_PutChar(LCD_CUSTOM_0);  
    •     LCD_PutChar('C');  
    •     PWM_Start();  
    •     PWM_TriggerCommand(PWM_MASK, PWM_CMD_START);  
    •     ADC_SAR_SEQ_Start();  
    •     ADC_SAR_SEQ_StartConvert();  
    •     ADC_SAR_SEQ_IRQ_StartEx(ADC_SAR_SEQ_ISR_LOC);  
    •     ISR_TIMER_StartEx(ISR_TIMER_LOC);  
    •     CyGlobalIntEnable;  
    •   
    •     while(1)  
    •     {  
    •         if((dataReady & ADC_SAR_SEQ_INJ_EOC_MASK) != 0u)  
    •         {  
    •             dataReady &= ~ADC_SAR_SEQ_INJ_EOC_MASK;  
    •             temperature = DieTemp_CountsTo_Celsius(result[TEMP_CH]);  
    •             LCD_Position(0u,8u);  
    •             LCD_PrintString("    ");  
    •             LCD_Position(0u,8u);        
    •             LCD_PrintNumber(temperature + 273);  
    •             LCD_PutChar('.');  
    •             LCD_PrintNumber(15);  
    •             LCD_Position(1u,8u);  
    •             LCD_PrintString("     ");  
    •             LCD_Position(1u,8u);  
    •             LCD_PrintNumber((float)temperature);  
    •         }  
    •     }  
    • }  




    最后是成品展示:


    回复

    使用道具 举报

    该用户从未签到

    发表于 2013-12-12 20:59:47 | 显示全部楼层
    本帖最后由 凯文 于 2013-12-12 21:24 编辑

    LZ怎么设置的ADC啊?我这个怎么按你的连线之后编译的时候报错,ADC的0管脚没有连接。麻烦LZ把设置的ADC截图给我吧,1012688557@qq.com,谢谢楼主了,救急啊
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-5-20 14:10 , Processed in 0.130734 second(s), 18 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.