标题: 单片机定时器0~99循环自加器程序,数字飞快跳动,缩短delay也不行 [打印本页]

作者: xunuo    时间: 2019-1-31 19:22
标题: 单片机定时器0~99循环自加器程序,数字飞快跳动,缩短delay也不行
任务目的是用单片机控制两个数码管,实现0~99的循环自加。

电路原理图如下:


我的单片机代码如下所示:
  1. #include<reg51.h>
  2. #define u8 unsigned char;
  3. #define u16 unsigned int;

  4. u8 seg[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};                 //共阳0~9段码

  5. void delay(void)
  6. {
  7.         int i;

  8.         for(i = 0; i < 20; i++)
  9.                 ;
  10. }

  11. void main(void)
  12. {
  13.         char i = 1, time = 0;
  14.         char ten, one;
  15.         
  16.         P0 = 0xc0;                                                                                  //初始化
  17.         P2 = 0xfc;
  18.         TMOD = 0X01;
  19.         TH0 = (65536 - 50000) / 256;
  20.         TL0 = (65536 - 50000) % 256;
  21.         TR0 = 1;
  22.         
  23.         while(1)
  24.         {
  25.                 if(TF0 == 1)
  26.                 {
  27.                         if(i == 20)                                                                  //延时一秒
  28.                         {
  29.                                 i = 0;
  30.                                 /*ten = time / 10;
  31.                                 one = time % 10;
  32.                                 P2 = 0xfe;
  33.                                 P0 = seg[one];
  34.                                 delay();
  35.                                 P2 = 0xfd;
  36.                                 P0 = seg[ten]; */
  37.                                 if(time == 99)
  38.                                         time = 0;
  39.                                 else
  40.                                         time++;
  41.                         }
  42.                         i++;
  43.                         TF0 = 0;
  44.                         TH0 = (65536 - 50000) / 256;
  45.                         TL0 = (65536 - 50000) % 256;
  46.                 }

  47.                 ten = time / 10;                                                          //数码管显示
  48.                 one = time % 10;
  49.                 P2 = 0xfe;
  50.                 P0 = seg[one];
  51.                 delay();
  52.                 P2 = 0xfd;
  53.                 P0 = seg[ten];
  54.                 delay();
  55.         }               
  56. }
复制代码
仿真结果为两个数码管的数字飞快跳动,且无法辨认,即使缩短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