switch-case-break语句和位码都错了,给你改成数码管动态显示0~7+流水灯
- #include<reg52.h>
- #include<intrins.h>
- sbit p20=P2^0;
- sbit p21=P2^1;
- sbit p22=P2^2;
- char num=0;
- int q=0;
- bit p=0;
- char code table1[8]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
- void init()
- {
- TMOD=0x01;
- TH0=(65535-1000)/256;//1ms
- TL0=(65535-1000)%256;
- TR0=1;//定时器中断开始
- EA=1;//打开总中断
- ET0=1;//打开定时器中断
- }
- /*
- void delay0(int i)
- {
- while(i--);
- }
- */
- void main()
- {
- init();
- P1=0xfe;//初始化
- while(1)
- {
- if(p==1)
- {
- p=0;
- P0=0x00;//消隐
- switch(num)//送位码
- {
- case 0:p20=0;p21=0;p22=0;break;
- case 1:p20=1;p21=0;p22=0;break;
- case 2:p20=0;p21=1;p22=0;break;
- case 3:p20=1;p21=1;p22=0;break;
- case 4:p20=0;p21=0;p22=1;break;
- case 5:p20=1;p21=0;p22=1;break;
- case 6:p20=0;p21=1;p22=1;break;
- case 7:p20=1;p21=1;p22=1;break;
- }
- P0=table1[num];//送段码
- num++;
- num%=8;//0~7
- q++;
- if(q>=500)//0.5秒
- {
- q=0;
- P1=(P1<<1)+1;//左移1位补1
- if(P1==0xff)
- P1=0xfe;
- }
- }
- }
- }
- void delay1() interrupt 1
- {
- TH0=(65535-1000)/256;
- TL0=(65535-1000)%256;
- p=1;
- }
复制代码
|