任務目的是用單片機控制兩個數碼管,實現0~99的循環自加。
電路原理圖如下:
QQ截圖20190131191920.png (64.17 KB, 下載次數: 29)
下載附件
2019-1-31 19:22 上傳
我的單片機代碼如下所示:
- #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; //數碼管顯示
- one = time % 10;
- P2 = 0xfe;
- P0 = seg[one];
- delay();
- P2 = 0xfd;
- P0 = seg[ten];
- delay();
- }
- }
復制代碼 仿真結果為兩個數碼管的數字飛快跳動,且無法辨認,即使縮短delay(),效果也無變化。
求各位的指教。
|