任務(wù)目的是用單片機控制兩個數(shù)碼管,實現(xiàn)0~99的循環(huán)自加。
電路原理圖如下:
我的單片機代碼如下所示:
- #include<reg51.h>
- #define u8 unsigned char;
- #define u16 unsigned int;
- u8 seg[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; //共陽0~9段碼
- void delay(void)
- {
- int i;
- for(i = 0; i < 20; i++)
- ;
- }
- void main(void)
- {
- char i = 1, time = 0;
- char ten, one;
-
- P0 = 0xc0; //初始化
- P2 = 0xfc;
- TMOD = 0X01;
- TH0 = (65536 - 50000) / 256;
- TL0 = (65536 - 50000) % 256;
- TR0 = 1;
-
- while(1)
- {
- if(TF0 == 1)
- {
- if(i == 20) //延時一秒
- {
- i = 0;
- /*ten = time / 10;
- one = time % 10;
- P2 = 0xfe;
- P0 = seg[one];
- delay();
- P2 = 0xfd;
- P0 = seg[ten]; */
- if(time == 99)
- time = 0;
- else
- time++;
- }
- i++;
- TF0 = 0;
- TH0 = (65536 - 50000) / 256;
- TL0 = (65536 - 50000) % 256;
- }
- ten = time / 10; //數(shù)碼管顯示
- one = time % 10;
- P2 = 0xfe;
- P0 = seg[one];
- delay();
- P2 = 0xfd;
- P0 = seg[ten];
- delay();
- }
- }
復制代碼 仿真結(jié)果為兩個數(shù)碼管的數(shù)字飛快跳動,且無法辨認,即使縮短delay(),效果也無變化。
求各位的指教。
|