⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 the detection system of temperature.txt

📁 此程序是基于单片机的温度测量系统,已通过调试,程序用C51编写,执行后可通过按键设置温度,在温度超过设定的上下限之后自动报警!
💻 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 + -