📄 temper.c
字号:
#include <reg52.h>
unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};////数码管位编码
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00};//数码管段编码
unsigned char dispbuf[8]={10,10,10,10,10,0,0,0};
unsigned char time;
unsigned char getdata;
unsigned int temp;
unsigned char i;
sbit ST=P3^0;//p3.0口
sbit OE=P3^1;//
sbit EOC=P3^2;
sbit CLK=P3^3;
sbit LED1=P3^6;
sbit LED2=P3^7;
sbit BELL=P3^5;
bit lowflag;
bit highflag;
unsigned int cnta;
unsigned int cntb;
bit alarmflag;//报警标志位
void main(void)
{
ST=0;
OE=0;
TMOD=0x12;//定时/计数器方式控制位,T1定时方式1,T0定时方式2
TH0=0x216;//T0定时器初始化
TL0=0x216;
TH1=(65536-4000)/256;//T1定时器高位
TL1=(65536-4000)%256;//T1定时器底位
TR1=1;//T1运行控制位,启动运行
TR0=1;//T0运行控制位,启动运行
ET0=1;//T0溢出标志位
ET1=1;//T1溢出标志位
EA=1;//开总的中断位
ST=1;
ST=0;
while(1)
{
//LED灯是否闪烁
if((lowflag==1) &&(highflag==0))
{
LED1=0;
LED2=1;
}
else if((highflag==1) && (lowflag==0))
{
LED1=1;
LED2=0;
}
else
{
LED1=1;
LED2=1;
}
}
}
void t0(void) interrupt 1 using 0
{
CLK=~CLK;//延时
}
//////////////定时温度A/D转换函数
void t1(void) interrupt 3 using 0
{
TH1=(65536-500)/256;//定时
TL1=(65536-500)%256;
if(EOC==1)
{
OE=1;
getdata=P0;//D/A转换
OE=0;
temp=getdata*25;
temp=temp/64;
dispbuf[2]=temp/100;
dispbuf[3]=temp/10;
dispbuf[4]=temp%10;
if(getdata<77)//低温
{
lowflag=1;
highflag=0;
}
else if(getdata>153)//高温
{
lowflag=0;
highflag=1;
}
else//正常温度
{
lowflag=0;
highflag=0;
}
ST=1;
ST=0;
}
////数码管显示
P2=0xff;//数码管初选
P1=dispcode[dispbuf[time]];//取数码管段编码
P2=dispbitcode[time];//数码管位编码
////延时
time++;
if(time==8)
{
time=0;
}
//报警显示和蜂鸣器鸣叫
if((lowflag==1) && (highflag==0))
{
cnta++;
if(cnta==800)
{
cnta=0;
alarmflag=~alarmflag;//报警位
}
if(alarmflag==1)
{
BELL=~BELL;//蜂鸣器报警
}
}
else if((lowflag==0) && (highflag==1))
{
cntb++;
if(cntb==400)
{
cntb=0;
alarmflag=~alarmflag;
}
if(alarmflag==1)
{
BELL=~BELL;
}
}
else
{
alarmflag=0;
cnta=0;
cntb=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -