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

📄 text1.c

📁 单片机控制数码管显示,键盘可调节数码管显示设定温度,实现温度报警
💻 C
字号:
		  #include <reg52.h>
#include <intrins.h>
#include <math.h>
#include <stdio.h>             

sbit s4 = P1^0;
sbit s3 = P1^2;
sbit s2 = P1^1;
sbit s1 = P1^3;
sbit Bell = P2^7; //蜂鸣器
sbit key1 = P1^4;
sbit key2 = P1^5;
sbit key3 = P3^6;
sbit key4 = P3^7;
sbit Clock = P2^2; //时钟口线
sbit DataOut = P2^1; //数据输出口线
sbit ChipSelect = P2^0; //片选口线
#define    Wait1us        {_nop_();}
#define    Wait2us        {Wait1us;Wait1us;}
#define    Wait4us        {Wait2us;Wait2us;}
#define    Wait8us        {Wait4us;Wait4us;}
#define    Wait30us      {Wait8us;Wait8us;Wait8us;Wait4us;Wait2us;}
// 蜂鸣器鸣叫时间(5毫秒为单位)
unsigned char BellCount;
//
unsigned char BellType;
#define BT_OFF		0	// 关闭声音
#define BT_BUTTON	1	// 按键声
#define BT_WARN		2	// 提示声
#define BT_ALARM	3	// 闹铃(报警)声
#define temp        10
#define dayu        11
#define xiaoyu      12
#define xuanzhe     13


code unsigned char table[10] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char led[4];
unsigned char wendu_up=40;//**************** wen du shang xian definde zhi 40;
unsigned char wendu_low=10;//***************** wen du xia xian definde zhi 10;
unsigned char i=0;
unsigned char timesyb;//******
unsigned char show[4];
unsigned char gewei=0,shiwei=0,scend=0,minute=0;
unsigned char mi=0,mj=0,judgeset=0,dscount=0;			//judgeset symble to start set state;	dscount symble 5s to out set state; 
bit key4syb=0,setsyb=0,out_out=0;
unsigned char ledbuf[4];
void set(void);
void checkkey4(void);
//---------------------片选A/D从外界读温度--------------------------
unsigned char adc_conv()
{
    unsigned char i;
    unsigned char value;
    Clock=0;
    ChipSelect=1;
    Wait30us
    ChipSelect=0;
    for(i=0;i<8;i++)
    {
        value<<=1;
        Clock=1;
        if(DataOut==1)
            value|=0x01;//value+=1;
        Clock=0;
    }
    ChipSelect=1;
    return(value);
}
//------------------------延迟约0.1s-----------------
void delay_ms()
{
    unsigned int i;
    for(i=0;i<100;i++);
}
//-----------------------------延迟约0.4秒---------
void key_delay()
{unsigned int i,j;				//stop for 0.4s
    for(i=0;i<400;i++)for(j=0;j<1000;i++);
}
//----------------------------显示---------------
void display()
{
    P1|=0x0f;   //lit off all led
    P0=0xff;
    s1=0;
    P0=show[0];//table[led[0]];
    delay_ms();
    
    P1|=0x0f;   //lit off all led
    P0=0xff;
    s2=0;
	P0=show[1];//table[led[1]];
    delay_ms();
    
    P1|=0x0f;   //lit off all led
    P0=0xff;
    s3=0;
    P0=show[2];//table[led[2]];
    delay_ms();
    
    P1|=0x0f;   //lit off all led
    P0=0xff;
    s4=0;
    P0=show[3];//table[led[3]];
    delay_ms();
}
// 蜂鸣器声音控
void BellCtrl(unsigned char BellType)
{
	switch (BellType)
	{
		case BT_OFF:	// 关闭声音
		
			Bell = 1;
			BellCount = 0;
			break;
		case BT_BUTTON:	// 按键声音
			if (BellCount > 0)
			{
				-- BellCount;
				Bell = 0;
				Wait8us
				Bell = 0;

			}
			else
			{
				Bell = 1;
				BellType = BT_OFF;
			}
			break;
		case BT_WARN:	// 提示2声
			if (BellCount > 0)
			{
				if (BellCount > 150)
					Bell = 0;
				else if (BellCount > 100)
					Bell = 1;
				else if (BellCount > 50)
					Bell = 0;
				else
					Bell = 1;
				-- BellCount;
			}
			else
			{
				Bell = 1;
				BellType = BT_OFF;
			}
			break;
		default:break;
	}
}
// 蜂鸣器
void BellSet(unsigned char type)
{
	switch (type)
	{
		case BT_OFF:
		
			BellType = BT_OFF;
			BellCount = 0;
			break;
		case BT_BUTTON:
			BellType = BT_BUTTON;
			BellCount = 4;		// 按键声响0.1秒
			break;
		case BT_WARN:
			BellType = BT_WARN;
			BellCount = 200;	//
			break;
		default:
			break;
	}
}
void main()
{
	float k,temp1;
	unsigned char tmpl,BellType = BT_OFF,BellCount=0;
 	wendu_up=50;//******** wen du shang xian definde zhi 50;
	wendu_low=5;//******** wen du xia xian definde zhi 5;
	Bell = 1;
	TMOD=0x21;
	PT1=1;
	EA=1;
	ET0=1;
	ET1=1;
	TH0=0x4c;//*********************
	TL0=0x00;//**********************
	TH1=0x6c;
	TL1=0x6c;
	timesyb=6;
	TR0=0;//ding shi 0
	TR1=1;//start ding shi 1
    delay_ms();
    while(1)
    {	tmpl=adc_conv();
		temp1=(float)tmpl;
		k=log(temp1/(255-temp1));
		temp1=k/3380+1/298.15;
		temp1=1/temp1-270.15;
		tmpl=(unsigned char)temp1;
		led[0]=(tmpl%100)/10;
		led[1]=tmpl%10;
		show[0]=table[led[0]];//******************
		show[1]=table[led[1]];//************
		show[2]=0xbf;//******************
		show[3]=0xbf;//************
		if(tmpl>wendu_up||tmpl<wendu_low)
			{BellCtrl(BT_WARN);}
		checkkey4();
        display();
    }

}
/*---------------------------------------------------------------------------------------------------------------------------------------*/

void restart_time0(void)
	{	TR0=0;
		TH0=0x4c;
		TL0=0x00;
		dscount=0;
		TR0=1;
	}
void showtime(void)
		{
			ledbuf[0]=minute/10;
			ledbuf[1]=minute%10;
			ledbuf[2]=scend/10;
			ledbuf[3]=scend%10;
			show[0]=table[ledbuf[0]];
			show[1]=table[ledbuf[1]]&0x7f;
			show[2]=table[ledbuf[2]];
			show[3]=table[ledbuf[3]];
			display();
		}
void time1(void)interrupt 3			//multiple 80*80=1s
	{	if(mi<80)
			{	if(mj<80)
				mj++;
				else {mj=0;mi++;
					  if(key4syb==0)display();
					  else showtime();//+++++++++++++++++主要的显示与叫;
					  }
			}
		 else {mi=0;scend++;
			if(scend==60){scend=0;minute++;
							if(minute==60)
								minute=0;
				         }
		     }
	}
/*-------------------------------------------------------------------------------------------------------------------------------------*/
void time0(void)interrupt 1      //ding shi 50ms
{	TR0=0;
	if(out_out==0)
    {
    
	if(key4syb==1&&setsyb==0)
		{key4=1;display();delay_ms();
			if(key4==0)
			{judgeset++;TR0=1;}
		 else
		 	{judgeset=0;key4syb=0;}
		 if(judgeset==60)		//have keeping key4 for 3s,enter set state;
		 	{setsyb=1;
			 key4syb=0;
			 TR0=0;TH0=0x4c;TL0=0x00;TR0=1;
			 set();				//______-where to get into the set state 
			 }
		}
	if(dscount<100)					/*count 5 scends*/
	   {dscount++;TH0=0x4c;TL0=0x00;TR0=1;}
	else {
		  setsyb=0;					//return to normal state
		  show[0]=table[led[0]];					//set to the run state
		  show[1]=table[led[1]];
		  show[2]=table[led[2]];
		  show[3]=table[led[3]];
		  TR0=0;TH0=0x4c;TL0=0x00; out_out=1;
		 }
    }
    else out_out=0;
}
/*----------------------------------------------------------------------------------------------------------------------------------*/

void checkkey4(void)
		{	if(setsyb==0)
				{key4=1;Wait8us//+++++++++++++++++++++++++++++++++have key 
				if(key4==0){key4syb=1;
				TR0=1;BellSet(BT_BUTTON);
				showtime();}//+++++++++++++++++++++++++++++++++++++=show time
				}
		
		}
void set(void)
	{
	unsigned char state=0;
	unsigned char facestate=0,set_up_tempt=1,set_donw_temp=2,set_time=3,set_scend=4,set_minute=5;
	do
		switch (state)
			{case 0:led[0]=wendu_up/10;
					led[1]=wendu_up%10;
					led[2]=wendu_low/10;
					led[3]=wendu_low%10;
					show[0]=table[led[0]];	//show tempter
					show[1]=table[led[1]];
					show[2]=table[led[2]];
					show[3]=table[led[3]];
					display();
								if(key1==0)
									{key1=1;display();delay_ms(); 
										if(key1==0)	//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
											{restart_time0();BellSet(BT_BUTTON);
											state=set_time;
											showtime();while(key1==0);}break;
									}
								if(key2==0)
									{key2=1;display();delay_ms(); 
										if(key2==0)	//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
											{restart_time0();BellSet(BT_BUTTON);
											state=set_up_tempt;
											show[2]=0xff;show[3]=0xff;display();while(key2==0);}break;
									}
								if(key3==0)
									{key3=1;display();delay_ms(); 
										if(key3==0)	//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
											{restart_time0();BellSet(BT_BUTTON);
											state=set_donw_temp;
											show[0]=0xff;show[1]=0xff;display();while(key3==0);}break;
									}
								break;
			case 1:	display();
							if(key1==0)
								{key1=1;display();delay_ms(); 
									if(key1==0)	//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
										{restart_time0();BellSet(BT_BUTTON);
										state=facestate;
										while(key1==0);}break;
								}
							if(key2==0)
								{key2=1;display();delay_ms(); 
									if(key2==0)	//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
										{restart_time0();BellSet(BT_BUTTON);
										wendu_up++;
										show[0]=table[wendu_up/10];show[1]=table[wendu_up%10];display();while(key2==0);}break;
								}
							if(key3==0)
								{key3=1;display();delay_ms(); 
									if(key3==0)	//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
										{restart_time0();BellSet(BT_BUTTON);
										wendu_up--;
										show[0]=table[wendu_up/10];show[1]=table[wendu_up%10];display();while(key3==0);}break;
								}
							break;

			case 2:	display();
							if(key1==0)
								{key1=1;display();delay_ms(); 
									if(key1==0)	//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
										{restart_time0();BellSet(BT_BUTTON);
										state=facestate;
										while(key1==0);}break;
								}
							if(key2==0)
								{key2=1;display();delay_ms(); 
									if(key2==0)	//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
										{restart_time0();BellSet(BT_BUTTON);
										wendu_low++;
										show[2]=table[wendu_low/10];show[3]=table[wendu_low%10];display();while(key2==0);}break;
								}
							if(key3==0)
								{key3=1;display();delay_ms(); 
									if(key3==0)	//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
										{restart_time0();BellSet(BT_BUTTON);
										wendu_low--;
										show[2]=table[wendu_low/10];show[3]=table[wendu_low%10];display();while(key3==0);}break;
								}
							break;
			case 3:showtime();
							if(key1==0)
								{key1=1;display();delay_ms();//+++++++++++++++++++++++++++++++++have key 
									if(key1==0)
									{restart_time0();BellSet(BT_BUTTON);
									state=facestate;
									while(key1==0);}break;
								}
							if(key2==0)
								{key2=1;display();delay_ms(); 
									if(key2==0)	//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
										{restart_time0();BellSet(BT_BUTTON);
										state=set_minute;
										show[2]=0x07;show[3]=0x01;display();while(key2==0);}break;
								}
							if(key3==0)
								{key3=1;display();delay_ms(); 
									if(key3==0)	//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
										{restart_time0();BellSet(BT_BUTTON);
										state=set_scend;
										show[0]=0x07;show[1]=0x01;display();while(key3==0);}break;
								}
							if(key4==0)
								{key4=1;display();delay_ms();
									if(key4==0)	//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
										{//BellCtrl(BT_BUTTON);
										setsyb=0;				//out set state;
										while(key4==0);}break;
								}
							break;

			case 4:if(key1==0)
								{key1=1;display();delay_ms();//+++++++++++++++++++++++++++++++++have key 
									if(key1==0)
									{restart_time0();BellSet(BT_BUTTON);
									state=set_time;
									while(key1==0);}break;
								}
							if(key2==0)
								{key2=1;display();delay_ms(); 
									if(key2==0)	//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
										{restart_time0();BellSet(BT_BUTTON);
										scend++;
										show[2]=table[scend/10];show[3]=table[scend%10];display();key_delay();}break;
								}
							if(key3==0)
								{key2=1;display();delay_ms(); 
									if(key3==0)	//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
										{restart_time0();BellSet(BT_BUTTON);
										scend--;
										show[2]=table[scend/10];show[3]=table[scend%10];display();key_delay();}break;
								}
							break;
			case 5:if(key1==0)
								{key1=1;display();delay_ms();//+++++++++++++++++++++++++++++++++have key 
									if(key1==0)
									{restart_time0();BellSet(BT_BUTTON);
									state=set_time;
									while(key1==0);}break;
								}
							if(key2==0)
								{key2=1;display();delay_ms(); 
									if(key2==0)	//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
										{restart_time0();BellSet(BT_BUTTON);
										minute++;
										show[0]=table[minute/10];show[1]=table[minute%10];display();key_delay();}break;
								}
							if(key3==0)
								{key3=1;display();delay_ms(); 
									if(key3==0)	//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++have key
										{restart_time0();BellSet(BT_BUTTON);
										minute--;
										show[0]=table[minute/10];show[1]=table[minute%10];display();key_delay();}break;
								}
							break;
			default:state=facestate; break;
			}
	while(setsyb==1);
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -