📄 time_r.c
字号:
#include <at89x51.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define DpAdd XBYTE[0xc000]
#define DisOff XBYTE[0x8000]
#define DisOff1 XBYTE[0xe000]
#define AdSel XBYTE[0xa000]
#define Readlow XBYTE[0xa001]
//uchar code num[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0x00};
uchar code num[18]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0x88,0x83,0xc6,0xa9,0x83,0x8e,0xbf,0xff};
uchar display[10],ad[20],times,sec,min,hour,sel=0x01,sel1=0x20;
uint tims,lo;
/*
void ADpulse(void)
{
asm setb p1.1
asm mov r3,#4
asm {puls1:djnz r3,puls1
clr p1.1
mov r3,#4
puls2:djnz r3,#puls2
}
return
} */
/*
void HexToBcd(uint value)
{
display[0]=(uchar)(value/1000);
display[1]=(uchar)((value-display[0]*1000)/100);
display[2]=(uchar)((value-display[0]*1000-display[1]*100)/10);
display[3]=(uchar)(value-display[0]*1000-display[1]*100-display[2]*10);
}
void EnableAD(void)
{
AdSel=0x00;
}
void ADRead(void)
{
uchar high,low,Advalue,lock,temp,n;
uint sum,j;
high=AdSel;
low=Readlow;
low=low&0xf0;
low=low>>4;
temp=high&0x0f;
temp=temp<<4;
low=low|temp;
high=high>>4;
Advalue=high*256+low;
Advalue=(uint)(0.2442*Advalue);
Advalue=(uint)(0.753846*Advalue)-10;
if(Advalue<=0x00) Advalue=0x00;
ad[j]=Advalue;
j=j+1;
if(j==20) j=0;
for(n=0;n<20;n++) {sum=sum+ad[n];}
lock=sum/20;
HexToBcd(Advalue);
}
*/
void timer0(void) interrupt 1 using 1
{
TH0=-(1000/256);
TL0=-(1000%256);
DpAdd=0x00;
if(sel<0x80) {DisOff=sel;DisOff1=0x00;}
else {DisOff=0x00;DisOff1=sel1;}
if(times==0) {DpAdd=num[display[0]];}
if(times==1) {DpAdd=num[display[1]];}
if(times==2) {DpAdd=num[display[2]];}
if(times==3) {DpAdd=num[display[3]];}
if(times==4) {DpAdd=num[display[4]];}
if(times==5) {DpAdd=num[display[5]];}
if(times==6) {DpAdd=num[display[6]];}
if(times==7) {DpAdd=num[display[7]];}
if(times==8) {DpAdd=num[display[8]];times=0;}
if(sel<0x80) sel<<=1;
if(sel==0x80) {if(sel1==0x80) {sel=0x01;sel1=0x20;} else sel1<<=1;}
times++;
lo+=2;
if (tims!=500) tims++;else {tims=0;sec++;}
}
void main(void)
{
TMOD=0x01;// T/C0工作在定时方式1
TH0=-(1000/256); //预置定时初值2ms
TL0=-(1000/256);
EA=1;
ET0=1;
TR0=1;
hour=15;
min=50;
for(;;)
{
if (sec==60) {sec-=60;min++;}
if (min==60) {min-=60;hour++;}
if (hour==24) {hour=0;}
if(sec==25) {hour=3;
min=6;}
display[8]=sec/10;display[7]=sec%10;
display[4]=min/10;display[3]=min%10;
display[6]=hour/10;display[5]=hour%10;
if((P1_5==0)&&(P1_6==1))
{
if(lo<=1500) P1_2=0; else {P1_2=1;if(lo>=16500) lo=0;}
if(P1_4==0) P1_7=0;
}
else
{if(P1_6==0) P1_2=0;else P1_2=1;}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -