代码如下
#include "system.h"
#include
#define key4 (P1IN&BIT0)
#define key3 (P1IN&BIT1)
#define key2 (P1IN&BIT2)
#define key1 (P1IN&BIT3)
#define OPEN_Buzzer (P1OUT|=BIT4)
#define CLOSE_Buzzer (P1OUT&=~BIT4)
unsigned int setU=35; //上限
unsigned int setD=25; //下限
unsigned char SetFlag = 0;//设置标志
unsigned int tem; //暂存温度值
float NowTemp=0; //实际测试纸
unsigned char ReadTempFlag=0;//读取温度标志
char dis0[16];//显示暂存
char dis1[16];//显示暂存
unsigned char DisLcd=0; //显示更新
void disPlayLcd(void);
void CheckKey(void);//按键采集处理函数
void main( void )
{
IO_init();
// Uart0_init(9600);
TimerA(); //初始化定时器
TimerB();
// Init_WDT();
_EINT();
P1DIR |= (BIT4); //初始化输出
P1DIR &= ~(BIT0|BIT1|BIT2|BIT3);//初始化输入
OPEN_Buzzer; //开启蜂鸣器
LcdReset(); //LCD1602初始化
delay_ms(100);
CLOSE_Buzzer;//关断蜂鸣器
while(1)
{
CheckKey();//读取按键 并进行修改
if(ReadTempFlag==1)//读取温度标志
{
ReadTempFlag=0;
tem=ReadTemp(); //读取温度
}
if(DisLcd==1) //更新显示
{
DisLcd=0;
NowTemp=(float)tem*0.0625;//计算温度 根据手册来
sprintf(dis0,"NowTemp: %4.1f ",NowTemp);//更新显示
DispStr(0,0,(unsigned char *)dis0);//打印显示
Disp1Char(13,0,0xdf);//显示符号
Disp1Char(14,0,'C');
disPlayLcd();// 显示设置第二行数据
if((NowTemp<setD)||(NowTemp>setU))//对比上下限
{
OPEN_Buzzer; //开启蜂鸣器
}
else
{
CLOSE_Buzzer;//关断蜂鸣器
}
// LPM2; //进入低功耗 定时器中断中退出中断
}
}
}
void disPlayLcd(void)
{
if(SetFlag == 0)//按键设置标志
{
sprintf(dis1," %02d- %02d ",(int)setD,(int)setU); //更新显示标志
}
else if(SetFlag == 1)//按键设置标志0
{
sprintf(dis1,"s%02d- %02d ",(int)setD,(int)setU);//更新显示标志
}
else if(SetFlag == 2)//按键设置标志
{
sprintf(dis1," %02d-s%02d ",(int)setD,(int)setU);//更新显示标志
}
DispStr(3,1,(uchar *)dis1);//显示
}
void CheckKey(void)//按键采集处理函数
{
static unsigned char rekey =0;
if((key1==0)||(key2==0)||(key3==0)||(key4==0)) //检测到按键按下
{
delay_ms(10); //小抖动
if(rekey==0)
{
if(key1==0) //检测是否按下
{
rekey=1;
SetFlag++;//设置标志
if(SetFlag >= 3) SetFlag = 0;
}
else if(key2==0)//设置值键
{
rekey=1;
if(SetFlag==1) //处于设置1
{
if(setD > 0 )//数据-1
{setD=setD-1;}
}
else if(SetFlag==2)//处于设置2
{
if(setU > 0)//数据-1
{setU=setU-1;}
}
}
else if(key3==0)//设置值键
{
rekey=1;
if(SetFlag==1) //处于设置1
{
if(setD < 99 )//数据+1
{setD=setD+1;}
}
else if(SetFlag==2)//处于设置2
{
if(setU < 99 )//数据+1
{setU=setU+1;}
}
}
else if(key4==0)//设置值键
{
rekey=1;
SetFlag = 0;//取消设置
}
}
}
else
{
rekey=0; //防止重复检测到按键
}
}