任务目的是用单片机控制两个数码管,实现0~99的循环自加。
电路原理图如下:
我的单片机代码如下所示:
- #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(),效果也无变化。
求各位的指教。
|