📄 the detection system of temperature.txt
字号:
#include<reg51.h>
#define ledlen 6
#define lowtemp 0 //A/D=0
#define hightemp 99 //A/D=255
xdata unsigned char in _at_ 0x8001;
xdata unsigned char outbit _at_ 0x8002; //位控制口
xdata unsigned char outseg _at_ 0x8004; //段控制口
xdata unsigned char adport _at_ 0x9000; //A/D端口
signed char curtemp;
unsigned char ledbuf[ledlen];
unsigned char hightemplimit=85;
unsigned char lowtemplimit=5;
sbit green=P1^0;
sbit red=P1^1;
code unsigned char ledmap[]={ //数码管显示代码
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(unsigned char cnt) //延时函数
{
unsigned char i;
do
{
i=100;
do{}
while(--i);
} while(--cnt);
}
void displayresult() //温度送显示缓冲
{
signed char t;
t=curtemp;
ledbuf[4]=ledmap[t/10];
ledbuf[5]=ledmap[t%10];
ledbuf[0]=ledmap[hightemplimit/10];
ledbuf[1]=ledmap[hightemplimit%10];
ledbuf[2]=ledmap[lowtemplimit/10];
ledbuf[3]=ledmap[lowtemplimit%10];
}
void displayled() //数码管显示函数
{
unsigned char i,pos,led;
pos=0x20;
for(i=0;i<ledlen;i++)
{
outbit=0;
led=ledbuf[i];
outseg=led;
outbit=pos;
delay(2);
pos>>=1;
}
outbit=0;
}
unsigned char readad()
{
unsigned char i;
adport=0;
for(i=0;i<20;i++);
return (0xff-adport);
}
void readtemp()
{
unsigned char i;
signed int temp;
temp=0;
for(i=0;i<16;i++)
{
temp+=readad();
}
curtemp=(temp>>4)*(hightemp-lowtemp)/256+lowtemp;
}
code unsigned char keytable[]={ 0x16, 0x15, 0x14 , 0xff,
0x13, 0x12, 0x11, 0x10,
0x0d, 0x0c, 0x0b, 0x0a, 0x0d, 0x0c, 0x0b, 0x0a,
//0x0e, 0x03, 0x06, 0x09,
0x0f, 0x02, 0x05, 0x08,
0x00, 0x01, 0x04, 0x07,
};
unsigned char testkey() //键扫描函数
{
outbit=0;
return(~in&0x0f);
}
unsigned char getkey()
{
unsigned char pos;
unsigned char i;
unsigned char k;
i=6;
pos=0x20;
do
{
outbit=~pos;
pos>>=1;
k=~in & 0x0f;
}
while((--i!=0)&&(k==0));
if(k!=0)
{
i*=4;
if(k&2) i+=1;
else if (k&4) i+=2;
else if (k&8) i+=3;
outbit =0;
do delay(10);while (testkey()); //等键释放
return (keytable [i]); //取出键值
}
else return (0xff);
}
void main() //主函数
{ unsigned char key;
while(1)
{
while(!testkey())
{
displayresult();
displayled();
readtemp();
if(curtemp<lowtemplimit||curtemp>hightemplimit)
{green=0;
red=1;
}
if(curtemp>lowtemplimit&&curtemp<hightemplimit)
{green=1;
red=0;
}
}
key=getkey();
if(key==0x10)
{
if(hightemplimit<99)
hightemplimit++;
}
if(key==0x11)
{ if(hightemplimit>0)
hightemplimit--;
}
if(key==0xff)
{ if(lowtemplimit<99)
lowtemplimit++;
}
if(key==0x14)
{ if(lowtemplimit>0)
lowtemplimit--;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -