现象:3个数码管量,最右边的到10则上面的数码管加1,其本身清0
#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit LSA = P3^0;
sbit LSB = P3^1;
sbit LSC = P3^3; //数码管位选
u8 DisplayData[8];
u8 code List[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //数字列表
u8 codes[6]; //
u8 S,M,Mo; //3个数
void delay(u16 i) //延时函数,i=1,延时10us
{
while(i--);
}
void DigDisplay() //数码管显示函数
{
u8 i;
for(i=0;i<3;i++){
switch(i){
case(0):LSA=0;LSB=0;LSC=0;break;
case(1):LSA=1;LSB=0;LSC=0;break;
case(2):LSA=0;LSB=1;LSC=0;break;
}
P0 = DisplayData[i];
delay(100);
P0 = 0x00;
}
}
void shuju() //数据处理
{
DisplayData[2] = List[codes[0]];
DisplayData[1] = List[codes[1]];
DisplayData[0] = List[codes[2]];
}
void Init_Time0() //定时中断0初始函数
{
TMOD |= 0x01;
TH0 = 0xfc;
TL0 = 0x18;
ET0 = 1;
EA = 1;
TR0 = 1;
}
void main()
{
Init_Time0();
while(1){
shuju();
DigDisplay();
}
}
void inter_Time0() interrupt 1 //定时中断0服务函数
{
static u16 i;
TH0 = 0xfc;
TL0 = 0x18;
i++;
if(i==1000){
i=0;
S++;
codes[0] = S;
if(S==10){ //当S=10,则M进1
S = 0;
M+=1;
codes[1]=M;
if(M==10){ //当M=10,Mo进1
M=0;
Mo+=1;
codes[2]= Mo;
}
}
}
}
网友评论