目前在用c51的数码管做一个秒表,使用了一个for循环为显示秒数的数组赋值,但不知道什么原因,效果没有实现,下面是程序源代码。
- #include <reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit LED = P0^0;
- sbit JA = P2^2;
- sbit JB = P2^3;
- sbit JC = P2^4;
- uchar code led[]={
- 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
- uchar ledbuff[8]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};
- uint cnt = 0;
- uint sec = 0;
- uchar i ;
- uchar x ;
- void delay(uint z);
- int main(void)
- {
- i=0;
- TMOD = 0x01; //0000 0001
- TH0 = 0XFC;
- TL0 = 0X18;
- TR0 = 1;
- EA = 1;
- ET0 = 1;
- while(1)
- {if(cnt >=1000)
- {
-
- cnt=0;
- ledbuff[0]=led[sec%10];
- for(x=1;x<=8;x++)
- {
- ledbuff[x]=led[sec/(x*10)%10];
- }
- sec++;
- }
-
-
- }
-
-
- return 0;
- }
- void interrupttimer0() interrupt 1
- {
- TH0 = 0XFC;
- TL0 = 0X18;
- P0 = 0XFF;
- cnt++; //cnt放在中断中了
- switch(i)
- {
- case 0: JA=1;JB=1;JC=1;P0=ledbuff[i];i++;break;
- case 1: JA=1;JB=1;JC=0;P0=ledbuff[i];i++;break;
- case 2: JA=1;JB=0;JC=1;P0=ledbuff[i];i++;break;
- case 3: JA=1;JB=0;JC=0;P0=ledbuff[i];i++;break;
- case 4: JA=0;JB=1;JC=1;P0=ledbuff[i];i++;break;
- case 5: JA=0;JB=1;JC=0;P0=ledbuff[i];i++;break;
- case 6: JA=0;JB=0;JC=1;P0=ledbuff[i];i++;break;
- case 7: JA=0;JB=0;JC=0;P0=ledbuff[i];i=0;break;
- }
-
- }
复制代码 |