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);
- }
- }
- }
最后是成品展示:
|