打印
[51单片机]

138动态数码管的封装扫描

[复制链接]
823|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
不厉害|  楼主 | 2019-11-20 11:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
相信很多人最开始写51单片机的138动态数码管的时候,采用的是传统循环扫描的那种方式。
不得不说那种方式有很多缺点,不仅会使程序结构不清晰,代码也是相当麻烦。
这里作者给出了全新的代码实现方式。

动态数码管的头文件:
#ifndef _FLEXIBLE_DIG_H
#define _FLEXIBLE_DIG_H

#include <reg51.h>
void Dig_Dis_OneBit(unsigned char addr,unsigned char dat);

#endif

动态数码管的C文件:
#include <Flexible_Dig.h>

sbit LSA=P2^0;
sbit LSB=P2^1;
sbit LSC=P2^2;

unsigned char code duanma[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,  // 0  1  2  3  4  5  6  7  8  9
0xbf,0xff,0x7f};                        // -  不显示   .

void Dig_Dis_OneBit(unsigned char addr,unsigned char dat)
{
        unsigned int i=400;
        LSA=addr&0x01;
        LSB=addr&0x02;
        LSC=addr&0x04;
        P0=~duanma[dat];
        while(i--);//消隐
}


主函数:
#include <reg51.h>
#include <Flexible_Dig.h>

void main(void)
{
        while(1)
        {
                //显示5.546
                Dig_Dis_OneBit(0,5);
                Dig_Dis_OneBit(0,12);
                Dig_Dis_OneBit(1,5);
                Dig_Dis_OneBit(2,4);
                Dig_Dis_OneBit(3,6);
        }
}

以这样写出来的函数,在实现复杂的工程的时候代码结构会清晰很多,而且调用数码管的时候仅仅需要函数即可。这是138译码器位选(数码管位置选择的意思)的实现程序,代码最重要的如何封装,其他方式的位选也是一样的,不懂的可以留言哟!

使用特权

评论回复

相关帖子

沙发
ayb_ice| | 2019-11-20 13:07 | 只看该作者
这种显示放在主循环是不行的,必须放在定时中断里,主循环的实时性难以保证

使用特权

评论回复
板凳
不厉害|  楼主 | 2019-11-20 21:11 | 只看该作者
ayb_ice 发表于 2019-11-20 13:07
这种显示放在主循环是不行的,必须放在定时中断里,主循环的实时性难以保证 ...

不管以何种方式显示,任务量一多,数码管都是需要放中断里面的。不是说我这种方式就不能放在主循环,上面例程我就是放主循环里面实现的,是所有的动态扫描显示在任务量多的情况下需要放在中断里面显示

使用特权

评论回复
地板
ayb_ice| | 2019-11-21 08:33 | 只看该作者
不厉害 发表于 2019-11-20 21:11
不管以何种方式显示,任务量一多,数码管都是需要放中断里面的。不是说我这种方式就不能放在主循环,上面 ...

这与任务量没有必然关系,
我在主循环偶尔调用个延时200MS会怎样,任务量并不多,也只是偶尔调用而已,但结果显然是不能接受的

使用特权

评论回复
5
不厉害|  楼主 | 2019-11-21 10:13 | 只看该作者
ayb_ice 发表于 2019-11-21 08:33
这与任务量没有必然关系,
我在主循环偶尔调用个延时200MS会怎样,任务量并不多,也只是偶尔调用而已,但 ...

我没表达清楚,我的意思就是任务的所占用时间长的情况下,都是需要中断的,200MS的任务时间已经很长了

使用特权

评论回复
6
路驹| | 2019-11-21 15:19 | 只看该作者
看看

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

39

帖子

1

粉丝