找回密码
 立即注册

QQ登录

只需一步,快速开始

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

多位数码管动态扫描显示变化数据,并不停变化数值 大家能帮我解释一下这原理吗??

[复制链接]
楼主
ID:213173 发表于 2020-11-4 12:44 | 显示全部楼层
把程序简化一下便于楼主理解
#include"reg52.h" /* 调用头文件,单片机内部寄存器都定义在此,用的时候需要先调用 */

typedef unsigned char UINT8;/* 给unsigned char重新定义一个别名UINT8,用的时候直接写UINT8就可以 */
typedef unsigned int  UINT16;/* 给unsigned int重新定义一个别名UINT16,用的时候直接写UINT16就可以 */

sbit LE1 = P2^2;   /* 定义74HC573锁存使能端口 段锁存 */
sbit LE2 = P2^3;   /* 定义74HC573锁存使能端口 位锁存 */

UINT8 code DuanMa[ ] = { 0x3F,0x06,0x5B,0x4F,
                         0x66,0x6D,0x7D,0x07,
                         0x7F,0x6F };  /* 段码值0-9 */
UINT8 code WeiMa[] = { 0xFE,0xFD,0xFB,0xF7,
                       0xEF,0xDF,0xBF,0x7F };/* 分别对应相应的数码管位码,决定哪个数码管被点亮 */
UINT8 TempData[8];   /* 存储显示值 */

void DelayMs(UINT16 Ms)
{
        UINT8 i;
        while (Ms--)
        {
                for(i=0;i<114;i++);/* 循环114大概是1MS时间 */
        }
}

void main (void)
{
        UINT16 Num=0,j=0;
        UINT8  i=0;
        while(1)
        {
                j++;
                if(j==1000)//约1秒
                {
                        j=0;
                        Num++;
                        if(Num==1000)
                                Num = 0;
                }//数据按十进制分解后保存在显示缓存中
                TempData[0] = DuanMa[Num/100%10];/* 计算显示数据对应段码的数据成员,如要显示68,则68/10=6  68%10 = 8 */
                TempData[1] = DuanMa[Num/10%10];
                TempData[2] = DuanMa[Num%10];

                P0=0x00;/* 清空数据,防止有交替重影 */
                LE1 = 1;   /* 段锁存 */
                LE1 = 0;
               
                P0=WeiMa[i];/* 取位码 */
                LE2 = 1;/* 位锁存 */
                LE2 = 0;
               
                P0=TempData[i]; /* 取显示数据,段码 */
                LE1 = 1;  /* 段锁存 */
                LE1 = 0;
                i++;
                if(i==3)
                        i=0;
                DelayMs(1);//控制主循环周期约1ms
        }
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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