单片机实验六 动态数码管实验

实验六 动态数码管实验

一、实验目的

1.熟悉实验软件和硬件,进行正确的接线;
2.编程使得数码管排依次显示01234567

二、实验软硬件

1.Keil uVision4
2.PZISP自动下载软件
3.HC6800S开发板

三、实验原理

在这里插入图片描述

动态数码管实验整体图
通过P22、P23、P24控制3-8译码器来对数码管进行位选,通过P0口经过573的驱动控制数码管的段选,通过P13控制573的使能端,为低电平时573才会有输出。
在这里插入图片描述

动态数码管硬件图
当一个选通端(E1)为高电平,另二个选通端((/E2))和(/E3))为低电平时,可将地址端(A0、A1、A2)的二进制编码在Y0至Y7对应的输出端以低电平译出。输出为Y0至Y7的非,比如:A2A1A0=110时,则Y6输出端输出低电平信号。
在这里插入图片描述

138译码器硬件

四、软件流程图

在这里插入图片描述

动态数码管实验程序流程图

五、实验代码

1.#include<reg51.h>  
2.  
3.#define GPIO_DIG P1  
4.  
5.sbit LSA=P2^2;  
6.sbit LSB=P2^3;  
7.sbit LSC=P2^4;  
8.  
9.unsigned char DisplayData[17]={  
10.0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,  
11.0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};  
12.  
13.void DigDisplay()  
14.{  
15.    unsigned char i;  
16.    unsigned int j;  
17.    for(i=0;i<8;i++)  
18.    {  
19.        switch(i)      
20.        {  
21.            case(0):LSA=0;LSB=0;LSC=0; break;//显示第0位  
22.            case(1):LSA=1;LSB=0;LSC=0; break;//显示第1位  
23.            case(2):LSA=0;LSB=1;LSC=0; break;//显示第2位  
24.            case(3):LSA=1;LSB=1;LSC=0; break;//显示第3位  
25.            case(4):LSA=0;LSB=0;LSC=1; break;//显示第4位  
26.            case(5):LSA=1;LSB=0;LSC=1; break;//显示第5位  
27.            case(6):LSA=0;LSB=1;LSC=1; break;//显示第6位  
28.            case(7):LSA=1;LSB=1;LSC=1; break;//显示第7位      
29.        }  
30.        GPIO_DIG=DisplayData[i];//发送段码  
31.        j=1000;          //控制显示位的保留的时间                        
32.        while(j--);   
33.        GPIO_DIG=0x00;  
34.    }  
35.}  
36.void main(void)  
37.{  
38.    while(1)  
39.    {  
40.        DigDisplay();  
41.    }                 
42.}

六、实验步骤

1.连接实验相关模块连线
在这里插入图片描述

硬件线路图
2.编写动态数码管程序
用三根LSA、LSB和LSC 输出到38译码器中,比如输入000,选中第一个数码管。然后把数据通过P1送出给数码管,然后改数码管显示相应的数字。其后,开始循环选中第二个数码管,送数字,然后第三个…依次循环,每次显示之间间隔一段时间,间隔时间合适便可达到数码管排依次显示01234567的效果。
3.下载动态数码管程序

程序下载界面
4.观察实验现象
实验现象就是随着延时的增加,第一个数码管显示0,然后第一个数码管灭,第二个显示1,之后第二个数码管灭,第三数码管显示2… 间隔时间过小的话的,呈现的效果是8个数码管同时显示01234567。

七、实验思考

有人说,静态数码管是动态的,动态数码管是静态的。其实这里面的静态动态并不是那样理解的,静态数码管直接是使能的,之后可以往里面写入数值对应的段码,这时就可以显示出相应的数值。动态数码管是一排,通常应该有八个,要用一个38译码器连接它们的使能端。它们的连接相同的数据总线,通过选择,相应的数码管将数字读入显示。它其实是在不停的动作的,只是扫描的比较快,人眼看到的是“静态”的。
这样就可以用3根控制线和8根数据线完成8个数码管的显示。如果这8个数码管用静态的方式显示就需要8*8根线,但51单片机很难可以有这么多IO口资源。即使对于其它种类的单片机来说,64个IO口也是一个不小的开销。
本实验要求并38译码器转换不同状态是时间延长多一点,就出现了第一个数码管显示0,然后灭。第二个数码管显示1,然后灭…这样的效果。

  • 9
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
C51单片机数码管动态显示单片机基础教学中比较经典的一个实验,该实验可以通过单片机控制数码管显示,实现数字动态滚动、计时、计数等功能。下面是该实验的总结。 一、实验原理 数码管动态显示是通过单片机的高速刷新来实现的。数码管显示是静态的,即只有一次性地将数码管显示数据送入数码管的存储器中,而动态显示则是通过不断地刷新数码管显示数据,使其看上去是在不停地变化。单片机控制数码管显示需要通过端口输出控制信号,将位选和段选信号送入数码管中,从而实现数码管动态显示。 二、实验器材 1. C51单片机开发板 2. 74HC595移位寄存器 3. 数码管 4. 面包板、杜邦线等 三、实验步骤 1. 将数码管的阳极连接到单片机P2口,将数码管阴极连接到74HC595移位寄存器的输出端Q0~Q7。 2. 将74HC595移位寄存器的SCK、RCK、SDA分别连接到单片机的P3.5、P3.6、P3.7口。 3. 在程序中设置数码管显示数据,将其存入74HC595移位寄存器中。 4. 设置位选信号,将控制信号送入数码管中,实现数码管动态显示。 四、实验代码 以下是C语言编写的数码管动态显示实验代码: ``` #include <reg52.h> #define uchar unsigned char #define uint unsigned int uchar code table[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; //数码管显示表 void delay(uint x) { uint i, j; for (i = x; i > 0; i--) for (j = 110; j > 0; j--); } void main() { uchar i = 0; while (1) { P3 = 0xFF; //清零P3口 P1 = table[i++]; //设置数码管显示数据 if (i == 10) i = 0; //循环显示0~9 P3 = ~(1 << i); //设置位选信号,显示第i个数码管 delay(1); //延时一段时间 } } ``` 五、实验结果 实验成功后,数码管应该可以进行动态滚动、计时、计数等功能的实现。通过对程序进行修改,还可以实现更多有趣的功能,如闪烁、渐变等。 实验结论 通过本次实验,我们掌握了单片机控制数码管动态显示原理和方法,了解了74HC595移位寄存器的使用方法。在实验中,我们不仅学会了如何通过单片机控制数码管显示,还锻炼了编程能力和动手能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

石去皿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值