|
发表于 2018-3-21 09:31:09
|
显示全部楼层
我给你搞定了。
因为数码管显示,是用扫描法,中间是不能有太多时间延时,所以,只能用定时器了。
#include <reg52.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
void delay(uint z){
while(z--);
}
uint code letter[7]={0x6d,0x37,0x06,0x5c,0x5c,0x5c,0x7c};
uint code number[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
char j=9,TT=0;
void booo()
{
int i;
for(i=0;i<7;i++)
{
switch(i)
{
case(0):
LSA=0;LSB=0;LSC=0;break;
case(1):
LSA=0;LSB=1;LSC=0;break;
case(2):
LSA=1;LSB=1;LSC=0;break;
case(3):
LSA=0;LSB=0;LSC=1;break;
case(4):
LSA=1;LSB=0;LSC=1;break;
case(5):
LSA=0;LSB=1;LSC=1;break;
case(6):
LSA=1;LSB=1;LSC=1;break;
}
P0=letter[i];
delay(100);
P0=0x00;
}
}
void TimeConfig()
{
TMOD = 0x10;
TH1 = 0x3c;
TL1 = 0xb0;
EA = 1;
ET1 = 1;
TF1=0;
TR1 = 0;
}
void xs()
{
LSA=1;LSB=0;LSC=0;
P0=number[j];
delay(100);
P0=0x00;
}
void main()
{
TimeConfig();
TR1 = 1;
while(1)
{
booo();
xs();
if (j==0)
{
TR1 = 0;
EA = 0;
j=0;
}
}
}
void Time1() interrupt 3
{
TH1 = 0x3c;
TL1 = 0xb0;
TT++;
if (TT>=20)
{
TT=0;
j--;
}
TF1=0;
}
|
|