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电阻接在对比度控制端,使文字更容易辨认。
然后是程序:
#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);
}
}
}
最后是成品展示: