标题:
单片机定时器0~99循环自加器程序,数字飞快跳动,缩短delay也不行
[打印本页]
作者:
xunuo
时间:
2019-1-31 19:22
标题:
单片机定时器0~99循环自加器程序,数字飞快跳动,缩短delay也不行
任务目的是用单片机控制两个数码管,实现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(),效果也无变化。
求各位的指教。
作者:
ssk7793
时间:
2019-2-1 08:51
延时太短,建议你看看别人51的延时函数
作者:
xuyaqi
时间:
2019-2-1 09:00
应该加大delay(),而不是缩短delay()。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1