数字钟实验+程序+仿真.doc
文本预览下载声明
程序自己写的,图用proteus仿真的
K1按一下,分钟加1
K2按一下,分钟减1
K3按一下,小时加1
K4按一下,小时减1
实验程序代码:
#includereg52.h
#define uint unsigned int
uint sec, min,hour,flag;
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //段码控制
unsigned char code dispbit[8]={0x01,0x02,0x08,0x10,0x40,0x80,0x04,0x20}; //位选控制 查表的方法控制
sbit led=P2^0;
sbit enter=P3^2;
sbit key1=P2^1;
sbit key2=P2^2;
sbit key3=P2^3;
sbit key4=P2^4;
void init();
void delay(unsigned int i);
void display();
void check();
void main ()
{
init();
while(1)
{
check();
if(flag==20)
{
flag=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
}
display();
}
}
void init()
{
//EA=1;
//IE0=1;
// IT0=0;
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
TR0=1;
ET0=1;
led=0;
}
/*void int_0() interrupt 0
{
while(!key1)
{
while(!key1);
hour++;
led=~led;
}
}*/
void T0_time() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
flag++;
//led=~led;
}
void display()
{
unsigned int num[8];
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
// unsigned int num1[8]={0xa4,0xc0,0xf9,0xa4,0xbf,0xbf,0xf9,0xc0};
int m;
num[0]=table[hour/10];
num[1]=table[hour%10];
num[2]=table[min/10];
num[3]=table[min%10];
num[4]=table[sec/10];
num[5]=table[sec%10];
num[6]=0xbf;
num[7]=0xbf;
for(m=0;m8;m++)
{
P1=dispbit[m];
P0=num[m];
delay(10);
}
// delay(2000);
/* for(m=0;m8;m++)
{
P1=dispbit[m];
P0=num1[m];
delay(10);
} */
}
void delay(unsigned int i)
{
char j;
for(i; i 0; i--)
for(j = 200; j 0; j--);
}
void check()
{
P2=0xff;
if
显示全部