📄 dianzibiao.txt
字号:
#include <absacc.h>
#include <reg51.h>
#define con_8279 XBYTE[0x5fff]
#define data_8279 XBYTE[0x5eff]
#define uchar unsigned char
code uchar table[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88};
sbit beer=p4^0;
sbit dot=P1^0;
static uchar dispbut[5];
uchar settime,timerint1,count1s,endset;
uchar second,minute,hour,setsecond,setminute;
uchar beep_dur,timechange,endchange;
void INTI_TMR1(void)
{ET1=1;
EA=1;
}
void INTI_TMR1INT(void)
{ TMOD=0x11;
TH1=0x4c;
TL1=0;
TR1=1;
}
void init_variable(void)
{second=0;
minute=0;
hour=0;
settime=0;
setsecond=0xff;
setminute=0xff;
beer=1;
}
void timekeeping(void)
{if(++second>=60)
{
second=0;
if(++minute>=60)
{
minute=0;
if(++hour>=12)
{
hour=0
}
}
}
}
void autobeer(void);
void TMR1_INT_SRV(void) interrupt 3 using 1
{
timerint1=1;
TH1=0x4c;
if((setsecnd==second)&&(setmiute==minute))
beer_dur=10;
if(++count1s>=20)
{
count1s=0;
dot=!dot;
timekeeping();
autobeer();
}
}
void autobeer(void)
{
if(keer_dur!=0)
{
beer_dur--;beep=0;
}
else beep=1;
}
uchar keysearch(void)
{
byte k;
p2=0xf0;
k=p2;
k=~k;
k=k&0x70;
return k;
}
void scandisp(void)
{
uchar posi=0xfe,1,j,temp;
for(i=0;i<4;i++)
{
temp=dispbuf[i];
temp=table[temp];
for(j=0;j<200;j++)
{
p2=posi;p0=temp;
}
posi<<=1;posi|=0x01;
}
}
uchar key(void)
{
uchar ta,tc,kr4,keynumb;
ta=keysearch();
if(ta==0) return 0x8f;
ta=keysearch();
if(ta==0) return 0x8f;
else
{
ta=0xfe;
for(kr4=0;kr4<4;kr4++)
{
p2=ta;
tc=p2;
if((tc&0x10)==0) keynumb=kr4+0;
if((tc&0x20)==0) keynumb=kr4+4;
if((tc&0x40)==0) keynumb=kr4+8;
}
}
do
{
ta=keysearch();
scandisp();
}while(ta!=0);
return keynumb;
}
void digitin(uchar val)
{
dispbut[3]=dispbut[2];
dispbut[2]=dispbut[1];
dispbut[1]=dispbut[0];
dispbut[0]=val;
}
void clearall(void)
{
dispbut[3]=0;
dispbut[2]=0;
dispbut[1]=0;
dispbut[0]=0;
}
void updatetime(void)
{
dispbut[3]=minute/10;
dispbut[2]=minute%10;
dispbut[1]=minute/10;
dispbut[0]=minute%10;
}
void keybranch(byte k)
{
switch(k)
{
case 0x00:settime=1;break;
case 0x01:digitin(7);break;
case 0x02:digitin(4);break;
case 0x03:digitin(1);break;
case 0x04:digitin(0);break;
case 0x05:digitin(8);break;
case 0x06:digitin(5);break;
case 0x07:digitin(2);break;
case 0x08:
if(settime==1)
{
settime=0;
endset=1;
}
if(timechange==1)
{
timechange=0;
endchange=1;
}
break;
case 0x09:digitin(9);break;
case 0x0a:digitin(6);break;
case 0x0b:digitin(3);break;
default:break;
}
}
void main(void)
{
uchar k;
INTI_TMR1();
INTI_TMR1INT();
init_variable();
while(1)
{
k=key()
if(settime==1)
{
if(k==0x00)
{
timechange=1;
settime=0;
else
{
red=0;
green=1;
setsecond=0xff;
setminute=0xff;
}
}
if(timechange==1)
{
red=1;
green=0;
}
if((settime==1)||(timechange==1))
keybranch(k);
else {updatetime();}
if(endset==1)
{
endset=0;
red=1;
setsecond=dispbuf[1]*10+dispbuf[0];
setminute=dispbuf[3]*10+dispbuf[2];
}
if(endchange==1)
{
beer_dur=10;
green=1;
endchange=0;
second=dispbuf[1]*10+dispbuf[0];
minute=dispbuf[3]*10+dispbuf[2];
}
if(k!=0x8f)
{
if(k==0x00)
{
settime=1;clearflag=1;clearall();
}
}
do
{
k=keysearch();
scandisp();
}while(k!=0);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -