基于8255驱动的数码管显示和键盘电路设计与编程

基于8255驱动的数码管显示和键盘电路设计与编程
基于8255驱动的数码管显示和键盘电路设计与编程

基础课程设计(论文)

基于8255驱动的数码管显示和键盘电路设计与编程专业:电气工程及其自动化

指导教师:

小组成员:

信息技术学院电气工程系

2014年10月28

摘要

本文主要是基于8255微处理器芯片,设计中包括数码管显示和矩阵键盘输入部分,可以完成一些简单4位以内的十进制计算。全文较为详细的介绍了芯片工作原理,硬件和软件的设计以及各部分的驱动程序和流程图。

关键词:矩阵按键,数码显示,运算

目录

摘要................................................... I 绪论 (1)

1 课程设计任务要求及规定 (2)

1.1 课程设计要求 (2)

1.2课程设计规定 (2)

2 整体设计思想 (2)

3硬件设计 (3)

3.1 原器件件清单 (3)

3.2 微处理器8086芯片 (3)

3.3 可编程并行接口芯片8255A (4)

3.4 LED数码管 (6)

3.5 4×4矩阵按键 (6)

3.6 硬件原理图 (7)

4 软件设计 (8)

4.1 程序流程图 (8)

4.2 总程序设计 (10)

4.3 按键扫描程序设计 (10)

4.4 矩阵键盘程序设计 (12)

4.5 运算程序设计 (17)

4.6 显示程序设计 (18)

4.7 延时子程序 (20)

参考文献 (21)

绪论

课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节。它具有动手、动脑和理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一个重要教学环节。

通过课程设计,要求学生熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,使学生得到微机开发应用方面的初步训练。让学生独立或集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。通过本次课程设计使学生熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。

通过课程设计实践,不仅要培养学生事实求是和严肃认真的工作态度,培养学生的实际动手能力,检验学生对本门课学习的情况,更要培养学生在实际的工程设计中查阅资料,撰写设计报告表达设计思想和结果的能力。

1 课程设计任务要求及规定

1.1 课程设计要求

1.四位数码管动态显示左向移位的数据,例如显示1235

2.完成4位数的十进制加法运算,结果显示

3.完成3位数的十进制加法运算,结果显示在4位LED上

4.完成一个4位十进制数除2位十进制数的除法运算,并将结果以十

进制形式显示

5.完成2位十进制数的乘法运算,结果显示4位

1.2课程设计规定

设计硬件线路,用protel画图。按单元电路详细说明硬件线路设计思路,元件参数,选取根据。附详细的元件清单。软件设计。只设计键盘扫描和LED 显示部分程序。

有完整的程序流程图,完整的程序清单,并加注释。总结设计过程和设计体包括总流程图和模块流程图。对程序设计思想做详细说明。

2 整体设计思想

首先利用程序不断扫描键盘是不是有输入,如果没有就一直扫描,如果有就调用子程序进行判断,是数值则进行存储并同时进行显示,是运算符号等就调用相应的子程序进行操作,操作后则继续利用程序不断扫描键盘是不是有输入,从而实现4位十进制数以内的加减乘除法运算。运算完成后将运算的结果储存并显示到LED显示器上。如下图:

图 1整体思路流程图

3硬件设计

3.1 原器件件清单

表一元器件清单

3.2 微处理器8086芯片

当引脚接高电平时,CPU工作于最小模式。此时,引脚信号24~31的含义及其功能如下:

(1)IO/M/(memory I/O select):存储器、I/O端口选择控制信号。信号

指明当前CPU是选择访问存储器还是访问I/O端口。为高电平时访问存储器,表示当前要进行CPU与存储器之间的数据传送。为低电平时,访问I/O端口,表示当前要进行CPU与I/O端口之间的数据传送。

(2)WR/(write):写信号,输出,低电平有效。信号有效时,表明CPU 正在执行写总线周期,同时由信号决定是对存储器还是对I/O端口执行写操作。

(3)INTA/(interrupt acknowledge):可屏蔽中断响应信号,输出,低电平有效。 CPU通过信号对外设提出的可屏蔽中断请求做出响应。为低电平时,表示CPU已经响应外设的中断请求,即将执行终端服务程序。

(4)ALE(address lock enable):地址锁存允许信号,输出,高电平有效。CPU利用ALE信号可以把AD15 ~AD0地址/数据、A19/S6~A16/S3地址/状态线上的地址信息锁存在地址锁存器中。

(5)DT/(data transmit or receive):数据发送/接收信号,输出,三态。DT/信号用来控制数据传送的方向。DT/为高电平时,CPU发送数据到存储器或I/O 端口;DT/为低电平时,CPU接收来自存储器或I/O端口的数据。

(6)DEN/(data enable):数据允许控制信号,输出,三态,低电平有效。信号用作总线收发器的选通控制信号。当为低电平时,表明CPU进行数据的读/写操作。

(7)HOLD(bus hold request):总线保持请求信号,输入,高电平有效。在DMA数据传送方式中,由总线控制器8237A发出一个高电平有效的总线请求信号,通过HOLD引脚输入到CPU,请求CPU让出总线控制权。

(8)HLDA(hold acknowledge):总线保持响应信号,输出,高电平有效。HLDA是与HOLD配合使用的联络信号。在HLDA有效期间,HLDA引脚输出一个高电平有效的响应信号,同时总线将处于浮空状态,CPU让出对总线的控制权,将其交付给申请使用总线的8237A控制器使用,总线使用完后,会使HOLD信号变为低电平,CPU又重新获得对总线的控制权。

3.3 可编程并行接口芯片8255A

微机系统的信息交换有两种方式:并行通信接口方式和串行通信接口方式。接口电路在CPU和I/O设备之间起着信号的变换和传输的作用。8255A可

为86系列CPU与外部设备之间提供并行输入/输出的通道。由于它是可编程的,

可以通过软件来设置芯片的工作方式,因此,用8255A连接外部设备时,通常

不用再附加外部电路,使用教方便。并行接口是在多根数据线上,以数据字节

/字与I/O设备交换信息。

图 2 8255A引脚图

在输入过程中,输入设备把数据送给接口,并且使状态线“输入准备好”有效。接口把数据存放在“输入缓冲寄存器”中,同时使“输入回答”线有效,作为对外设的响应。外设在收到这个回答信号后,就撤消数据和“输入准备好”信号。数据到达接口中后,接口会在“状态寄存器”中设置输入准备好标志,或者向CPU发一个中断请求。CPU可用查询方式或中断方式从接口中读取数据。接口中的数据被读取后,接口会自动清除状态寄存器中的标志,且撤消对CPU 的中断请求。

在输出过程中,每当输出寄存器可以接收数据,接口就会将状态寄存器中“输出准备好”状态置1或向CPU发一个中断请求,CPU可用查询或中断方式向接口输出数据。当CPU输出的数据到达接口后,接口会清除“输出准备好”状态,把数据送往外设,并向外设发一个“数据输出准备好”信号。外设受到驱动后,便接收数据,并向接口电路发一个“输出回答”信号,接口收到该回答信号后,又将状态寄存器中“输出准备好”置位,以便CPU输出下一个数据。

定义工作方式控制字:

图3 寄存器位图

3.4 LED数码管

LED为发光二极管构成的显示器件,亦称数码管。由7个字符段和一个小数点段组成,每段对应一个发光二极管,当发光二极管点亮时,相应的字符段点亮。LED有共阴极和共阳极两种供应状态。共阴极显示时,将LED显示的COM接地,将八个字符段端a、b、c、d、e、f、g、dp依次与一个8位I/O口的最低到最高位连接,当I/O给LED的哪个字符段送入一个高电平时,该段就被点亮,从而可从这7个字符段中被点亮的构成相应的字符显示出来。同理,COM阳极即将COM 端接Vcc,其显示原理与COM阴极的基本相同,但I/O口送入低电平是相应的段才被点亮。

图 4 protel中LED图引脚控制图

3.5 4×4矩阵按键

键盘是常用信息输入元件,其实键盘也是由一个个按钮组成,如果是独立按钮的话必须要需要一个I/O口对它进行检测,而键盘往往这需要键盘按钮数一半

的I/O口数对它进行检测,也许对一个比较简单的系统I/O口数一般不是问题,但对于一个大型、复杂的系统来说I/O资源就显得非常珍贵了,尽量减少I/O使用是非常利于降低成本,另外一方面键盘比用独立按键要美观,这也是键盘能够长期得到人们青睐的原因,可是硬件上的节省必然导致软件上编程的复杂,那就来看看键盘到底使软件编程有多复杂?

因为4×4矩阵键盘有8个管脚,于是将键盘接8255A的PC口,至于为什么选择PC是有原因的,进行键盘扫描一般要求有一部分的I/O口的工作方式是输入,另一部分I/O是输出,具体到4×4键盘则要求4个I/O口输入,另外4个输出,这一点PC口刚好符合,而PA、PB口要么全部输入或输出,所以只能是PC 口接键盘。

图 5 protel中矩阵键盘图

3.6 硬件原理图

图 6 整体硬件设计图

4 软件设计

4.1 程序流程图

键盘扫描程序流程图

总程序流程图

4.2 总程序设计

DATA SEGMENT

X DB ? ;存放数据的每一位

X1 DW ? ;存放第一个数据值

X2 DW ? ;存放第二个数据值

Y DW ? ;存放运算结果

S DB ? ;存放运算符号值

E DB ? ;按下等号键标记

CC DB ? ;存放运算数据位数

H DB 0 ;存放按键行号

L DB 0 ;存放按键列号

DISCODE DB 3FH,06H,5BH,4FH,

66H,6DH,7DH,07H,

7FH,6FH,77H,7CH,

39H,5EH,79H,71H ;段码表

DATA ENDS

4.3 按键扫描程序设计

以下为按键扫描子程序,程序返回后,在变量H和L中存放当前按键的行列号:

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV AL,90H ;设置为A口输入,B口输出,C口输出

OUT 46H,AL

MOV DI,OFFSET X+3 ;DI指向X的高位

KKK: CALL KEY ;扫描按键

JMP KKK

KEY PROC

CHECK: CALL DISP ;等待按键按下的同时进行显示

MOV AL,0F0H ;所有行输出低电平

OUT 44H,AL

IN AL,40H

CMP AL,0FFH ;读列值

JZ CHECK ;若都为高电平则无键按下,等待

MOV CX,50

LOOP $ ;延时消抖

IN AL,DX ;重读列值

CMP AL,0FFH

JZ CHECK ;无键按下一直等待

MOV H,0 ;有键按下,先把行列号变量清0

MOV L,0

MOV BL,01H

MOV BH,0FEH ;扫描法读键值:从第一行开始测试,即PC0输出低电平

NEXT: MOV AL,BH

OUT 44H,AL

NEXTH: IN AL,40H ;读列值,判断是第几列有键按下

TEST AL,BL ;从第一列开始判断

JZ WAIT0

ROL BL,1

CMP BL,10H ;当前行状态下没有列有键按下,则转为对下一行的测试

JZ NEXTL

INC H ;每判断一列,列号加1

JMP NEXTH ;再对下一列进行判断

NEXTL: MOV H,0

MOV BL,01H

ROL BH,1 ;对下一行测试,让下一个PC口输出低电平

CMP BH,0EFH

JZ EXIT

INC L

JMP NEXT

WAIT0: IN AL,40H ;若有键按下,则等该按键松开后再计算键值

CMP AL,0FFH

JNZ WAIT0

MOV CX,50

LOOP $ ;延时消抖

IN AL,40H

CMP AL,0FFH

JNZ WAIT0

CALL KEYVALUE ;调计算键值子程序EXIT: RET

KEY ENDP

4.4 矩阵键盘程序设计

4.4.1 键值子程序

以下为计算键值子程序,通过行列号计算键值(键值=行号*4+列号)键值存放在DL寄存器中:

KEYVALUE PROC

MOV DL,L

MOV DH,H

SHL DL,1

SHL DL,1 ;列号乘4

ADD DL,DH

CMP DL,9 ;按下的是数字键

JNG NUM_CALL

CMP DL,14

JL CONT_CALL ;按下的是运算键

CMP DL,14

JZ OUTP_CALL ;按下的是等于键

CMP DL,15

JZ CLR_CALL ;按下的是清除键NUM_CALL: CALL NUMBER ;调数字键处理子程序

JMP EXIT1

CONT_CALL: MOV S,DL ;存放运算键的键值

MOV E,0

CALL COUNT 调运算键处理子程序,计算第一个加数

JMP EXIT1

OUTP_CALL: CALL OUTP ;调等号键处理子程序

JMP EXIT1

CLR_CALL: CALL CLEAR ;调清除键处理子程序

EXIT1: RET

KEYVALUE ENDP

4.4.2 清除键子程序

以下为清除键处理子程序,按下清除键后,X变量全部清0:

CLEAR PROC

MOV X[3],0

MOV X[2],0

MOV X[1],0

MOV X[0],0

CALL BITP

RET

CLEAR ENDP

4.4.3 等号键子程序

以下为等号键处理子程序,该子程序负责将第二个运算数据的数值计算出来存入X2变量,并根据运算符号,调用相应的运算子程序:

OUTP PROC

PUSH AX

PUSH DX

PUSH BX

INC E

CALL COUNT ;调运算键处理子程序,计算第二个运算数据

CMP S,10

JZ ADD_CALL ;运算符为加号,则调用加法子程序

CMP S,11

JZ SUB_CALL ;运算符为减号,则调用减法子程序

CMP S,12

JZ MUL_CALL ;运算符为乘号,则调用乘法子程序

CMP S,13

CALL DIVP ;运算符为除号,则调用除法子程序

JMP STORE1

ADD_CALL: CALL ADDP

JMP STORE1

SUB_CALL: CALL SUBP

JMP STORE1

MUL_CALL: CALL MULP

STORE1: MOV AX,Y

4.4.4 运算结果返回程序

以下程序将各运算子程序返回的运算结果,按位分解,送入X变量

MOV DX,0

MOV BX,1000

DIV BX

MOV X[0], AL

MOV AX,DX

MOV BL,100

DIV BL

MOV X[1],AL

MOV AL,AH

MOV AH,0

MOV BL,10

DIV BL

MOV X[2],AL

MOV X[3],AH

POP BX

POP DX

POP AX

RET

OUTP ENDP

4.4.5 运算键子程序

以下为运算键处理子程序,该程序将第一个运算数据的数值计算出来并存入X1变量;或者将第二个运算数据的数值计算出来并存入X2变量;将运算符的值存入S变量

COUNT PROC

PUSH AX

PUSH BX

PUSH DX

MOV DX,0

CALL BITP ;测试X中的数据是多少位

CMP CC,4 ;输入的数据是4位数?

JZ C4

CMP CC,3 ;输入的数据是3位数?

JZ C3

CMP CC,2 ;输入的数据是2位数?

JZ C2

JMP C1 ;输入的数据是1位数?

C4: MOV AX,0

MOV AL,X[0]

MOV BX,1000

MUL BX

MOV D X,AX

C3: MOV AL,X[1]

MOV BL,100

MUL BL

ADD DX,AX

C2: MOV AL,X[2]

MOV BL,10

MUL BL

ADD DX,AX

C1: MOV AL,X[3]

MOV AH,0

ADD DX,AX

CMP E,1

JNZ X1_S

MOV X2,DX ;按下的是等号,则将第二个运算数据的值存入X2变量

JMP EXIT3

X1_S: MOV X1,DX ;按下的是运算符号,则将第一个运算数据的值存X1变量

MOV X[3],0 ;清空X变量

MOV X[2],0

MOV X[1],0

MOV X[0],0

EXIT3: POP DX

POP BX

POP AX

RET

COUNT ENDP

4.4.6 数字键子程序

以下为数字键处理子程序,该程序,将输入的数据按位存放在X变量中,并

由CC记录数据的位数

NUMBER PROC

CMP E,1

JNZ CONTINUE

MOV E,0

CALL CLEAR

CONTINUE:CMP CC,0 ;目前数据为0位,即没有数据,则转到SSS JZ SSS

PUSH AX

PUSH DX

MOV AL,X[3]

MOV AH,X[2]

MOV DL,X[1]

MOV DH,X[0]

MOV CX,8

LL: SHL AX, 1

RCL DX,1

LOOP LL

MOV X[3],AL

MOV X[2],AH

MOV X[1],DL

MOV X[0],DH

POP DX

POP AX

SSS: MOV [DI],DL ;将当前键入的数据存放到X的最低位INC CC ;数据位数加1

CMP CC,4 ;判断数据位数

JNG EXIT2

MOV CC,0 ;如果数据超过4位,重新从最低位开始存放

MOV X[2],0

MOV X[1],0

MOV X[0],0

EXIT2: CALL DISP ;调显示子程序,显示输入的数据RET

NUMBER ENDP

4.5 运算程序设计4.

5.1 加法子程序

ADDP PROC

PUSH AX

MOV AX,X1

ADD AX,X2

MOV Y,AX

POP AX

RET

ADDP ENDP

4.5.2减法子程序

SUBP PROC

PUSH AX

MOV AX,X1

SUB AX,X2

MOV Y,AX

POP AX

RET

SUBP ENDP

4.5.3乘法子程序

MULP PROC

PUSH AX

PUSH DX

MOV AX,X1

MOV DX,X2

MUL DX

MOV Y,AX

POP DX

POP AX

RET

MULP ENDP

多位数码管动态扫描protues仿真

实验题目:多位数码管动态扫描电路设计与调试 一、实验要求与目的 1、设计要求 8位数码管显示“8.8.8.8.8.8.8.8.”,即点亮显示器所有段,持续约500ms 之后,数码管持续约1s ;最后显示“HELLO —10”,保持。 2、实验目的 1、掌握数码管动态扫描显示原理及实现方法。 2、掌握动态扫描显示电路驱动程序的编写方法。 二、设计思路 1、在Proteus 中设计仿真电路原理图。 2、在Keil C51软件中编译并调试程序,程序后缀必须是.c 。调试时生成hex 文件,确认 无误后将生成的hex 文件添加到原理图的单片机中进行仿真。 3、观察电路仿真结果对程序进行更改直至达到预期结果 三、实验原理 p2[0..3] p0[0..7]p 00p 00p 07p 06p 0605p 02p 05p 04p 04p 03p 03p 02p 02p 01p 01p 07p 23p 22p 21p 20A 15B 14C 13D 12 01122334455667798109 11 U2 7445 A 02 B 018A 13B 117A 24B 216A 35B 315A 46B 414A 57B 513A 68B 612A 7 9 B 7 11 C E 19A B /B A 1 U3 74HC245 234567891 RP1 RESPACK-8 XTAL2 18 XTAL119 RST 9 P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD 17 P3.6/WR 16P3.5/T115AD[0..7]A[8..15] ALE 30EA 31PSEN 29 P1.0/T21 P1.1/T2EX 2P1.23P1.34P1.45P1.56P1.67P1.78 U4 AT89C52 图1 原理图

基于8255的8LED显示的动态显示器

南京邮电大学 学年第学期 课程设计实验报告 题目基于8255的8LED显示的动态显示器专业通信工程 学号 姓名 指导老师 实验日期年月日

题目:基于8255的8LED显示的动态显示器 一,实验目的和要求 1,Proteus软件的MCS51单片机仿真学习 2,根据提供的参考工程,在proteus平台自己重新设计实验电路所需要的电器原理图,并在此基础上编写相对应的程序,实现其功能,学习proteus软件的使用,其中包括原理图器件的选取,原理图的电气连接,程序的编写编译以及运行,并能查出其错误等。 基本要求: 1. 用数码管正常显示数字“12345678”。 2. 通过按键可改变显示方式。 3. 设计显示屏的动态效果,用10个按键,每键对应一种滚动技术。 4. 基于8255口是指显示和键盘都由8255的IO口控制 发挥部分: 1 设计所有动作的联合效果。 2 设计二个变速按键,可多级改变滚动速度。 3 设计一台魔术电子钟,采用自动变换,随机组合,数据每10秒变换一次。 动态显示格式: 1 静止 2 整体闪烁 3 单字闪烁 4 整体向前、向后滚动 5 单字移动 6 两边向中间压缩 7 中间向两边扩张 8 上下压缩 9 文字上下滚动 10组合动作(每一字符执行上述一个动作,并同时运动) 二,实验仪器 微型计算机 三,实验原理 基于8255的8LED显示的动态显示器,是由8255a做键盘控制口连接c51,并驱动8位7段数码管实现相应显示功能。具体的,c51,p1口直接进行led数码管的位控制;p2口经74HC573译码后控制8255a的片选与内部奇存器选择;p0口连接8255a的D端口,并由它的PA口驱动7段led, PB口连接键盘,并做为I/O口与c51通信,以实现相应显示变化。 四,基本原件及其原理 单片机微型计算机简称单片机,是指在一块芯片体上集成了中央处理器CPU、随机存

单片机驱动数码管显示

单片机驱动数码管显示实验报告 学校:三亚学院 专业名称:测控技术与仪器 班级: 1301班 姓名:刘金坤 日期: 2015/05/08

实验四单片机驱动数码管显示 一实验目的 1 学习单片机驱动数码管动态显示的电路设计和编程方法 二实验原理 1、单片机系统中常用的显示器有:发光二极管LED(Light Emitting Diode)显示器、液晶LCD(Liquid Crystal Display)显示器、CRT显示器等。LED、LCD显示器有两种显示结构:段显示和点阵显示。 七段数码管显示 为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。因此为LED显示器提供的编码正好是一个字节。字母一般用米字型。 编码表: 七段数码管对应八位由低到高:a,b,c,d,e,f,g,dp 例:数码管显示2则要点亮a,b,g,e,d段,对应的八位是01011011

数码管动态显示方式是将所有显示位的段选择线并联在一起,有统一的I/O资源来控制。各个数码管公共端也有I/O资源来控制,分时的选通各个数码管进行动态显示。每个瞬间只能选通一个数码管,人眼的暂留时间为0.1s,每个数码管的选通时间必须在0.1s以内,通常选择15ms~20ms。电路图见实验附图。 三实验内容 理解动态显示电路图,参考驱动程序,单片机P0口作段码输出控制,P1口作位码控制,使单片机驱动6个7段数码管输出实验当天年、月、日六位数字。 四、实验步骤 (1)单片机最小应用系统1的P0口接段码口a~h,P1口接位码口S1~S6。 (2)在KEIL软件下编写程序并调试,完成实验内容要求。 (3)下载程序,通过实验箱验证设计电路和编写的程序是否达到实验要求。 下载程序,通过实验箱验证设计电路和编写的程序是否达到实验要求。 五参考程序与电路 数码管动态显示电路图(数码管位选信号为高电平,段选信号为高电平)

4位7段数码管驱动电路设计要求

4位7段数码管驱动电路 图1 开发板电路原理图 信号说明

1. iRST_N(异步复位) 当iRST_N信号为低时,Seg7_Driver模块中的所有寄存器异步复位为初值。 2. iCLK 模块的输入时钟40MHz。 3. iSeg_Val[15:0] 7段数码管输入二进制值,0x0~0xF iSeg_Val[15:12],左侧第一位7段数码管的值。 iSeg_Val[11: 8],左侧第两位7段数码管的值。 iSeg_Val[ 7: 4],左侧第三位7段数码管的值。 iSeg_Val[ 3: 0],左侧第四位7段数码管的值。 4. iDot_Val[3:0] 各位7段数码管小数点的显示,值为1表示显示小数点,0表示不显示小数点。 iDot_Val[3],左侧第一位7段数码管的小数点。 iDot_Val[2],左侧第两位7段数码管的小数点。 iDot_Val[1],左侧第三位7段数码管的小数点。 iDot_Val[0],左侧第四位7段数码管的小数点。 5. oDisplay[7:0] 7段数码管的数据信号。4位7段数码管共用数据信号。7段数码管为共阳极连接,各段数据线为0时,对应段发光。 6. oDis_En[3:0] 各位7段数码管的使能信号,低有效。

oDis_En[3],左侧第一位7段数码管的使能信号。 oDis_En[2],左侧第两位7段数码管的使能信号。 oDis_En[1],左侧第三位7段数码管的使能信号。 oDis_En[0],左侧第四位7段数码管的使能信号。 建议的分块: 将整个驱动电路分成Seg7_Ctrl模块与Seg7_Hex2seg模块 Seg7_Ctrl模块负责产生数码管动态显示的控制信号oDis_En的时序 Seg7_Hex2Seg模块负责将二进制值转换成数据码管显示的数据值,包括小数点的值。 注意点: 1. 动态显示过程是利用人眼的视觉残留现象来实现的,应选择适当的数码管扫描频率。可先 选择数码管的扫描显示的刷新率为125Hz(8ms),即每位数码管用2ms。 2. 完成基本功能后,可实验改变刷新率,观察数码管显示的效果,并思考原因。 3. 如果要使得数码管能够显示,A,b,C,n,o等其他字符,模块应该作怎样的修改?

数码管显示程序(汇编语言)

实验三数码显示 一、实验目的 了解LED数码管动态显示的工作原理及编程方法。 二、实验内容 编制程序,使数码管显示“DJ--88”字样。 三、实验程序框图 四、实验步骤 联机模式: (1)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开598K8ASM

文件夹,点击S6.ASM文件,单击“确定”即可装入源文件,再单击工具栏中编译装载,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。 (2)数码管显示“DJ--88”字样。 脱机模式: 1、在P.态下,按SCAL键,输入2DF0,按EXEC键。 2、数码管显示“DJ--88”字样。 五、实验程序清单 CODE SEGMENT ;S6.ASM display "DJ--88" ASSUME CS:CODE ORG 2DF0H START: JMP START0 PA EQU 0FF20H ;字位口 PB EQU 0FF21H ;字形口 PC EQU 0FF22H ;键入口 BUF DB ?,?,?,?,?,? data1: db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0 c6h,0a1h db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH,0F0H START0: CALL BUF1 CON1: CALL DISP JMP CON1 DISP: MOV AL,0FFH ;00H MOV DX,PA OUT DX,AL MOV CL,0DFH ;显示子程序 ,5ms MOV BX,OFFSET BUF DIS1: MOV AL,[BX] MOV AH,00H PUSH BX MOV BX,OFFSET DATA1 ADD BX,AX MOV AL,[BX] POP BX MOV DX,PB

用51单片机、8255、138、373等实现数码管显示按键数值的程序

姓名专业

学号 2013年10月28日 随着单片机技术的飞速发展,在其推动下,现代的电子产品几乎渗透到了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高。 单片机具有体积小、功能强、应用面广等优点,目前正以前所未见的速度取代着传统电子线路构成的经典系统,蚕食着传统数字电路与模拟电路固有的领地。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机了解计算机原理与结构的最佳选择。现在,这种单片机的使用领域已十分广泛。彩电、冰箱、空调、录像机、VCD、遥控器、游戏机、电饭煲等无处不见单片机的影子,单片机早已深深地融入我们每个人的生活之中。 单片机能大大地提高这些产品的智能性,易用性及节能性等主要性能指标,给我们的生活带来舒适和方便的同时,在工农业生产上也极大地提高了生产效率和产品质量。单片机按用途大体上可分为两类,一种是通用型单片机,另一种是专用型单片机。

课题要求: 用51单片机、8255、138、373等实现数码管显示按键数值的程序 各芯片资料: 1.8255芯片资料如下 用8255A可编程器件扩展并行接口 8255: 有三个八位的并行口:PA、PB、PC。 有三种工作方式:方式0,方式1,方式2。 逻辑结构图: 包含四个部分:●三个并行数据输入输出端口 ●两个工作方式控制电路

●一个读写逻辑控制电路 ●八位总线缓冲器 ⑴.三个并行数据输入输出端口:A口;B口;C口 一般,A口,B口作为数据输入输出端口, C口作为控制/状态信息口,可以分为两个部分,分别与A口和B口配合使用,作为控制信息输出或状态信息输入。⑵.工作方式控制电路 工作方式控制电路有两个:A组控制和B组控制电路, A组控制用来控制A口和C口的上半部分PC7——PC4; B组控制用来控制B口和C口的下半部分PC3——PC0; 两组控制电路具有一个控制命令寄存器,用来接收来自 CPU的数据(控制字),以决定芯片的工作方式,或对 C口按位进行清“0”或者置“1”。 ⑶.总线缓冲器 三态双向八位缓冲器,作为微处理器数据总线与8255之间的接口,用来传送命令、数据及状态信息。 ⑷.读写逻辑控制电路 读写逻辑控制电路接受CPU来的控制信号:读、写、地址及复位信息,根据控制信号的要求,将数据读出,送往CPU,或者将CPU来的信息写入端口。 引脚说明: CS:片选信号,低电平有效,表示芯片被选中;

7段数码管显示电路

4.4 显示模块 4.4.1 7段数码管的结构与工作原理 7段数码管一般由8个发光二极管组成,其中由7个细长的发光二极管组成 数字显示,另外一个圆形的发光二极管显示小数点。 当发光二极管导通时,相应的一个点或一个笔画发光。控制相应的二极管导通,就能显示出各种字符,尽管显示的字符形状有些失真,能显示的数符数量也有限,但其控制简单,使有也方便。发光二极管的阳极连在一起的称为共阳极数码管,阴极连在一起的称为共阴极数码管,如图4.9所示。 4.4.2 7段数码管驱动方法 发光二极管(LED 是一种由磷化镓(GaP )等半导体材料制成的,能直接将电能转变成光能的发光显示器件。当其内部有一一电流通过时,它就会发光。 7段数码管每段的驱动电流和其他单个LED 发光二极管一样,一般为5~10mA ;正向电压随发光材料不同表现为1.8~2.5V 不等。 7段数码管的显示方法可分为静态显示与动态显示,下面分别介绍。 (1) 静太显示 所谓静态显示,就是当显示某一字符时,相应段的发光二极管恒定地寻能可截止。这种显示方法为每一们都需要有一个8位输出口控制。对于51单片机,可以在并行口上扩展多片锁存74LS573作为静态显示器接口。 静态显示器的优点是显示稳定,在发光二极管导通电注一定的情况下显示器的亮度高,控制系统在运行过程中,仅仅在需要更新显示内容时,CPU 才执行一次显示更新子程序,这样大大节省了CPU 的时间,提高了CPU 的工作效率;缺点是位数较多时,所需I/O 口太多,硬件开销太大,因此常采用另外一种显示方式——动态显示。

(2)动态显示 所谓动态显示就是一位一位地轮流点亮各位显示器(扫描),对于显示器的每一位而言,每隔一段时间点亮一次。虽然在同一时刻只有一位显示器在工作(点亮),但利用人眼的视觉暂留效应和发光二极管熄 灭时的余辉效应,看到的却是多个字符“同时”显示。显示器亮度既与点亮时的导通电流有关,也与点亮时间和间隔时间的比例有关。调整电流和时间参烽,可实现亮度较高较稳定的显示。若显示器的位数不大于8位,则控制显示器公共极电位只需一个8位I/O 口(称为扫描口或字位口),控制各位LED 显示器所显示的字形也需要一个8位口(称为数据口或字形口)。 动态显示器的优点是节省硬件资源,成本较低,但在控制系统运行过程中,要保证显示器正常显示,CPU 必须每隔一段时间执行一次显示子程序,这占用了CPU 的大量时间,降低了CPU 工作效率,同时显示亮度较静态显示器低。 综合以上考虑,由于温度显示为精确到小数点后两位,故只需4个数码管,又考虑到CPU 工作效率与电源效率,本毕业设计采用静态显示。为共阳极显示。 4.4.3 硬件编码 动74LS47是一款BCD 码转揣为7段输出的集成电路芯片,利用它可以直接驱动共阳 极的7段数码管。它的引脚分部和真值表分别下图。

8255和led数码管显示-微机原理(精)

data segment ioport equ 2400h io8255a equ ioport+008h io8255b equ ioport+00bh led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh mesg1 db 0dh,0ah,'Input a num (0--9h:',0dh,0ah, '$' data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov dx,io8255b ; 使 8255的 A 口为输出方式mov al,80h ;10000000B ,控制字 PA 以方式 0输出out dx,al zby: mov dx,offset mesg1 ; 显示提示信息 mov ah,09h int 21h mov ah,01 ; 从键盘接收字符 int 21h

cmp al,'0' ; 是否小于 0 jl exit ; 如若小于 0,则跳转到 exit 退出程序 cmp al,'9' ; 是否大于 9 jg exit ; 如若大于 9,则跳转到 exit 退出程序 sub al,30h ; 将所得字符的 ASCII 码减 30H ,数字键 ascii 码同数值转换 mov bx,offset led ;bx 为数码表的起始地址 xlat ; 求出相应的段码 mov dx,io8255a ; 从 8255的 A 口输出 out dx,al jmp zby ; 转 zby exit: mov ah,4ch ; 返回 DOS int 21h code ends end start 动态显示 : data segment ioport equ 0c800h-0280h io8255a equ ioport+28ah io8255b equ ioport+28bh

数码管的驱动原理

数码管的驱动原理 所谓共阳共阴,是针对数码管的公共脚而言的。一个1位典型的数码管,一般有10个脚,8个段码(7段加1个小数点),剩下两个脚接在一起。各个段码实际上是一个发光二极管,既然是发光二极管,就有正负极。所谓共阳,也就是说公共脚是正极(阳极),所有的段码实际上是负极,当某一个或某几个段码位接低电平,公共脚接高电平时,对应的段码位就能点亮,进而组合形成我们看到的数字或字母。共阴刚好相反,也就是公共脚是负极(阴极),段码位是阳极,当公共脚接地,段码位接高电平时,对应段码位点亮。 1位数码管是这样,更多位的数码管也基本跟这个原理类似。 共阴共阳与电路接线密切相关,决定了驱动电路的接法,因此在电路设计前要考虑好数码管的类型,否则就不能实现显示的效果了。 驱动共阴数码管一般用PNP,共阳的用NPN 图一低电平有效,图二高电平有效

现在让我们用实验板上的两个数码管来做一个循环显示00~99数字的实验,先来完成必要的硬件部分, 数码管有共阴和共阳的区分,单片机都可以进行驱动,但是驱动的方法却不同,并且相应的0~9的显示代码也正好相反。 首先我们来介绍两位共阳数码管的单片机驱动方法,电路如下图: 网友可以看到:P2.6和P2.7端口分别控制数码管的十位和个位的供电,当相应的端口变成低电平时,驱动相应的三极管会导通,+5V通过IN4148二极管和驱动三极管给数码管相应的位供电,这时只要P0口送出数字的显示代码,数码管就能正常显示数字。 因为要显示两位不同的数字,所以必须用动态扫描的方法来实现,就是先个位显示1 毫秒,再十位显示1毫秒,不断循环,这样只要扫描时间小于1/50秒,就会因为人眼的视觉残留效应,看到两位不同的数字稳定显示。 下面我们再介绍一种共阴数码管的单片机驱动方法,电路如下图: 网友可以看到:+5V通过1K的排阻直接给数码管的8个段位供电,P2.6和P2.7端口分别控制数码管的十位和个位的供电,当相应的端口变成低电平时,相应的位可以吸入电流。单片机的P0口输出的数据相当于将数码管不要显示的数字段对地短路,这样数码管就会显示需要的数字。

数码管动态显示教案

电子综合设计实训 题目数码管动态显示 _ 姓名 专业 学号 指导教师 郑州科技学院电气工程学院

目录 摘要.................................................................................................. I 1背景. (1) 1.1介绍 (1) 1.2设计步骤 (2) 2 设计思路 (3) 2.1方案对比 (3) 3元件的选择 (6) 3.1单片机 (6) 3.2 显示元器件的选择 (6) 4 设计原理及功能说明 (8) 4.1 各部分功能说明 (8) 5 装配与调试 (14) 5.1装配 (14) 5.2调试 (14) 6 总结 (15) 附录 (17) 附录一:元件清单 (17) 附录二:电路源程序 (17)

数码管动态显示的设计 摘要 本文介绍了一种基于AT89C51单片机的8个数码管滚动显示单个数字的设计,让八位数码管滚动显示0、1、2、3、4、5、6、7,我们以液晶显示技术的发展为背景,选择了比较常用的液晶数码管显示模块,利用了单片机控制数码管模块的显示机理。研究学习AT89C51单片机其功能,对学习过的单片机,C语言课程进行巩固,设计一款在8只数码管上流动显示单个数字的程序,并用PROTEUS进行电路设计和实时仿真。该电路有两部分组成:AT89C51单片机和显示模块组成。AT89C51单片机具有超低功耗和CPU外围的高度整合性;显示模块数码管是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极,方便易用。实际应用中不需要外部任何元器件即可实现,具有接口电路简单、可靠,易于编程的特点,抗干扰性好等特点。 单片机技术使我们可以利用软硬件实现数码管准确显示各种数码。而且这种技术相对简单,性价比较高,在我们生活中应用很广泛,具有一定的发展前景。 关键词:AT89C51单片机;数码管;滚动显示

实验2:8255七段数码管静动态显示

微机实验报告书 学号:姓名:班级: 同组名单:实验日期: 2012.12.21 实验题目:七段数码管的静态显示 实验目标:掌握数码管显示数字的原理 (功能:键盘输入一位十进制数字(0~9),用七段数码管显示。) 解题思路: 1.静态显示:按图 10(a)连接好电路,将8255的A口PA0-PA6分别与七段 数码管的断码驱动输入端a-g项链,位码驱动输入端S1接+5V,S0、dp 接地。编程从键盘输入一位十进制数字,在七段数码管上显示出来。 2.动态显示:按图10(b)连接好电路,七段数码管段码连接不变,位码驱 动输入端S1,S0接8255C口的PC1,PC0。编程在两个数码管上显示“56”。程序框图:静态显示见图11(a),动态显示见图11(b)。

关键问题分析(静态显示): 1、按键判断和程序结束判断 按键来说,由于程序中必须输入数字,所以没有必要对是否按键进行判断,只需要判断按键是否在0-9之间即可。用以下程序即可: cmp al,'0' jl exit ; jl,条件转移指令,即在小于时转移 cmp al,'9' jg exit ;jg, 条件转移指令,即在大于时转移程序中还要用到“cmp”即比较指令,用来比较输入数与0、9的大小关系。程序结束:如若输入的数字小于0或者大于9,必须直接跳出程序,即结束指令必须单独占用一个程序段,这样,程序顺序执行完毕也可以顺利返回DOS。 2、七段码显示。

实验指导书中给出了七段码的字型代码。这样一来,七段码的显示只需要用换码指令“XLAT”便可以轻松实现。前提是必须将七段码字型编成数码表以字符串的形式写进程序中。 3、数字键ASCII码与数值间的转换。 因为0的ASCII码为30H,所以数字键ASCII码与数值间的转换时只需减去30H即可,可用下列语句实现: sub al,30h 程序清单: 静态显示: data segment ioport equ 0c800h-0280h io8255a equ ioport+288h io8255b equ ioport+28bh led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh mesg1 db 0dh,0ah,'Input a num (0--9h):',0dh,0ah,'$' data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov dx,io8255b ;使8255的A口为输出方式 mov al,80h ;10000000B,控制字PA以方式0输出 out dx,al zby: mov dx,offset mesg1 ;显示提示信息 mov ah,09h int 21h mov ah,01 ;从键盘接收字符 int 21h cmp al,'0' ;是否小于0 jl exit ;如若小于0,则跳转到exit退出程序 cmp al,'9' ;是否大于9 jg exit ; 如若大于9,则跳转到exit退出程序 sub al,30h ;将所得字符的ASCII码减30H,数字键ascii码同数值转换 mov bx,offset led ;bx为数码表的起始地址 xlat ;求出相应的段码 mov dx,io8255a ;从8255的A口输出 out dx,al jmp zby ;转zby exit: mov ah,4ch ;返回DOS

VHDL数码管扫描显示驱动电路

静态显示 library ieee; use ieee.std_logic_1164.all; entity bcd_seg is port( a,b,c,d:in std_logic; seg:out std_logic_vector(7 downto 0) ); end entity bcd_seg; architecture one of bcd_seg is signal bcd:std_logic_vector(3 downto 0); begin bcd<=a&b&c&d; process(bcd) begin case bcd is when "0000"=>seg<="00111111"; when "0001"=>seg<="00000110"; when "0010"=>seg<="01011011"; when "0011"=>seg<="01001111"; when "0100"=>seg<="01100110"; when "0101"=>seg<="01101101"; when "0110"=>seg<="01111101"; when "0111"=>seg<="00000111"; when "1000"=>seg<="01111111"; when "1001"=>seg<="01101111"; when others=>null; end case; end process; end architecture one; 动态显示 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity bcd_seg is port( clk:in std_logic; a,b,c,d:in std_logic; com:out std_logic_vector(2 downto 0); seg:out std_logic_vector(7 downto 0) ); end entity bcd_seg; architecture one of bcd_seg is signal cnt:std_logic_vector(2 downto 0);

8255和LED数码管显示实验

实验八 8255和LED数码管显示实验 二、实验电路 实验电路如图2及图3所示。 图2 静态显示电路图3 动态显示电路 五、实验项目 1.静态显示:按图2连接好电路,将8255A的A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端S1接+5V(选中),S0、dp接地(关闭)。编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。 程序框图、源代码(含注释)及实验结果如下: 1、静态显示 ;0-9程序: data segment ioport equ2400h-280h io8255a equ ioport+288h io8255ctr equ ioport+28bh led db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh mesg1 db0dh,0ah,'Input a num (0--9),other key is exit:',0dh,0ah,'$' data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov dx,io8255ctr ;使8255的A口为输出方式 mov ax,80h out dx,al sss: mov dx,offset mesg1 ;显示提示信息 mov ah,9 int21h mov ah,1;从键盘接收字符 int21h

cmp al,'0' ;是否小于0 jb exit ;若是则退出 cmp al,'9' ;是否大于9 ja exit ;若是则退出 sub al,30h;将所得字符的ASCII码减30H mov bx,offset led ;bx为数码表的起始地址 xlat ;求出相应的段码 mov dx,io8255a ;从8255的A口输出 out dx,al jmp sss ;转SSS exit: mov ax,4c00h;返回 int21h code ends end start 2.动态显示(选做):按图3连接好电路,七段数码管段码连接不变,位码驱动输入端S1S0接8255C口的PC1、PC0。编程在两个数码管上显示56。 程序框图、源代码(含注释)及实验结果如下: data segment ioport equ 2400h-280h io8255a equ ioport+288h io8255c equ ioport+28Ah io8255ctr equ ioport+28bh mesg1 db 0dh,0ah,' Press any key to exit!',0dh,0ah,'$' data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov dx,offset mesg1 ;显示提示信息 mov ah,9 int 21h mov dx, io8255ctr ;将8255设为A口输出 mov al,80h out dx,al loop1: mov dx, io8255a mov al,6Dh out dx,al mov dx, io8255c mov al,2

BCD七段数码管显示译码器电路

BCD七段数码管显示译码器电路 7段数码管又分共阴和共阳两种显示方式。如果把7段数码管的每一段都等效成发光二极管的正负两个极,那共阴就是把abcdefg这7个发光二极管的负极连接在一起并接地;它们的7个正极接到7段译码驱动电路74LS48的相对应的驱动端上(也是abcdefg)!此时若显示数字1,那么译码驱动电路输出段bc为高电平,其他段扫描输出端为低电平,以此类推。如果7段数码管是共阳显示电路,那就需要选用74LS47译码驱动集成电路。共阳就是把abcdefg的7个发光二极管的正极连接在一起并接到5V电源上,其余的7个负极接到74LS47相应的abcdefg输出端上。无论共阴共阳7段显示电路,都需要加限流电阻,否则通电后就把7段译码管烧坏了!限流电阻的选取是:5V电源电压减去发光二极管的工作电压除上10ma到15ma得数即为限流电阻的值。发光二极管的工作电压一般在1.8V--2.2V,为计算方便,通常选2V即可!发光二极管的工作电流选取在10-20ma,电流选小了,7段数码管不太亮,选大了工作时间长了发光管易烧坏!对于大功率7段数码管可根据实际情况来选取限流电阻及电阻的瓦数! 发光二极管(LED)由特殊的半导体材料砷化镓、磷砷化镓等制成,可以单独使用,也可以组装成分段式或点阵式LED显示器件(半导体显示器)。分段式显示器(LED数码管)由7条线段围成8型,每一段包含一个发光二极管。外加正向电压时二极管导通,发出清晰的光,有红、黄、绿等色。只要按规律控制各发光段的亮、灭,就可以显示各种字形或符号。图4 - 17(a)是共阴式LED数码管的原理图,图4-17(b)是其表示符号。使用时,公共阴极接地,7个阳极a~g由相应的BCD七段译码器来驱动(控制),如图4 - 17(c)所示。 BCD七段译码器的输入是一位BCD码(以D、C、B、A表示),输出是数码管各段的驱动信号(以F a~F g表示),也称4—7译码器。若用它驱动共阴LED数码管,则输出应为高有效,即输出为高(1)时,相应显示段发光。例如,当输入8421码DCBA=0100时,应显示,即要求同时点亮b、c、f、g段,熄灭a、d、e段,故译码器的输出应为F a~F g=0110011,这也是一组代码,常称为段码。同理,根据组成0~9这10个字形的要求可以列出8421BCD七段译码器的真值表,见表4 - 12(未用码组省略)。

驱动数码管程序

//GPIO define //FUNCTION:用595完成八位数码管显示 -------------------------------------------------------------------------- */ #include /* STM32F10x Library Definitions */ #include "UET_GPIO.h" //unsigned char seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e ,0x8c,0xc1,0xce,0x91,0x89,0xc7,0xff}; unsigned char seg[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71,0x73,0x78,0x5c,0x54, 0x40,0x81,0x88,0x3e,0x70,0x00 } ; //0,1,2,3,4,5,6,7,8,9, //A,b,C,d,E,F,P,t,o,n, //-,~,_,U,r,SP, //unsigned char DAT[]={0x7f,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位选择unsigned char BitSelect_Code[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //因为ULN2803驱动反相,所以位码要用共阳极的位码 //COM1 COM2 COM3 COM4 COM5 COM6 COM7 COM8 // B0 B1 B2 B3 B4 B5 B6 B7 unsigned char Disp_buffer[]={0,1,2,3,4,5,6,7}; //段缓冲区 unsigned char Bit_NO=0 ; // 选择第Bit_NO 位数码管 unsigned char Buffer_NO=0; // 缓冲区的第Buffer_NO u32 LED_DATA=01234567; #define SER(x) GPIOA->ODR=(GPIOA->ODR&~GPIO_Pin_7) | (x ? GPIO_Pin_7 : 0) #define SCK(x) GPIOA->ODR=(GPIOA->ODR&~GPIO_Pin_5) | (x ? GPIO_Pin_5 : 0) #define RCK(x) GPIOA->ODR=(GPIOA->ODR&~GPIO_Pin_6) | (x ? GPIO_Pin_6 : 0)

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

基于51单片机的LED数码管动态显示 LED数码管动态显示就是一位一位地轮流点亮各位数码管,对于每一位LED数码管来说,每隔一段时间点亮一次,利用人眼的“视觉暂留"效应,采用循环扫描的方式,分时轮流选通各数码管的公共端,使数码管轮流导通显示。当扫描速度达到一定程度时,人眼就分辨不出来了。尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,认为各数码管是同时发光的。若数码管的位数不大于8位时,只需两个8位I/O口。 1 硬件设计 利用51单片机的P0口输出段码,P2口输出位码,其电路原理图如下所示。 在桌面上双击图标,打开ISIS 7 Professional窗口(本人使用的是v7.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)),使人眼看到的数字闪烁。在程序中要合理的选择合适的保持时间和间隔时间。而循环次数则正比于显示的变化速度。 LED数码管动态显示的流程如下所示。

CD4511与数码管结合显示电路

现代电子技术综合实训 实训报告 专业: 年级/班级: 姓名: 实训时间: 实训地点:

指导教师: 一、前言: 近些年,人们对数字钟的要求越来越高,传统的时钟已不能满足人们的需求。多功能数字钟不管在性能还是在样式上都发生了质的变化,如电子闹钟、数字闹钟等。单片机在多功能数字钟中的应用已是非常普遍,人们对数字钟的功能及工作顺序都非常熟悉,但是却很少知道它的内部结构及工作原理。由单片机作为数字钟的核心控制器,可以通过它的时钟信号进行计时,实现数字钟的各种功能,将其时间数据经单片机输出,利用显示器显示出来。通过键盘可以进行定时、校时。输出设备显示器可以为液晶显示器或数码管。 本次设计以AT89S52芯片为核心,辅以必要的外围电路,设计了一个简易的电子时钟,它由5V直流电源供电。在硬件方面,除了CPU外,使用CD4511驱动六个7段LED数码管来进行显示,LED 采用的是动态扫描显示,使用三极管9015进行驱动。通过LED能够比较准确地显示时间。四个简单的按键实现对时间的调整。软件方面采用C语言编程。整个电子时钟系统计时比较准确并且方便实用。 二、需求分析 单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注应用很广、发展很快、单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛的应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型的和最有代表性的一种。这次设计通过对它的学习、应用,以AT89S52芯片为核心,加以辅助电路,设计了一个简易的电子时钟,它由直流电源供电,通过数码管能够准确显示时间。 2.1设计要求: 1.以AT89S52单片机为核心设计一个时钟控制器。

数码管动态扫描显示01234567

实验5 数码管动态扫描显示01234567 原理图:8个数码管它的数据线并联接到JP5, 位控制由8个PNP型三级管驱动后由JP8引出。 相关原理: 数码管是怎样来显示1,2,3,4呢?数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。我们分别把他命名为 A,B,C,D,E,F,G,H。

搞懂了这个原理, 我们如果要显示一个数字2, 那么 A,B,G,E,D这5个段的发光管亮就可以了。也就是把B,E,H(小数点)不亮,其余全亮。根据硬件的接法我们编出以下程序。当然在此之前,还必须指定哪一个数码管亮,这里我们就指定最后一个P2.7。 LOOP: CLR P2.7 ;选中最后的数码管 SETB P0.7 ;B段不亮 SETB P0.5 ;小数点不亮 SETB P0.1 ;C段不亮 CLR P0.2 ;其他都亮 CLR P0.3 CLR P0.4 CLR P0.6 CLR P0.0 JMP LOOP ;跳转到开始重新进行

END 把这个程序编译后写入单片机,可以看到数码管的最后一位显示了一个数字2。 也许你会说:显示1个2字就要10多行程序,太麻烦了。 显示数字2则是C,F,H(小数点)不亮,同时由于接法为共阳接法,那么为0(低电平)是亮 为1(高电平)是灭。从高往低排列,(p0.7_p0.0)写成二进制为01111110, 把他转化为16进制则为A2H。我们可以根据硬件的接线把数码管显示数字编制成一个表格, 以后直接调用就行了。 有了这个表格上面显示一个2的程序则可简化为: LOOP: CLR P2.7 ;选中左边的数码管 MOV P0,#0A2H ;送数字2的代码到P0口 JMP LOOP ;跳转到开始重新进行 END

8255a1(七段数码管)

实验4七段数码管 教具、教学素材准备:实验箱,多媒体 教学方法:网络讲授与实作 教学时数:2 一、实验目的 掌握数码管显示数字的原理 二、实验原理和内容 按图22连接好电路,将8255的A口PA0~PA6分别与七段数码管的段码驱动 输入端a~g相连,位码驱动输入端S1接+5V(选中),S0、dp接地(关闭)。编程 从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。 三、编程 1、实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码,位码加反相驱动器,位码输入端高电平选中。 2、七段数码管的字型代码表如下表:

data segment ioport equ 0d400h-0280h io8255a equ ioport+288h io8255b equ ioport+28bh led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh mesg1 db 0dh,0ah,'Input a num(0--9h):',0dh,0ah,'$' data ends

code segment assume cs:code,ds:data start:mov ax,data mov ds,ax mov dx,io8255b;使8255的A口为输出方式mov ax,80h out dx,alsss:mov dx,offset mesg1;显示提示信息mov ah,09h int 21h mov ah,01;从键盘接收字符 int 21h cmp al,'0';是否小于0 jl exit;若是则退出 cmp al,'9';是否大于9 jg exit;若是则退出 sub al,30h;将所得字符的ASCII码减30H mov bx,offset led;bx为数码表的起始地址xlat;求出相应的段码 mov dx,io8255a;从8255的A口输出 out dx,al jmp sss;转SSS exit:mov ah,4ch;返回DOS int 21h code ends end start 教学后记:

相关文档
最新文档