📄 tem.c
字号:
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
sbit to=P2^3;
unsigned int sys10mscounter;
unsigned char syslimitcounter;
float Te;
void soft_20ms();
void hard_10ms(unsigned int delaytime);
void soft_nop(){}
void soft_10ms()
{
register int i;
for(i=0;i<711;i++);
}
void soft_20ms()
{soft_10ms();
soft_10ms();
}
void hard_10ms(unsigned int delaytime)
{sys10mscounter=delaytime;
while(sys10mscounter);
}
unsigned char data lcdcounter;
bit lcdusing1,lcdusing2;
bit lcd_checkbusy()
{register lcdstate;
dc=0;
rw=1;
cs=1;
soft_nop();
lcdstate=lcdbus;
cs=0;
return((bit)(lcdstate&0x80));
}
void lcd_wrcmd(unsigned char lcdcmd)
{lcdusing1=1;
while(lcd_checkbusy());
lcdbus=lcdcmd;
dc=0;
rw=0;
cs=1;
soft_nop();
cs=0;
lcdbus=0xff;
lcdusing1=0;
}
void lcd_moveto(char position)
{register cmd=0x80;
cmd=cmd|position;
lcd_wrcmd(cmd);
}
void lcd_wrdata(char lcddata)
{
lcdusing2=1;
while(lcd_checkbusy());
if(lcdcounter==16){
lcd_moveto(20+0x2c);
while(lcd_checkbusy());}
if(lcdcounter==32){
lcd_moveto(0);
while(lcd_checkbusy());
lcdcounter=0;}
lcdcounter++;
lcdbus=lcddata;
dc=1;
rw=0;
cs=1;
soft_nop();
cs=0;
lcdbus=0xff;
lcdusing2=0;
}
void lcd_string(char *strpoint)
{register i=0;
while(strpoint[i]!=0){
lcd_wrdata(strpoint[i]);
i++;
}
}
void lcd_init()
{lcd_wrcmd(0x38);
lcd_wrcmd(0x0c);
lcd_wrcmd(0x06);
lcd_wrcmd(0x01);
lcdcounter=0;
}
void lcd_cls()
{lcd_wrcmd(0x01);
lcdcounter=0;
}
main()
{
int i,j;//定义循环变量
char buffer[20];//定义字符数组,存储输出内容
P0=0xff;P1=0xff;P2=0xff;P3=0xff;//单片机各位口初使化
to=1;//温度报警接口值。为P2.3。低电平报警。
while(1)
//主循环。每隔10ms进行一次信号采集,对收到的信号进行分析处理。
{
lcd_init();//液晶初使化
Te=(float)read_tem(1)/16;
//read_tem为一外部函数,读取传感器输出的数据并进行计算转换为温度值。
sprintf(buffer,"%05.2f'C",Te);
//温度值转换为字符串,以便于LCD模块输出显示
lcd_string(buffer);
//LCD输出
//判断温度报警
if(Te>20)
to=0;
else
to=1;
//循环延时
for(i=0;i<70;i++)
for(j=0;j<35;j++)
{}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -