单片机数码管显示-消影问题

发布者:幸福如意最新更新时间:2017-01-18 来源: eefocus关键字:单片机  数码管显示  消影问题 手机看文章 扫描二维码
随时随地手机看文章

看郭天祥的单片机书中数码管部分,使用 P0=0xff 的方法可以消除段选数据对位选的干扰,另外使用我下面的方法可以达到同样的效果。但即便这样数码管仍有影子,这种状况是,当前数码管有下一个数码管的影子,或者当前数码管有前一个数码管的影子。


分析一下产生原因,当我们点亮一个数码管后,总要先将段选或者位选改为下一个数码管的值,而不能同时改变。当先改变段选时,那么当前数码管就会有短暂的时间显示下一个数码管的数字。当先改变位选时,下一个数码管就会有短暂的时间显示当前数码管的数字。


那么解决方法是,先将段选置0送入锁存器,改变位选的值为下一个数码管,最后再改变段选值。同理另一种方法是,先将位选赋值 0xff 即关闭所有数码管,改变段选值,最后改变位选值。


另外一种勉强可以的方法是,增加延时时间,这样正常数字显示时间就相对影子数字的短暂时间变长,看起来影子就变得暗了,但延时太长导致数码管闪烁,所以这种方法不建议,郭天祥书中的示例程序使用这种方法。


只贴出前2种方法的代码。


#include

#include


sbit we=P2^7;

sbit du=P2^6;


unsigned char code table[] = {

0x3f , 0x06 , 0x5b , 0x4f,

0x66 , 0x6d , 0x7d , 0x07,

0x7f , 0x6f , 0x77 , 0x7c,

0x39 , 0x5e , 0x79 , 0x71,

0x00};


void show();

void delayms(unsigned time);


unsigned char num[6]={0,0,14,13,0,12};

unsigned char count=0;

unsigned char nums=0;

unsigned char numm=0;


void main()

{

    EA=1;

    ET0=1;

    TMOD=0x01;

    TH0=(65536-45872)/256;

    TL0=(65536-45872)%256;

    TR0=1;

    show();

}


void t0_time() interrupt 1

{

    TH0=(65536-45872)/256;

    TL0=(65536-45872)%256;

    count++;


    if(count%20==0)

    {

        count=0;

        nums++;

        if(nums==60)

        {

            nums=0;

            numm++;

            num[2]=numm%10;

            num[3]=numm/10;

        }

        num[0]=nums%10;

        num[1]=nums/10;

    }

}


void show()

{

    unsigned char i;

    

    while(1)

        for(i=0;i<6;i++)

        {

            P0=0;

            du=1;

            du=0;


            P0=~(0x20>>i);

            we=1;

            we=0;


            P0=table[num[i]];

            du=1;

            du=0;


            delayms(1);

        }

}


void delayms(unsigned time)

{

    unsigned i,j;


    for(i=time;i>0;i--)

        for(j=110;j>0;j--)

        ;

}

第二种



void show()

{

    unsigned char i;

    

    while(1)

        for(i=0;i<6;i++)

        {

            P0=0xff;

            we=1;

            we=0;      


            P0=table[num[i]];

            du=1;

            du=0;


            P0=~(0x20>>i);

            we=1;

            we=0;


            delayms(1);

        }

}


关键字:单片机  数码管显示  消影问题 引用地址:单片机数码管显示-消影问题

上一篇:单片机快速开平方的算法
下一篇:单片机键盘-示例程序代码

推荐阅读最新更新时间:2024-03-16 15:31

如何使用51单片机和荧光数码管实现电子数字钟的程序
2051单片机和荧光数码管电子数字钟设计读红外代码子程序******************************* org 0290h tt1:push dph ;保护现场 push dpl push acc push psw jb 07h,ttt0 ;全部动作未完成则返回 jb 00h,ttt1 ;如果收到遥控引导码则进入接收识别模式 mov th1,#00h ;清T1,为接收做准备 mov tl1,#00h setb 00h ;设接收遥控波头准备好标志位 setb tr1 ;开T1中断 sjmp ttt0 ttt1:setb psw.4 ;进入区2 clr psw.3 mov a,th1 ;将收到的第一个遥控波头存到30h
[单片机]
MCS-51单片机地址指针详细剖析
MCS-51单片机外部RAM的地址空间为64K,地址总线为16位,访问外接RAM可执行如下4条指令: MOVX A,@DPTR MOVX @DPTR,A MOVX A,@RI MOVX @RI,A 其中DPTR为16位地址寄存器,地址高8位存于DPH,地址低8位存于DPL;Ri(I=0,1)是8位寄存器,作为地址指针时仅存低8位地址。 MCS-51执行上述指令时分为两个阶段:首先,是从外接程序存储器中取出指令代码,并进行分析。然后,执行对外接RAM的数据读/写操作。在这两个阶段,P0口、P1口上的地址选通是有区别的。 执行“MOVX A,@DPTR”和“MOVX @DPTR,A”指令时,在读指令代码阶段,由程序计数器(PC)提供A
[单片机]
基于AT89C51单片机的无线病房呼叫系统设计
病房呼叫系统作为一种基本医疗陪护设备已逐步得到普及并不断得到改进。传统的病房呼叫系统采用PC 机联网监控和有线控制, 虽然具备很强的专业服务功能和监护能力, 但是其实现方法复杂, 前期投资和后期维护的费用都很高。 本文采用单片机实现无线数据传输通信和实时报警功能, 设计一套低成本通用型的病房呼叫系统。整个系统采用无线通信的方式, 降低了复杂的布线、安装检修和拆卸的难度, 并可监控多个病房且便于扩充升级。 1 系统方案设计 本设计采用从机和主机相分离的模式。从机安装于各个病房, 主机安装于医务室或值班室。多个从机处于等待外部呼叫信号的状态, 主机则时刻处于等待接收从机呼叫信息的状态, 并且从机与主机之间采用无线数据 传输通信
[单片机]
基于AT89C51<font color='red'>单片机</font>的无线病房呼叫系统设计
如何使用8051微控制器和蓝牙模块构建一个Android手机控制的机器人
在这个项目中,我们将使用8051微控制器和蓝牙模块构建一个Android手机控制的机器人。该机器人是使用直流电机设计的,直流电机的方向将由从安卓应用程序收到的命令控制。机器人的状态被发送回安卓应用程序。该项目还将帮助HC-05蓝牙模块与8051微控制器的接口. 所需组件: 8051 微控制器 (AT89S52) HC-05 蓝牙模块 L293D 电机驱动器 机器人底盘 直流电机 (2) 轮子 (2) 脚轮 跳线 蓝牙终端安卓应用 电路图: 8051 微控制器: 8051微控制器是一种8位微控制器,具有128字节的片上RAM,4K字节的片上ROM,两个定时器,一个串行端口和四个8位端口。8052微控制器是8051微控制
[单片机]
如何使用8051<font color='red'>微控制器</font>和蓝牙模块构建一个Android手机控制的机器人
11-基于51单片机的十字路口交通灯
具体实现功能 系统由STC89C52单片机+数码管模块+LED指示灯模块+按键模块+电源构成。 具体功能: 1、红灯和绿灯相互转换经过黄灯,并且黄灯闪烁三次; 2、主干道方向通行30秒,辅干道通行20秒,单独左转信号15秒,先直行信号,后左转信号; 3、设置自动、手动、特殊情况三种方式。自动模式下自动显示各种状态的倒计时,红绿灯自动切换;手动模式下可以根据道路车流量情况手动调节红灯绿灯相应时间;紧急情况下所有路口红灯亮,黄灯闪烁,以便120、110等及时通行。 设计背景 交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。交通信号灯的出现,使交通得以有效管制,对于疏导交通流
[单片机]
11-基于51<font color='red'>单片机</font>的十字路口交通灯
PIC单片机开发的经验、技巧总结分享
由美国Microchip公司生产的PIC系列单片机,由于其超小型、低功耗、低成本、多品种等特点,已广泛应用于工业控制、仪器、仪表、通信、家电、玩具等领域,本文总结了作者在PIC单片机开发过程中的一些经验、技巧,供同行参考。 1 怎样进一步降低功耗 功耗,在电池供电的仪器仪表中是一个重要的考虑因素。PIC16C××系列单片机本身的功耗较低(在5V,4MHz振荡频率时工作电流小于2mA)。为进一步降低功耗,在保证满足工作要求的前提下,可采用降低工作频率的方法,工作频率的下降可大大降低功耗(如PIC16C××在3V,32kHz下工作,其电流可减小到15μA),但较低的工作频率可能导致部分子程序(如数学计算)需占用较多的时间。在这种情
[单片机]
PIC<font color='red'>单片机</font>开发的经验、技巧总结分享
单片机扫盲之MCS51和8051/8031等的关系
平常老是讲8051,又有什么8031,现在又有89C51,89s51它们之间究竟是什么关系? MCS51是指由美国INTEL公司(对了,就是大名鼎鼎的INTEL)生产的一系列 单片机 的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它 单片机 都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51系列单片机,而8031是前些年在我国最流行的单片机,所以很多场合会看到 8031 的名称。INTEL公司将MCS51的核心技术授权给了很多其它公司,所以有很多公司在做以8051为核心的单片机,当然,功能或
[电源管理]
基于SRAM的微控制器优化了安全性
结果表明,非易失性(NV)SRAM是用于存储安全数据的最安全的存储器。通过使用 DES 或三重 DES 加密内存,可以建立加密边界,使安全信息不被黑客渗透。通过使用防篡改反应传感器,可以进一步保护SRAM的易失性,这些传感器将擦除加密密钥作为响应。密码键盘等金融应用依靠自动程序和数据存储器加密功能来保护数据。DS5250是一款高性能、安全的8051微控制器,利用安全SRAM的独特特性来保护敏感数据。 无论是在自动取款机、护照/身份验证设备还是便利店的销售点终端中,都必须保护密码、个人识别码 (PIN)、加密密钥和专有加密算法等关键信息免受黑客攻击。金融服务采用详细的政策和程序来保护硬件和软件。因此,金融交易系统的设计者在开发每
[单片机]
基于SRAM的<font color='red'>微控制器</font>优化了安全性
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved