我的程序如下,放到仿真上 是可以正常運行的
#include<regx51.h>
typedef unsigned char u8;
typedef unsigned int u16;
u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰數碼管
//u8 code smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共陽數碼管
u8 smgbuff[]={0x00,0x00,0x00,0x00,0x00,0x00};
u16 i,j,k,m,s,f,n,num;
sbit DAT=P3^0;
sbit CLK=P3^1;
void delay(u16 i)
{
while(i--);
}
void Timer0Init()
{
TMOD=0x01;
TL0=0x67;
TH0=0xFC; //定時1ms
EA=1;
TR0=1;
ET0=1;
}
void main()
{
Timer0Init();
while(1)
{
for(i=0;i<8;i++)
{
num=smgbuff[i];
for(j=0;j<8;j++)
{
CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
}
delay(50000);
}
}
void Timer0() interrupt 1
{
TL0=0x67;
TH0=0xFC;
k++;
if(k>=1000)
{
k=0;
if(m<60)
{
m++;
}
if(m>=60)
{
m=0;
f++;
}
if(f>=60)
{
s++;
f=0;
}
}
switch(n)
{
case(0):
smgbuff[0]=smgduan[m%10];n++;break;
case(1):
smgbuff[1]=smgduan[m/10%10];n++;break;
case(2):
smgbuff[2]=smgduan[f%10];n++;break;
case(3):
smgbuff[3]=smgduan[f/10%10];n++;break;
case(4):
smgbuff[4]=smgduan[s%10];n++;break;
case(5):
smgbuff[5]=smgduan[s/10%10];n=0;break;
default:break;
}
} |