#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit wei=P2^7;
sbit duan=P2^6;
unsigned char leddata[]={ //数码管字形表
0x3F, //"0"
0x06, //"1"
0x5B, //"2"
0x4F, //"3"
0x66, //"4"
0x6D, //"5"
0x7D, //"6"
0x07, //"7"
0x7F, //"8"
0x6F, //"9"
0x77, //"A"
0x7C, //"B"
0x39, //"C"
0x5E, //"D"
0x79, //"E"
0x71, //"F"
0x76, //"H"
0x38, //"L"
0x37, //"n"
0x3E, //"u"
0x73, //"P"
0x5C, //"o"
0x40, //"-"
0x00, //熄灭
0x00 //自定义
};
void delay(uint z) //软件延时程序
{ uint a,b;
for(a=0;a<z;a++)
for(b=0;b<120;b++);
}
void display(uint z) //数码管显示程序
{ uchar shi,ge;
shi=z/10;
ge=z%10;
P0=0xff;
duan=1;
P0=leddata[shi];
duan=0;
wei=1;
P0=0xfe;
wei=0;
delay(5);
P0=0xff;
duan=1;
P0=leddata[ge];
duan=0;
wei=1;
P0=0xfd;
wei=0;
}
void time() //中断设置程序
{
TMOD =0x01;
TH0=0x4b;
TL0=0xfd;
ET0=1;
TR0=1;
EA=1;
}
void timer0() interrupt 1 //中断服务程序
{ uint count;
TH0=0x4b;
TL0=0xfd;
count++;
if(count==50)
{
P1=0;
delay(5);
count=0; //不知道为什么程序执行到此处出现延迟,P1口LED持续亮4s左右,可是这里没有延时程序。
//困扰许久,不得其解。希望老师能帮忙解答一下。
}
}
void main() //主程序
{ uchar i,j;
uint a;
time();
while(1)
{
P1=0x7f;
for(i=0;i<8;i++)
{
for(j=0;j<50;j++)
{
display(a); //数码管累加
delay(10);
}
P1=_cror_(P1,1); //LED循环右移
a++;
if(a>98)
a=0;
}
}
}
|