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

📄 display.c

📁 用DS18B20制作的冰箱控制器
💻 C
字号:
#include <absacc.h>
#include <reg2051.h>
#include <stdio.h>
#include <intrins.h> 

#define ulong	unsigned long
#define uint	unsigned int
#define uchar	unsigned char

sfr seg=0x90;	//P1口//
sbit ctrl=P3^7;	//输出控制//

sbit dig1=P3^0;
sbit dig2=P3^1;
sbit dig3=P3^2;
sbit dig4=P3^3;
sbit key_h=P3^4;	//键盘检测位,输入口与P1口共用//

uchar data keytime;	//键盘检测延时200MS//
bit keybit;	//键盘按下标志//
uchar keybuffer=0xff; 	//键盘数据//
uchar data jishimin=0;	//时间计时器,以分钟为单位循环计数//
uchar data 	jishisec=0;	//时间计时器,以秒为单位(60进制)//
uchar data jishi4ms=0;	//时间计时器,以4MS为单位(250进制)//
uchar data jishitmp=0;	//时间计时器,以4MS为单位,循环计数//	

bit disbit=0;	
uint data disbuf16=0;		//要显示的16进制数//
uchar data disbuffer[4]=0;	//显示缓冲区,共有四位,存贮十六进制转为每位显示的值如:P 1 0 6//
uchar data discount;	//显示计数器,从0到3循环计数//
bit disbz;	//显示标志位//
uchar code dismap[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x77,0x7c,0x39,0x5e,0x79,0x71};	//显示代码区//

bit DS_err ;
bit Reset;

void delay(uchar us)
{
while (--us);
}

initmcu()
	{
	ET1=1;
	EA=1;
	TMOD=0x00;		 //工作于方式0,13位计数器
	//TMOD=0X10;     //T0工作于方式1,16位计数器
	TH1=0X11;		//TH1=0xb8;
	TL1=0X99;		//TL1=0x00;
	TR1=1;
	}
 void int3()interrupt 3 using 2
{

TR1=0;
TH1=0X11;		//TH1=0xb8;
TL1=0X99;	//TL1=0x00;//方式0 4毫秒1199h
TR1=1;

jishitmp++;		//计时计数器更新//
disbit=1;
if (keybit==1)	keytime++;
else keytime=0;
jishi4ms++;		//计时时间更新,最终以分钟为单位循环计时//
if (jishi4ms>=250)
	{
	jishi4ms=0;
	jishisec++;
	if (jishisec>=60)
		{
		jishisec=0;
		jishimin++;
		}	
	}
}

void key_dis()
{
if (disbit==1)
	{
	disbit=0;
	dig1=dig2=dig3=dig4=1;
	seg=0xff;
	delay(5);
	key_h=0;
	delay(5);
	keybuffer=seg;
	key_h=1;
	delay(5);
	discount++;
	if (discount>3)
		{
		discount=0;
		}
	switch (discount)
		{
		case 0:
			{
			if (err==1)
				seg=disbuffer[0]+128;
			else seg=disbuffer[0];
			dig1=0;
			break;
			}
		case 1:
			{
			if (reset==1)
				seg=disbuffer[1]+128;
			else seg=disbuffer[1];
			dig2=0;
			break;
			}
		case 2:
			{
			seg=disbuffer[2]+128;
			dig3=0;
			break;
			}
		case 3:
			{
			if (ctrl==0)
				seg=disbuffer[3]+128;
			else seg=disbuffer[3];
			dig4=0;
			break;
			}
		}
	}
}
void Key_process()
{
	if (keybuffer!=0xff)
		{
			if (keybit==1)
			{
				if (jishitmp==kjtime&&keytmp==k)// 判断键是否有效//
				{
					keybit=0;
					switch  (keytmp)
					{
						case 254:	//若是第一个键,00->10->20->00//
						{
						if (keybuffer>=0x20)
							keybuffer=0x00;							
						else if (keybuffer>=0x10)
							keybuffer=0x20;
						else if (keybuffer>=0x00)
							keybuffer=0x10;
						else keybuffer=0x00;	
						break;
						}
						case 253:		//若是第二个键,有三种情况//
						{
						if (keybuffer<=0x21)
							{
							if (keybuffer==0x20) 
							{
							tempodds++;
								if (tempodds>25) 		//设定最大温度差值2.5度
									tempodds=tempwenchar;
							}
							else if (keybuffer==0x10)
								{
								tempset++;
								if (tempset>90)		//设定最大温度值9度,(9+2.5=11.5度为正常值)	
									tempset=tempsheding;
								}
							else 
							{
							keybuffer=keybuffer+0x02;
							if (keybuffer>=0x06)
								keybuffer=0; 	
							}				
							}
						else keybuffer=0;	
		
						break;
						}
						case 251:		//第三个键//
						{
						if (keybuffer<=0x21)
							{
							if (keybuffer==0x20) 
							{
							tempodds--;
								if (tempodds<2) 	//设定最小温度差值限制(0.3度)
									tempodds=tempwenchar;
							}
							else if (keybuffer==0x10)
								{
								tempset--;
								if (tempset<35)	//设定最小设定温度值(最大温差+1----2.5+1=3.5度)
									tempset=tempsheding;
								}
							else 
							{
							switch (keybuffer)
								{
								case 0:
								keybuffer=0;break;
								
								case 1:
								keybuffer=0;break;
								case 2:
								keybuffer=3;break;
								case 3:
								keybuffer=2;break;
								case 4:
								keybuffer=5;break;
								case 5:
								keybuffer=4;break;
								} 
							}				
							}
						else keybuffer=0;	
						break;
						}
					}
					keytmp=0xff;
		
				}
			}
			else 
			{
			keybb=1;
			kjtime=jishitmp+15;
			keytmp=k;	
			}
			
		}
		else 
		{
		keybb=0;
		keytmp=0xff;
		}
	
}

⌨️ 快捷键说明

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