📄 display.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 + -