switch-case-break語句和位碼都錯了,給你改成數碼管動態顯示0~7+流水燈
無標題.jpg (232.6 KB, 下載次數: 65)
下載附件
2019-11-19 15:21 上傳
- #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;
- }
復制代碼
|