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 口配置为输出模式,并设置相应的输出值(高或低电平)即可实现对多段数码管的控制。

  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显示的方向,让数字从左到右跳动。

相关文档
最新文档