阻塞式延时的写法
电饭锅什么都不用干
只显示这转圈圈
来一个简化版,抛砖引玉
- #include <reg52.h>
- typedef unsigned char u8; //0 to 255
- typedef unsigned int u16; //0 to 65535
- sbit debug = P3^7;
- sbit P10 = P1^0;
- sbit P11 = P1^1;
- sbit P12 = P1^2;
- sbit P14 = P1^4;
- sbit P16 = P1^6;
- sbit P17 = P1^7;
- u8 DigiTube_Buff[4];
- void IO_out(u8 dat)
- {
- P11=dat&0x20;
- P17=dat&0x10;
- P16=dat&0x08;
- P14=dat&0x04;
- P10=dat&0x02;
- P12=dat&0x01;
- }
- void disp()
- {
- static u8 i;
- P2 = 0xFF;
- // P1 = DigiTube_Buff[i];
- IO_out(DigiTube_Buff[i]);
- P2 = ~(0x01 << i);
- i = ++i % 4;
- }
- void Pattern()
- { static u8 mode = 0;
- u8 i;
- for(i =0; i<4; i++)
- DigiTube_Buff[i] = 0;
- if((mode >= 0) && (mode < 12))DigiTube_Buff[0]+=0x01;
- if((mode >= 9) && (mode < 21))DigiTube_Buff[0]+=0x08;
- if((mode >= 10) && (mode < 22))DigiTube_Buff[0]+=0x10;
- if((mode >= 11) && (mode < 23))DigiTube_Buff[0]+=0x20;
- if((mode >= 1) && (mode < 13))DigiTube_Buff[1]+=0x01;
- if((mode >= 8) && (mode < 20))DigiTube_Buff[1]+=0x08;
- if((mode >= 2) && (mode < 14))DigiTube_Buff[2]+=0x01;
- if((mode >= 7) && (mode < 19))DigiTube_Buff[2]+=0x08;
- if((mode >= 3) && (mode < 15))DigiTube_Buff[3]+=0x01;
- if((mode >= 4) && (mode < 16))DigiTube_Buff[3]+=0x02;
- if((mode >= 5) && (mode < 17))DigiTube_Buff[3]+=0x04;
- if((mode >= 6) && (mode < 18))DigiTube_Buff[3]+=0x08;
- mode = ++mode %24;
- }
- void main()
- { int ScanCNT1 = 0, ScanCNT2 = 0;
- while(1)
- {
- if(ScanCNT1++ > 100)
- {
- ScanCNT1 = 0;
- disp();
- }
- if(ScanCNT2++ > 5000)
- {
- ScanCNT2 = 0;
- Pattern();
- }
- }
- }
复制代码
|