找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

请帮忙指导一下单片机8位共阳数码管循环显示0-9,谢谢!

查看数: 4990 | 评论数: 2 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-3-26 22:50

正文摘要:

各位高手你们好!我这个51开发板(STC89C52)是10多年前的板子;板子上是2组4位共阳数码管,组成的8位数码管;没有 锁存器;位选是用三极管驱动的。请高手们。帮我优化一下这个程序。谢谢!!! /*****八 ...

回复

ID:709752 发表于 2020-3-27 12:15
wulin 发表于 2020-3-27 08:12
添加一个显示缓存,可以大幅度简化代码。

谢谢您!
ID:213173 发表于 2020-3-27 08:12
添加一个显示缓存,可以大幅度简化代码。
  1. #include "reg52.h"
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uint i,j,k;
  5. uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段选数字0-9;
  6. uchar code  wela[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选开关
  7. uchar data dis_buf[11];//显示缓存
  8. void delay(uint k) //ms延时程序
  9. {
  10.         uint i,j;
  11.         for(i=k;i>0;i--)
  12.                 for(j=120;j>0;j--);
  13. }  
  14. void main()
  15. {
  16.         for(i=0;i<10;i++)
  17.         {//将需要显示的数字0~9按序保存在显示缓存中
  18.                 dis_buf[i]=table[i];       
  19.         }
  20.         while(1)
  21.         {
  22.                 P0=0xff;//消隐
  23.                 P2=wela[j];//送位码
  24.                 P0=dis_buf[j];//送段码
  25.                 j++;        //数码管动态显示计数
  26.                 if(j==8)
  27.                 {
  28.                         j=0;
  29.                         k++;    //更新速度计数
  30.                         if(k==50)//可以调整显示更新速度
  31.                         {
  32.                                 k=0;
  33.                                 dis_buf[10]=dis_buf[0];//将显示缓存0移动到10
  34.                                 for(i=0;i<10;i++)
  35.                                 {
  36.                                         dis_buf[i]=dis_buf[i+1];//显示缓存全部移动一位
  37.                                 }
  38.                         }
  39.                 }
  40.                 delay(2);//控制主循环速度
  41.         }
  42. }
复制代码

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

Powered by 单片机教程网

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