| 我没有看到你对n的定义啊,那你的Switch函数有何用处呢,n初始值为0,也就是说只会执行switch(0),这样写的话,显示肯定会出问题的 |
| 数码管型号脚位是否一样? |
zqz1345444061 发表于 2021-7-31 15:39 仿真图或接线图? 定时中断中的Switch有什么意义?不可以一起做吗? 段选接口呢? |
lkc8210 发表于 2021-7-31 15:05 应该没有加,用164芯片驱动的数码管动态显示消隐我不清楚如何加 |
|
我的程序如下,放到仿真上 是可以正常运行的 #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; } } |
| 有没有加消隐? |