51单片机-八段数码管显示

合集下载

51单片机应用:8只数码管同时显示多个不同字符

51单片机应用:8只数码管同时显示多个不同字符

51单片机应用:8只数码管同时显示多个不同字符设计要求单片机控制8只数码管,同时显示8个字符。

例如,从左至右显示“”,接着显示“”,在接着显示“”,……“”,“”,分析及方案设计:本题可以采用扩展I/O口或直接用单片机自身的I/O口的方法实现。

为节省硬件设施并使电路连线尽量简单,采用直接使用单片机自身I/O口的方式,8个数码管同时显示数字则需采用动态显示方法,初步设定以P0口给出数码管显示字段,P1口选中某一时刻动态点亮的数码管。

软件设计可以有以下几种方案:a)将全部显示状态列出,放在主程序中不断循环b)将显示状态放入8个数组中,每个状态循环一次后主程序重新开始循环c)只设置两个数组,其中一个取值不变,为正序的从1到8的共阳极数码管段码,另一个数组中的数值不断被修改,即每次显示状态改变的时候都相应改变一次,如从的段码改为的段码。

从上述方案可以看出,若设置太多的数组或列出所有显示状态,程序虽然清晰易懂但占用程序存储空间明显较大,且用delay()函数延时的话会不断占用CPU;用两个数组和两个定时器虽然算法略复杂,但程序可以达到最简化。

详细的方案说明:1)采用数码管动态显示方法。

2)8个数码管由P3控制位选,即决定某一时刻哪一个数码管亮,由P0发出的总线控制显示的段码。

3)定时器T0和T1同时工作,定时时间均为0."5毫秒,采用方式1定时,每次溢出后由软件重装初值。

4)设置中间变量temp,用于不断左移并给P3赋值;数组display[]为code 即取之不变的数组,数组show[]中的取值变化。

5)每次T0计数溢出时,temp左移一次,相应的P3左移一次,数码管由第i 个点亮变为第i+1个点亮,与此同时赋给P0口的值由show[i]变为show[i+1],达到动态显示的效果。

6)定时器T1也是每0."5毫秒计数溢出一次,但只有到1秒时才执行定时器1中断中修改数组show[]取值的程序,用变量t记录T1溢出的次数,达到200次时数组show[]中的内容开始进行修改并且t清零。

八段数码管

八段数码管

八段数码管1. 简介八段数码管是一种常用的数字显示器件,由八个独立的LED(Light Emitting Diode)组成。

它可以显示数字、字母和一些特殊字符。

在数字钟、电子计算器等电子设备中广泛应用。

八段数码管八段数码管2. 数字与编码每个数码管由七个线段和一个小圆点组成,线段可以通过亮灭的状态显示不同的数字和字符。

数码管采用共阳极或共阴极的方式连接,共阳极时,需要给某个线段接通高电平来点亮,共阴极时则需要给线段接通低电平。

每个线段具有一个独特的标识符,如下图所示:a-----f | | b| g |-----e | | c| d |-----dp通过控制不同线段的高低电平状态,可以显示不同的数字和字符。

3. 数字和字符的编码使用七段编码将数字和字符与数码管的线段对应起来。

常见的七段编码方式有两种:•连接式编码:通过连接线段的方式实现数字和字符的显示。

每个数字或字符都需要占用相应线段,因此在一个八段数码管上只能显示一个字符或数字。

•离散式编码:通过对各个线段分别控制实现数字和字符的显示,可以同时在一个八段数码管上显示多个字符或数字。

4. 连接式编码连接式编码的七段编码方式是将每个数字和字符与数码管的对应线段相连,通过点亮相应的线段来显示字符或数字。

七段编码的对应关系如下表所示:数字/字符a b c d e f g dp 0on on on on on on off off 1off on on off off off off off 2on on off on on off on off 3on on on on off off on off 4off on on off off on on off 5on off on on off on on off 6on off on on on on on off 7on on on off off off off off8on on on on on on on off9on on on on off on on off5. 离散式编码离散式编码的七段编码方式是通过对各个线段分别控制来实现数字和字符的显示。

51单片机键盘数码管显示(带程序)

51单片机键盘数码管显示(带程序)

期中大作业学院:物理与电子信息工程学院课题:【利用8255和51单片机实现数码管显示按键数值的程序】要求:【4*4矩阵键盘,按0到15,数码管上分别显示0~9,A~F】芯片资料:8255:8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。

具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。

其各口功能可由软件选择,使用灵活,通用性强。

8255可作为单片机与多种外设连接时的中间接口电路。

8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。

同时必须具有与外设连接的接口A、B、C口。

由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。

8255特性:1.一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口。

2.具有24个可编程设置的I/O口,即3组8位的I/O口,分别为PA口、PB口和PC 口。

它们又可分为两组12位的I/O口:A组包括A口及C口(高4位,PC4~PC7),B组包括B口及C口(低4位,PC0~PC3)。

A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向I/O三种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器的控制字决定.引脚说明RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。

CS:芯片选择信号线,当这个输入引脚为低电平时,即CS=0时,表示芯片被选中,允许8255与CPU进行通讯;CS=1时,8255无法与CPU做数据传输。

RD:读信号线,当这个输入引脚为低电平时,即CS=0且RD=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。

WR:写入信号,当这个输入引脚为低电平时,即CS=0且WR=0时,允许CPU将数据或控制字写入8255。

51单片机数码管显示程序设计

51单片机数码管显示程序设计

练习3主程序参考:
ORG 0000H LJMP START ORG 000BH LJMP T0SERV ;T0中断入口 ORG 0030H START: MOV SP,#50H ;初始化堆栈 LCALL INIT ;初始化 MOV DISBUF,#0 MOV DISBUF+1,#1 MOV DISBUF+2,#2 MOV DISBUF+3,#3 MOV DISBUF+4,#4 MOV DISBUF+5,#0 MOV FLASH,#11000000B MOV R0,#0 LOOP: MOV DISBUF+5,R0 LCALL DELAY INC R0 CJNE R0,#10,LOOP MOV R0,#0 AJMP LOOP
恢复现场
返回
动态显示参考程序1:定义变量
;--------------------------------------------------------;动态显示程序 ;--------------------------------------------------------;全局变量定义 FLAG EQU 20H ;标志位 DISSEG EQU P0 ;显示段驱动 DISBIT EQU P2 ;显示位驱动P2.7-P2.2 DISBUF EQU 21H ;显示缓冲区首地址21H-26H DISBITBUF EQU 27H ;当前显示位计数器0-5 FLASH EQU 28H ;闪烁控制xxxxxx00,将x=1闪烁,=0不闪 ;小数点的处理: ;若显示‘3’,缓冲区放‘3’,若显示‘3.’,缓冲区放‘3+80H’, 最高位为1 S_PULSE EQU FLAG.0 ;秒脉冲 CNT_2D5MS EQU 2FH ;2.5MS计数器 CNT_10MS1 EQU 30H ;10MS计数器 CN_0D5S EQU 31H ;0.5秒计数器 ;----------------------------------------------------------

51单片机8个发光二极管闪烁设计方案

51单片机8个发光二极管闪烁设计方案

51单片机8个发光二极管闪烁设计方案1. 方案目标本方案旨在设计一个基于51单片机的电路和程序,实现8个发光二极管的闪烁效果。

具体目标如下:1.实现8个发光二极管的交替闪烁。

2.控制每个发光二极管的亮灭时间和频率。

3.确保方案具有可行性和高效性。

2. 实施步骤2.1 硬件设计根据目标需求,我们需要以下硬件组件:1.51单片机(如STC89C52):作为主控芯片,负责控制8个发光二极管的亮灭状态。

2.8个发光二极管:用于显示亮灭状态。

3.8个电流限流电阻:用于限制发光二极管的工作电流,防止过流损坏。

4.连接线:用于连接主控芯片、发光二极管和电流限流电阻。

硬件连接步骤如下:1.将主控芯片与发光二极管之间通过连接线连接起来。

2.将每个发光二极管与对应的电流限流电阻连接起来,确保电流在安全范围内。

2.2 软件设计软件设计包括编写主控芯片的程序代码,实现对8个发光二极管的控制。

以下是一个基本的软件设计思路:1.定义8个IO口用于连接发光二极管,并设置为输出模式。

2.定义一个变量ledState表示当前发光二极管的亮灭状态,初始值为0。

3.在主循环中,通过改变ledState的值来控制发光二极管的亮灭状态。

4.使用延时函数或定时器来控制每个发光二极管的亮灭时间和频率。

具体步骤如下:1.初始化IO口:将8个IO口设置为输出模式。

2.定义变量:定义一个整型变量ledState用于记录当前发光二极管的亮灭状态,默认为0。

3.进入主循环:–设置第一个发光二极管为亮,其他7个发光二极管为灭。

–延时一段时间(如200ms)。

–设置第一个发光二极管为灭,第二个发光二极管为亮,其他6个发光二极管为灭。

–延时一段时间(如200ms)。

–重复以上步骤,依次控制每个发光二极管的亮灭状态。

4.返回主循环。

2.3 预期结果通过上述硬件和软件设计,我们可以实现8个发光二极管的交替闪烁效果。

具体预期结果如下:1.8个发光二极管按照顺序交替亮灭。

51单片机矩阵键盘控制数码管显示过程中出现的问题及解决方法

51单片机矩阵键盘控制数码管显示过程中出现的问题及解决方法

51单片机矩阵键盘控制数码管显示过程中出现的问题及解决方法在使用51单片机控制矩阵键盘同时驱动数码管显示的过程中,可能会遇到一些常见的问题。

以下是一些可能的问题及相应的解决方法:按键无法正常响应:* 问题可能原因:接线错误、按键损坏、软件扫描不到按键信号。

* 解决方法:检查按键连接是否正确,确保按键没有损坏。

在软件中进行适当的按键扫描,确保能够正确检测到按键的状态。

数码管显示异常或不亮:* 问题可能原因:数码管接线问题、数码管损坏、数码管驱动程序错误。

* 解决方法:仔细检查数码管的接线是否正确,确保数码管没有损坏。

检查数码管的驱动程序,确保它按照正确的顺序和时序进行驱动。

按键重复响应或漏按现象:* 问题可能原因:按键抖动、软件扫描速度过快。

* 解决方法:在软件中增加适当的按键抖动延时,确保在按键按下或抬起时只响应一次。

调整软件扫描速度,避免扫描间隔过短导致的重复响应。

矩阵键盘的多个按键同时按下导致混乱:* 问题可能原因:矩阵键盘硬件连接错误、软件扫描算法问题。

* 解决方法:检查矩阵键盘的硬件连接,确保矩阵行和列没有短路或断路。

调整软件扫描算法,确保同时按下多个按键时能够正确识别。

数码管显示不正常的数字或乱码:* 问题可能原因:程序错误、数码管接线错误。

* 解决方法:仔细检查程序,确保数码管段选和位选的控制逻辑正确。

检查数码管的接线,确保每个数码管的连接都正确。

在解决问题时,建议逐步排除可能的原因,通过调试工具、逻辑分析仪或输出调试信息的方式来定位问题。

另外,仔细查阅51单片机的数据手册和相关文档,以确保硬件连接和软件设计都符合标准。

51单片机静态数码管显示数字程序

51单片机静态数码管显示数字程序

void Delay10ms(); //延时 10ms
/******************************************************************************
* *函无
*输 出
:无
*******************************************************************************
/
void main(void)
{
unsigned int i,j;
LSA=0;
LSB=0;
LSC=0;
while(1)
{
if(K1==0)
//检测按键 K1 是否按下
{ Delay10ms(); //消除抖动
if(K1==0)
{
j=0;
}
while((i<50)&&(K1==0)) //检测按键是否松开
{
Delay10ms();
i++;
}
i=0;
} if(K2==0)
//检测按键 K2 是否按下
{
Delay10ms();
if(K2==0)
{
j=9;
}
while((i<50)&&(K2==0))
{
Delay10ms();
i++;
}
i=0;
} if(K3==0)
//检测按键 K3 是否按下
{
Delay10ms();
sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4;
sbit K1=P3^1; sbit K2=P3^0; sbit K3=P3^2; sbit K4=P3^3;

51单片机多段数码管显示原理

51单片机多段数码管显示原理

51单片机多段数码管显示原理1.引言多段数码管是一种常见的显示装置,由多个发光二极管(LED)组成。

51单片机是一种常用的微控制器,广泛应用于各种嵌入式系统和电子设备中。

本文将介绍51单片机如何控制多段数码管进行显示。

2.多段数码管基本原理多段数码管由7个LED组成,分别是a、b、c、d、e、f、g。

通过控制这些LED的亮灭和组合,可以显示0至9的数字,以及一些字母和特殊字符。

对于通常的7段数码管,通过组合控制LED的亮灭状态,即可实现各种数字的显示。

比如要显示数字0,需要同时点亮a、b、c、d、e、f这六个LED,而其他数字则只需点亮其中的一部分。

3.控制多段数码管的硬件连接为了控制多段数码管,我们需要先对其进行硬件连接。

每个LED需要连接到51单片机的一个IO口上,通过控制IO口的高低电平来控制LED的亮灭。

当控制端口输出高电平时,LED会发出光亮,反之则不亮。

4.使用共阳极数码管和共阴极数码管数码管分为共阳极数码管和共阴极数码管两种类型。

它们的区别在于LED的极性不同。

共阳极数码管的正极连接到VCC,通过拉低对应的IO口来点亮LED;共阴极数码管的负极连接到GND,通过拉高对应的IO口来点亮LED。

5.控制多段数码管的原理在51单片机中,通过控制IO口的输出值,可以控制多段数码管的亮灭。

当需要显示某个数字时,需要按照相应的真值表,控制对应的IO口输出高低电平。

下面是一个示例:数字亮灭情况真值表0 abcdef 11111101 bc 01100002 abdeg 11011013 abcdg 11110014 bcfg 01100115 acdfg 10110116 acdefg 10111117 abc 11100008 abcdefg 11111119 abcfg 1111011通过查表可以得出一个数字所对应的亮灭情况,然后将对应的IO 口配置为输出模式,并设置相应的输出值(高或低电平)即可实现对多段数码管的控制。

基于51单片机的LED数码管动态显示

基于51单片机的LED数码管动态显示

.基于51单片机的LED数码管动态显示LED数码管动态显示就是一位一位地轮流点亮各位数码管,对于每一位LED数码管来说,每隔一段时间点亮一次,利用人眼的“视觉暂留效应,采用循环扫描的方式,分时轮流选通各数码管的公共端,使数码管轮流导通显示。

当扫描速度达到一定程度时,人眼就分辨不出来了。

尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,认为各数码管是同时发光的。

若数码管的位数不大于8位时,只需两个8位I/O口。

1 硬件设计利用51单片机的P0口输出段码,P2口输出位码,其电路原理图如下所示。

单击菜单命令中文版)窗口(本人使用的是在桌面上双击图标,打开ISIS 7 Professionalv7.4 SP3精选文档..“文件”→“新建设计”,选择DEFAULT模板,保存文件名为“DT.DSN”。

在器件选择按钮中单击“P”按钮,或执行菜单命令“库”→“拾取元件/符号”,添加如下表所示的元件。

51单片机AT89C51 一片晶体CRYSTAL 12MHz 一只瓷片电容CAP 22pF 二只电解电容CAP-ELEC 10uF 一只电阻RES 10K 一只电阻RES 4.7K 四只双列电阻网络Rx8 300R(Ω) 一只四位七段数码管7SEG-MPX4-CA 一只三极管PNP 四只若用Proteus软件进行仿真,则上图中的晶振和复位电路以及U1的31脚,都可以不画,它们都是默认的。

在ISIS原理图编辑窗口中放置元件,再单击工具箱中元件终端图标,在对象选择器中单击POWER和GROUND放置电源和地。

放置好元件后,布好线。

左键双击各元件,设置相应元件参数,完成电路图的设计。

2 软件设计LED数码管动态显示是一位一位地轮流点亮各位数码管的,因此要考虑每一位点亮的保持时间和间隔时间。

保持时间太短,则发光太弱而人眼无法看清;时间太长,则间隔时间也将太长(假设N位,则间隔时间=保持时间X(N-1)),使人眼看到的数字闪烁。

单片机课程设计-8位8段LED数码管动态显示

单片机课程设计-8位8段LED数码管动态显示

华南理工大学广州汽车学院单片机课程设计题目:8位8段LED数码管动态扫描专业:电子信息工程班级:09电信(1)班姓名:付锦辉学号:2745一、内容要求:在8位8段LED数码管显示“,之后灭显示器200ms;然后显示“WELCOM-1”(由于8位8段LED数码管显示不能显示字母W 和M,所以改为显示“HELLO-93”)二、目的和意义1、掌握数码管动态扫描显示原理及实现方法。

2、掌握动态扫描显示电路驱动程序的编写方法。

三、总体方案设计思路LED数码动态显示的基本做法在于分时轮流选通数码管的公共端,使得各数码管轮流导通,再选通相应的数码管后,即显示字段上得到显示字形码。

这种方式数码管的发光效率,而且由于各个数码管的字段线是并联使用的,从而大大简化了硬件线路。

动态扫描显示接口是单片机系统中应用最为广泛的一种显示方式。

其接口电路是把所有显示器的8个笔画段A-DP同名端并联在一起,而每个显示器的公共极COM各自独立地接受I/O线控制,CPU向字段输出口送出字段形码是,所有显示器由于同名端并连接收到相同的字形码,但究竟是哪个显示器亮,则取决于COM端,而这一端是由I/O控制的,所以就可以自行决定何时显示哪一位了。

而所谓动态扫描是指采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。

再轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上个位显示器并非同时点亮,但只要扫描的速度足够快,给人的影响就是一组稳定的显示数据,不会有闪烁感。

采用总线驱动器74HC245提供LED数码管的段驱动,输出高电平时点亮相应段;采用集电极开路的BCD-十进制译码器/驱动器完成LED数码管位驱动,输出低电平时选通相应位。

P2口每个口线输出灌电流不足以驱动一个数码管显示器的位-公共极,所依通过集电极开路的BCD-十进制译码器/驱动器7445驱动,即节约P2口线,又增加驱动能力。

数码管原理及显示_51单片机C编程ppt课件

数码管原理及显示_51单片机C编程ppt课件

.
4 一个共阴数码管循环显示0~9---单片机驱动
景德镇学院机电系
.
4 一个共阴数码管循环显示0~9---单片机驱动
景德镇学院机电系
第一步 用仿真软件Proteus画出上图。
第二步 用程序员书写软件UltraEdit将源程序书写完成。
第三步 用keil软件建立一个工程(用到上一步源程序),产生hex文件。
.
景德镇学院机电系
共阳数码管
3 数码管的显示段码---共阳
unsigned char seg7code[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80, 0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //共阳
.
4 一个共阴数码管显示一个数字编程---手动控制
第四步 将hex文件导入Proteus的单片机中,仿真运行看结果。
详细见具体操作!
.
STC micro
宏晶科技
.
景德镇学院机电系
3 数码管的显示段码----共阴
共阴数码管
unsigned char code seg7code[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};//共阴
.
景德镇学院机电系
1 数码管的结构
外型及引脚.2 数码管的分源自---共阴景德镇学院机电系
❖ 共阴数码管 共阴数码管是指将所有发光二极管的阴极接到一起
形成公共阴极(COM)的数码管。 共阴数码管在应用时应将公共极 COM接到地线
GND 上,当某一字段发光二极管的阳极为高电平时, 相应字段就点亮。当某一字段的阳极为低电平时,相应 字段就不亮。共阴数码管内部连接如图3所示。

利用51单片机+8位数码管+AD0809设计数字直流电压表系统

利用51单片机+8位数码管+AD0809设计数字直流电压表系统

目录1.题目设计要求 (2)2. 系统的组成及工作原理 (2)2.1电路原理图 (2)2.2 A/D转换原理 (3)2.3数据处理原理 (3)2.4器件列表 (3)3. 器件的功能和作用 (4)3.1AT89C51功能介绍 (4)3.1.1AT89C51的简单概述 (4)3.1.2AT89C51的引脚介绍 (4)3.2AD0809功能介绍 (6)3.3 LED数码管功能介绍 (6)4.系统硬件设计 (7)5. 系统软件设计 (8)5.1 程序流程图 (8)5.2程序代码 (10)6.系统仿真调试 (13)6.1仿真原理图设计 (13)6.2 与程序代码链接 (13)6.2.1运用keil uVision4生成.hex文件并链接 (13)6.3 仿真运行结果 (15)7.心得体会 (15)8.参考文献 (16)1.题目设计要求要求:利用51单片机+8位数码管+AD0809设计数字直流电压表系统,精度为0.01V。

完成以下设计环节:1)使用Altium Desinger或Protel99SE开发工具,设计电路原理图与PCB制板图。

2)使用Uvision2开发平台,采用C语言或汇编语言设计软件程序。

3)使用PROTEUS仿真软件,设计仿真原理图并运行软件程序,完成系统仿真。

2.系统的组成及工作原理2.1电路原理图图2.1 电路原理图2.2 A/D转换原理模拟量可以是电压、电流等电信号,也可以是压力、温度、湿度、位移、声音等非电信号。

但在A/D转换前,输入到A/D转换器的输入信号必须经各种传感器把各种物理量转换成电压信号。

A/D转换器的工作原理:采用逐次逼近法,逐次逼近式A/D是比较常见的一种A/D转换电路,转换的时间为微秒级。

逐次逼近法转换过程是:初始化时将逐次逼近寄存器各位清零;转换开始时,先将逐次逼近寄存器最高位置1,送入D/A转换器,经D/A转换后生成的模拟量送入比较器,称为Vo,与送入比较器的待转换的模拟量Vi进行比较,若Vo<Vi,该位1被保留,否则被清除。

用汇编语言实现八段数码管显示

用汇编语言实现八段数码管显示

用汇编语言实现八段数码管显示一、实验要求利用实验仪提供的显示电路,动态显示一行数据.二、实验目的1. 了解数码管动态显示的原理。

2. 了解用总线方式控制数码管显示三、实验线路及连线四、实验说明1.本实验仪提供了6 位8段码LED 显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。

显示共有6位,用动态方式显示。

8位段码、6位位码是由两片74LS374输出。

位码经MC1413或ULN2003倒相驱动后,选择相应显示位。

本实验仪中 8位段码输出地址为0X004H ,位码输出地址为 0X002H 。

此处X 是由KEY/LED CS 决定,参见地址译码。

做键盘和LED 实验时,需将KEY/LED CS 接到相应的地址译码上。

以便用相应的地址来访问。

例如,将KEY/LED CS 接到CS0上,则段码地址为08004H ,位码地址为08002H 。

位选通信号 (0x002H)段码输出 (0x004H)数据总线七段数码管的字型代码表如下表:五、程序框图程序代码OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口LEDBuf equ 60h ; 显示缓冲Num equ 70h ; 显示的数据DelayT equ 75h ;ljmp StartLEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hDelay: ;mov r7, #0DelayLoop:djnz r7, DelayLoopdjnz r6, DelayLoopretDisplayLED:mov r0, #LEDBufmov r1, #6 ;mov r2, #00100000b ;Loop:mov dptr, #OUTBITmov a, #0movx @dptr, a ;mov a, @r0mov dptr, #OUTSEGmovx @dptr,amov dptr, #OUTBITmov a, r2movx @dptr, a ;mov r6, #01call Delaymov a, r2 ;rr amov r2, ainc r0djnz r1, Loopmov dptr, #OUTBITmov a, #0movx @dptr, a ;retStart:mov sp, #40hmov Num, #0MLoop:inc Nummov a, Nummov b, amov r0, #LEDBufFillBuf:mov a, banl a, #0fhmov dptr, #LEDMapmovc a, @a+dptr ;mov @r0,a ;inc r0inc bcjne r0, #LEDBuf+6, FillBufmov DelayT,#0DispAgain:call DisplayLED ;djnz DelayT,DispAgain ljmp MLoopend。

8只数码管滚动显示单个数字设计报告

8只数码管滚动显示单个数字设计报告

机电工程学院课程设计报告书题目: 8只数码管滚动显示单个数字专业:电气自动化技术班级: DQ 09302学号:学生姓名:杨超指导教师:朱晓玲2010 年12月30日摘要功能简介:1内容:利用动态扫描让八位数码管稳定的显示1、2、3、4、5、6、7、82目标:(1)掌握单片机控制八位数码管的动态扫描技术,包括程序设计和电路设计,本任务的效果是让八位数码管稳定的显示12345678。

(2)用PROTEUS进行电路设计和实时仿真3知识点链接(1)数码管动态扫描(动态扫描的定义以及与静态显示的区别)动态显示的特点是将所有位数码管的段选线s一位数码管有效。

选亮数码管采用动态扫描显示。

所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。

(2)总线的应用元器件与总线的连线P0口的接线采用总线方式,详细如图------所示。

①选择总线按钮②绘制总线:与普通电线的绘制方法一样,选择合适的起点、终点单击。

如果终点在空白处,左键双击结束连线。

画总线的时候为了和一般的导线区分,我们一般喜欢画斜线来表示分支线。

此时我们需要自己决定走线路径,只需在想要拐点处单击鼠标左键即可。

在画斜线时,需要关闭线路自动路径功能才好绘制。

Proteus的线路自动路径功能简称WAR,当选中两个连接点后,WAR将选择一个合适的路径连线。

WAR可通过使用标准工具栏里的“WAR”命令按钮来关闭或打开,也可以在菜单栏的“Tools”下找到这个图标。

③给与总线连接的导线贴标签PART LABELS与P0口相连的线标签名依次为P00—P06,本电路中的P0口的上拉电阻通过总线与P0口相连,数码管也是通过总线与P0口相连,这些都需要标注,以表明正确的电气连接。

单击绘图工具栏中的导线标签按钮,使之处于选中状态。

将鼠标置于图形编辑窗口的欲标标签的导线上,跟着鼠标的指针就会出现一个“×”号,表明找到了可以标注的导线,单击鼠标左键,弹出编辑导线标签窗口,如图---所示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一八段数码管显示
1、实验目的:
(1)了解数码管动态显示的原理。

(2)了解74LS164扩展端口的方法。

2、实验要求:
利用实验仪提供的显示电路,动态显示一行数据.
3、实验电路图
LED1LED2LED3LED4LED5LED6
4、实验器材:
(1)超想-3000TB综合实验仪 1 台
(2)超想3000仿真器 1 台
(3)计算机 1 台
5、实验连线
无 6、实验说明:
(1)本实验仪提供了8段码LED 显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。

显示共有6位,用动态方式显示。

8段数码管是由8155的PB0、PB1经74LS164“串转并”后输出得到。

6位位码由8155的PA0口输出,经Ua2003反向驱动后,选择相应显示位。

74LS164是串行输入并行输出转换电路,串行输入的数据位由8155的PB0控制,时钟位由8155的PB1控制输出。

写程序时,只要向数据位地址输出数据,然后向时钟位地址输出一高一低两个电平就可以将数据位移到74LS164中,并且实现移位。

向显示位选通地址输出高电平就可以点亮相应的显示位。

本实验仪中数据位输出地址为0e102H ,时钟位输出地址为0e102H ,位选通输出地址为 0e101H 。

本实验涉及到了8155 I0/RAM 扩展芯片的工作原理以及74LS164器件的工作原理。

(2)七段数码管的字型代码表
显示字形
g f e d c b a 段码 0 0 1 1 1 1 1 1 3fh 1 0 0 0 0 1 1 0 06h 2 1 0 1 1 0 1 1
6bh 3 1 0 0 1 1 1 1 4fh 4 1 1 0 0 1 1 0 66h 5 1 1 0 1 1 0 1 6dh 6 1 1 1 1 1 0 1 7dh 7 0 0 0 0 1 1 1 07h 8 1 1 1 1 1 1 1 7fh 9 1 1 0 1 1 1 1 6fh A 1 1 1 0 1 1 1 77h B 1 1 1 1 1 0 0 7ch C 0 1 1 1 0 0 1 39h D 1 0 1 1 1 1 0
5eh
E 1 1 1 1 0 0 1 79h F
1
1
1
1 71h
a
b c d
e
f g dp
7、程序框图
8、实验步骤
1.将KEIL仿真器上40芯排线一端和实验箱上51CPU板上的40芯排针连接起来,将仿
真器连接的USB或串口线与PC机对应的USB或串口连接起来,打开实验箱电源。

2.进入KEIL软件界面,点击项目/打开项目在C:\KEIL\UV2\3000TC51配套实验例程中
选实验一,内有ASM和C51两种程序,进入ASM文件夹打开LED项目文件
3.点击“调试/启动/停止调试”,进入调试界面,点击“调试/运行”可看到8段数码管交
替显示0--F
9、实验程序
;实验一八段数码管显示
OUTBIT equ 0e101h ; 位控制口
CLK164 equ 0e102h ; 段控制口(接164时钟位)
DAT164 equ 0e102h ; 段控制口(接164数据位)
IN equ 0e103h ; 键盘读入口
LEDBuf equ 60h ; 显示缓冲
Num equ 70h ; 显示的数据
DelayT equ 75h ;
org 0000h
ljmp Start
LEDMAP: ; 八段管显示码
db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h
db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h
Delay: ; 延时子程序
mov r7, #0
DelayLoop:
djnz r7, DelayLoop
djnz r6, DelayLoop
ret
DisplayLED:
mov r0, #LEDBuf
mov r1, #6 ; 共6个八段管
mov r2, #00100000b ; 从左边开始显示
Loop:
mov dptr, #OUTBIT
mov a, #00h
movx @dptr, a ; 关所有八段管
mov a, @r0
mov B, #8
; 送164,送完一个显示一个,动态显示
DLP: rlc a ; 依次取出最右边的每一位
mov r3, a ;
mov acc.0, c
ANL A, #0FDH ;将PB1置0
mov dptr, #DAT164 ;将取出的每一位数据送入164,;用一个脉冲实现(PB1)
movx @dptr, a
mov dptr, #CLK164
orl a,#02h ;将PB1置1
movx @dptr, a
anl a,#0fDh ;将PB1置0
movx @dptr, a
mov a, r3
djnz B, DLP ;判断8段是否都送完
mov dptr, #OUTBIT
mov a, r2
movx @dptr, a ; 显示一位八段管
mov r6, #1
call Delay
mov a, r2 ; 显示下一位
rr a
mov r2, a
inc r0
djnz r1, Loop
mov dptr, #OUTBIT
mov a, #0
movx @dptr, a ; 关所有八段管
ret
Start: mov dptr,#0e100h
mov a,#03h ;给8155初始化,PA PB输出 movx @dptr,a
mov sp, #40h
mov Num, #0
MLoop:
inc Num
mov a, Num
mov b, a
mov r0, #LEDBuf
FillBuf:
mov a, b
anl a, #0fh
mov dptr, #LEDMap
movc a, @a+dptr ; 数字转换成显示码
mov @r0,a ; 显示在码填入显示缓冲
inc r0
inc b
cjne r0, #LEDBuf+6, FillBuf
mov DelayT,#30
DispAgain:
call DisplayLED ; 显示
djnz DelayT,DispAgain
ljmp MLoop
END
10、问题思考
1、试着改变一下数字的变化速度。

2、改变一下数字跳动的幅度,如1 ,3,5,7,9,11
3、改变一下LED显示的方向,让数字从左到右跳动。

相关文档
最新文档