51单片机-多个数码管显示

发布者:姑苏清风泉源客最新更新时间:2021-08-18 来源: eefocus关键字:数码管显示  51单片机  流水灯 手机看文章 扫描二维码
随时随地手机看文章

1.余晖效应


流水灯如果在流速太快的基础上再加速,那么我们看到的则是一排灯都在亮着,这就叫人眼的余晖效应。同理,我们想让多个数码管同时亮,那么就要让三八译码器的IO0~IO5每个输出引脚轮流快速切换出低电平,需要显示什么数字再由P0的8个IO端口控制。


这里提供了一段代码供大家调试玩玩,用实验现象领悟余晖效应。


#include  

sbit ADDR2 = P1^2;

sbit ADDR1 = P1^1;

sbit ADDR0 = P1^0;

sbit ENLED = P1^4;

sbit ADDR3 = P1^3;

 

void main()

{  

    unsigned char i=1;

    unsigned int x;

    ADDR3 = 1;//使能三八译码器

    ENLED = 0;// 

   

    P0=0xC0;  //让6个数码管都显示0

    while(1)

    {  

        switch(i)

        {

            case 1: ADDR2 = 0;ADDR1 = 0;ADDR0 = 0;break;//让IO0输出低电平

            case 2: ADDR2 = 0;ADDR1 = 0;ADDR0 = 1;break;//让IO1输出低电平

            case 3: ADDR2 = 0;ADDR1 = 1;ADDR0 = 0;break;//让IO2输出低电平

            case 4: ADDR2 = 0;ADDR1 = 1;ADDR0 = 1;break;//让IO3输出低电平

            case 5: ADDR2 = 1;ADDR1 = 0;ADDR0 = 0;break;//让IO4输出低电平

            case 6: ADDR2 = 1;ADDR1 = 0;ADDR0 = 1;i=0;break;//让IO5输出低电平

        }

        i++;

        for(x=0;x<5000;x++);//这里是延时,大家把5000不断地改小到200,中间不断地下载进开发板来领悟余晖效应,

                            //其实我们做的只是让三八译码器的不同IO输出持续时间不同而已,然后就产生了不一样的实验效果

    }              

}


2.题目


如果我们既要6个数码管同时亮,还要使6个数码管都同时间隔一秒地显示0~F的状态不停循环,模拟图像如下


EEEEEE     //持续一秒


FFFFFF     //持续一秒


000000    //持续一秒


……


请思考如何下手?


提示:软件调试仿真出1秒内所要执行的内容。


还有大家别傻乎乎加个“delay_ms(1000);”用来实现间隔1秒的数字自加,这样做我们怎么去实现IO0~IO5的快速切换出低电平呀。


请大家先自己思考尝试动手练练写写,实在没头绪再参考一下这些代码,其实这跟无源蜂鸣器的间隔鸣叫的编程技巧是一样的


#include  

sbit ADDR2 = P1^2;

sbit ADDR1 = P1^1;

sbit ADDR0 = P1^0;

sbit ENLED = P1^4;

sbit ADDR3 = P1^3;

 

unsigned char code LedChar[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//数码管状态值初始化

 

void main()

{  

    unsigned int i,x;

    unsigned char sec;//定义一个一秒之后自增1的变量

    ADDR3 = 1;//使能三八译码器

    ENLED = 0;// 

   

    P0=0xC0;  //先让所有数码管显示0

    while(1)

    {    

        for(x=0;x<28492;x++)//软件调试得出这个循环耗时1秒

        { 

            switch(i)

            {

                case 0: ADDR2 = 0;ADDR1 = 0;ADDR0 = 0;i++;break;//让IO0输出低电平

                case 1: ADDR2 = 0;ADDR1 = 0;ADDR0 = 1;i++;break;//让IO1输出低电平

                case 2: ADDR2 = 0;ADDR1 = 1;ADDR0 = 0;i++;break;//让IO2输出低电平

                case 3: ADDR2 = 0;ADDR1 = 1;ADDR0 = 1;i++;break;//让IO3输出低电平

                case 4: ADDR2 = 1;ADDR1 = 0;ADDR0 = 0;i++;break;//让IO4输出低电平

                case 5: ADDR2 = 1;ADDR1 = 0;ADDR0 = 1;i=0;break;//让IO5输出低电平

            }   

        } 

        sec++;//一秒之后变量自加1

        if(sec>=16)sec=0;

        P0=LedChar[sec];//取数组元素中标号为0~15的元素  

    }

}


我们把i放到了前面的case语句中自加,这样阅读起来更加快速明白switch语句是每条都要按顺序轮流去执行的意思(参考了宋老师的代码)。还有大家别把i定义成unsigned char型,不然无论怎么修改x的值都调试不出for循环持续1秒。


学到这里需要大家进一步学会自己分析整体代码的系统结构了。


关键字:数码管显示  51单片机  流水灯 引用地址:51单片机-多个数码管显示

上一篇:51单片机-数码管&LED
下一篇:51单片机-同时显示不同的数字

推荐阅读最新更新时间:2024-11-11 20:05

51单片机学习总结
1、什么是单片机 在一片集成电路芯片上集成微处理器、存储器、I/O接口电路,从而构成了单芯片微型计算机,即单片机。 Intel公司推出了MCS-51系列单片机:集成 8位CPU、4K字节ROM、128字节RAM、4个8位并口、1个全双工串行口、2个16位定时/计数器。寻址范围64K,并有控制功能较强的布尔处理器。 2、单片机的作用 用到单片机的项目经验介绍 手持粮库温度寻检设备 毕设答辩打分器 电话台灯 自动感应水龙头 凡是与控制或简单计算有关的电子设备都可以用单片机来实现,再根据具体实际情况选择不同性能的单片机,如:atmel,stc,pic,avr,凌阳,80C51,arm等 工业自动化:数据采集、测控技术。
[单片机]
AVR单片机-流水灯2
  利用单片机可以做出各种花样的流水灯效果,曾经就见有人用一片STC89C52单片机接了32个LED,做成一个心的形状,然后送给了女朋友。呵呵~~   利用c语言的数组功能就可以实现花样流水灯的设计,只要把每种流动方式的代码写进数组,依次从数组取出显示就可以了。想要多少花样都由你说了算! 源代码: /* * LED1.c * * Created: 2011-6-24 15:29:32 * Author: ZYIN */ #include avr/io.h unsigned char led0 ={0x81,0x42,0x24,0x18,0x00,0x18,0x24,0x42,0x81,0x00,0x55,0
[单片机]
AVR单片机-<font color='red'>流水灯</font>2
MCS-51单片机的串行口及串行通信技术
数据通信的基本概念 串行通信有单工通信、半双工通信和全双工通信3种方式。 单工通信:数据只能单方向地从一端向另一端传送。例如,目前的有线电视节目,只能单方向传送。 半双工通信:数据可以双向传送,但任一时刻只能向一个方向传送。也就是说,半双工通信可以分时双向传送数据。例如,目前的某些对讲机,任一时刻只能一方讲,另一方听。 全双工通信:数据可同时向两个方向传送。全双工通信效率最高,适用于计算机之间的通信。 此外,通信双方要正确地进行数据传输,需要解决何时开始传输,何时结束传输,以及数据传输速率等问题,即解决数据同步问题。 实现数据同步,通常有两种方式,一种是异步通信,另一种是同步通信。 异步通信 在异步通信中,数据一帧一帧地传送。每一
[单片机]
MCS-<font color='red'>51单片机</font>的串行口及串行通信技术
51单片机与CPLD的结合可让系统更加高效化
单片机市场可以用巨无霸来形容,其中51 单片机使用者就更多了,针对51 单片机无需更多的介绍,这里必须强调一点,只要你精通了51 单片机,以后在实际工作中选用其它单片机也很容易了,这就是初学者学习51 单片机的价值。选择51 单片机学习入门容易,倒不是说51 系列单片机比别的型号简单,其实在8 位单片机家族中,51 系列单片机算是复杂的,但51 单片机在中国推广最彻底,教程也是最丰富,基本不用看英文资料就能学好,所以特别适合初学者学习用。 下面说说CPLD,从近来跟学生和爱好者交往中发现,初学者都很“讨厌”它,问我为什幺要把单片机和CPLD 放一块儿,那样不是增加了学习的难度吗?其实深入学习单片机后,你就会发现,单独一片单片机
[单片机]
<font color='red'>51单片机</font>与CPLD的结合可让系统更加高效化
51单片机uart通信协议
  51单片机   51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。   同样的一段程序,在各个单片机厂家的硬件上运行的结果都是一样的,如ATMEL的89C51(已经停产)、89S51, PHILIPS,和WINBO
[单片机]
<font color='red'>51单片机</font>uart通信协议
51单片机学习———2--LED闪烁+流水
LED闪烁实现 原理+代码 #include reg52.h sbit L1=P2^0; typedef unsigned char u8; typedef unsigned int u16; void delay(u16 i)//延时函数 { while(i--); } void main() { while(1) { L1=0; delay(30000);//max=65535 L1=1; delay(30000);//闪烁间隔约为270ms } } LED流水实现 原理+代码 #include reg52.h #include intrins.h #define A P2
[单片机]
基于51单片机的智能饮水机设计
一.硬件方案 本次设计为一个基于单片机的饮水机的温度控制系统,该系统可以实时检测饮水机水箱的水温,并且可以通过数码管显示饮水机水箱水温度数,可以通过键盘或开关选择制冷或加热,可以人为设置水的温度的上下限,如加热,当温度在设定的范围内时正常工作,当低于水温下限时控制加热器加热;如制冷,当温度高于水温上限时控制压缩机制冷,温度检测范围0~95℃,精度±1℃,当温度超过设定值时具有示警功能。 主要由用51单片机+防水型温度传感器DS18b20+液晶屏LCD1602+液位开关+时钟芯片+继电器+小风扇+按键;如图: 二.设计功能 (1)系统上电后,LCD1602显示当前的时间、日期和水温。 (2)使用不锈钢液位开关来检测是否有水源
[单片机]
基于<font color='red'>51单片机</font>的智能饮水机设计
51单片机-定时器中断函数的使用
1.定时器与延时的区别 大家可能会觉得我们用延时函数照样可以实现上一讲代码的实验现象,但是定时器与延时的概念不同,延时函数需要占用CPU的使用权,正在延时的时候其他任务没有CPU的使用权就会拖慢执行效率。 而定时器是不需要占用CPU的使用权的,它是独立自己运行的,就像我们在第一讲的时候提到调好5分钟的闹钟,在这5分钟里我们可以随意执行任务,也可以什么事都不做,但是5分钟过后闹钟响了就要执行相关的任务了。 所以上一讲的代码的实现原理就是每隔51微秒,有个变量会自加1,过了1000个51微秒的时候LED的状态才会改变,可以说CPU在51ms的时间里基本没什么事做,只是在51微秒到了的时候做了“cnt++;”这样简单的任务,然
[单片机]
<font color='red'>51单片机</font>-定时器中断函数的使用
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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