找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1631|回复: 2
打印 上一主题 下一主题
收起左侧

单片机定时器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(),效果也无变化。

求各位的指教。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:424598 发表于 2019-2-1 08:51 来自手机 | 只看该作者
延时太短,建议你看看别人51的延时函数
回复

使用道具 举报

板凳
ID:94031 发表于 2019-2-1 09:00 | 只看该作者
应该加大delay(),而不是缩短delay()。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表