串行口动态扫描显示电路
.两个LED灯通过动态扫描显示0到99

3.打开Keil uVision4仿真软件,首先建立本实验的项目文件,接着添加源程序,进行编译,直到编译无误。
4.打开模块电源和总电源,点击开始调试按钮,点击RUN按钮运行程序。
5.观察实验结果并记录结果,进行分析。
单片机实验报告3
1、实验目的:
1.掌握数字、字符转换成显示段码的软件译码方法
2.动态显示的原理和相关程序的编写
3.两个LED灯通过动态扫描显示0到99.
2、实验工具
单片机最小应用系统、THKL-C51仿真器、单片机实验箱
3、实验步骤
单片机P0输出段码,P1口输出位控码,输出2个字符。
1.单片机最小应用系统的P0口JD1F接段码口a~H(JD1I),P1口JD2F接位码口S1~S2(JD2I)。
{
uchar i; //定义变量
uchar j; //定义变量
delay(20);
P1=0xff; //P1口全置一
while(1)//进入循环
{
for(i=0;i<10;i++)
for (j=0;j<10;j++)
{
P0=0x00; //P0口清0
{
P1=weima[1];
P0=duanma[i];//第二个位码显示当时的断码
delay(5);//延时5ms
P1=weima[0];
P0= duanma[j];/ /第一个位码显示当时的断码
delay(5); //延时5ms
P0=0x00; //重复上述过程,为了更加清楚的看到试验箱上效果,P0口清0
CS1694(静态LED控制驱动电路)

CS1694动态LED 控制/驱动电路概述CS1694是一种动态LED 控制/驱动器具有多种显示模式6×11或7×10内部具有8级亮度控制带有按键扫描功能可以扫描10×2的键盘矩阵电路内部含有一个14×8的显示RAM 以及一个5×6的按键数据RAM 作为MCU 的理想外围元件带有可以直接和MCU 相接的串行口Din & Dout StbClkCS1694是在CS1684的基础上封装改动形成的在CS1684电路基础上将Din 与Dout 键合在一起Key3和Seg11不键合其他功能与CS1684相同该电路主要用作动态LED 控制/驱动器也有按键扫描的用途是单片机与动态LED 屏之间的理想元器件可以用在DVD VCD 功放等整机上功能特点采用低功耗的CMOS 工艺技术多种显示模式 6 Grids ×11 Segs 或7 Grids ×10 Segs 按键扫描功能10×2键盘矩阵 带有8级亮度调整功能带有直接与MCU 相接的时钟数据输入数据输出使能信号的串行接口 封装形式SOP28管 脚 名 管脚序号 I/O 管 脚 描 述 Osc 1 I 振荡器输入引脚外接的振荡电阻决定了振荡器的频率Din & Dout 2 I/ON 沟开漏结构的串行数据输入输出端口Clk 上升沿处输入数据从低位开始Clk 下降沿处输出数据Clk 3 I 时钟输入端口上升沿处输入数据下降沿处输出数据Stb 4 I串行接口使能端口Stb 下降沿后第一个数据作为控制指令当其为高电平时Clk 无效Key1~Key2 5 6I 按键数据输入端口每次显示周期结束按键数据锁存一次内部采用下拉电阻结构Gnd 222528 - 低电平端口Seg1/Ks1Seg10/Ks10817O P 沟开漏结构的Seg输出端口也用作按键扫描信号Seg12/Grid7 18 O Seg Grid 共用输出端口Vdd 721- 电源端口 Grid6Grid1192023242627O Grid 输出端口功能说明电路上电后RC 振荡器起振然后通过内部的复位电路对电路进行初始化如操作模式显示模式等电路初始化后可通过串行接口从MCU 接受指令数据等信息只有当Stb 为低电平时Clk 才有效才可以通过Din & Dout 端口与MCU 之间交换信息接收数据时Stb 从高电平变为低电平后的第一个byte 作为指令用无论是接受数据还是发送数据总是从字节的最低位开始从数据流程看电路内含有三条数据流1 串行口串/并转换数据RAM Seg 输出2 串行口串/并转换指令译码控制信息3 按键口按键锁存按键RAM 串并转换Dout 输出指令说明CS1694共有4条指令显示模式设置指令操作模式设置指令数据RAM 地址设置指令显示控制指令指令的高两位是指令识别码用以识别所接受的是何种指令然后指向对应的译码器产生对应的微操作每条指令里的不相关位可以为1也可以为0对电路的动作不影响指令1显示模式设置指令该条指令决定了显示时的Seg 数和Grid 数在该条指令里指令识别码为00无关位是b2b5电路在显示前首先要执行显示控制指令用以打开显示电路在初始化后选106Grids 11Segs 117Grids10Segs该条指令主要是用来设置写数据操作还是读按键数据操作另外还可以设置是正常工作模式还是测试模式主要是测试OSC 以及在写数据时地址的操作模式在该条指令里指令识别码为01无关位是b4b5电路初始化后低四位均被设置为0其具体格式如下图00写数据到显示RAM10读key数据地址自动加1模式设置0数据写入后地址自动加11地址固定电路模式选择1测试模式0正常工作按键扫描数据三者之间的关系如下表所示指令3数据RAM地址设置指令该条指令主要是用来设置所要的显示RAM写入地址所设置地址只要在范围00H0DH 内才是有效的如设置的是0EH或更高则被认为是无效设置数据不能写入直至一个有效地址被设置在该条指令里指令识别码为11无关位是b4b5电路初始化后显示RAM地址设置该条指令主要是对显示进行亮度设置以及开/关显示设置在该条指令里指令识别码为电路初始化后亮度设置000脉宽=1/16001脉宽=2/16010脉宽=4/16011脉宽=10/16100脉宽=11/16101脉宽=12/16110脉宽=13/16111脉宽=14/160显示关掉1显示按键扫描继续打开显示按键扫描关系图电路在正常工作中按键扫描和显示交替工作其中一个按键扫描周期包括了2个显示周期两者之间的关系如下图所示与MCU之间的传输格式其中PW CLK 时钟脉宽400ns PW stb Stb 脉宽1µs t setup 数据设置时间100ns t hold 数据保持时间100nst Clk-Stb Clk -Stb 时间1µs t THZ 下降时间10µs t TZH 上升时间1µs t PZL 传送延迟时间100nsfosc =振荡器频率 t PLZ 传送延迟时间300ns t TZL <1µs t TLZ <10µs测试条件t THZ 下拉电阻10k Ω负载300pF t TLZ 上拉电阻10k Ω负载300pF* Din 与Dout 键合在一起极限参数如未作其他说明则Ta=25Gnd=0V参数符号范围单位电源电压V dd-0.5+7.0 V逻辑输入电压Vi -0.5V DD+0.5 VIolgr +250mA 输出驱动电流Iohsg -50 mA 最大输出电路总和Itotal 400mA 存储温度Tstg -55+125工作温度Topt -40+85推荐工作范围如未作其他说明则Ta=20+70Gnd=0V参数符号最小值典型值最大值单位电源电压V dd 4.5 5.0 5.5 V动态电流* Idyn - - 5 mA高电平输入电压Vih 0.8V DD- V DD V低电平输入电压Vil 0 - 0.3V DD V*测试条件将显示控制指令设为80H即显示关断且无负载电参数如未作其他说明则Ta=25Gnd=0V Vdd=5V参数符号最小值典型值最大值单位说明Iohsg1 -20 -25 -60 mAV o=V DD-2VSeg1Seg10,Seg12/Grid7高电平输出电流Iohsg2 -25 -30 -70 mAV o=V DD-3VSeg1Seg10,Seg12/Grid7低电平输出电流Iolgr 100 140 - mAV o=0.3VGrid1Grid6,Seg12/Grid7低电平输出电流Ioldout 4 - - mA V o=0.4VSeg高电平输出电流容限Itolsg - - ±5 %V o=V DD-3VSeg1Seg10,Seg12/Grid7高电平输入电压Vih 0.8V DD- 5 V -低电平输入电压Vil 0 - 0.3V DD V - 振荡器频率Fosc 300 500 650 kHz Rosc=51kΩKey1Key2下拉电阻Rkn 40 - 100 kΩKey1Key2 V DD=5V1 在Vdd 与Gnd 之间的0.1µF 电容在布局时越靠近芯片效果越好2 特别建议将NC 脚与Gnd 相联。
单片机数码管动态显示

动态显示1.掌握LED数码管显示及其一般电路结构;2.掌握LED动态显示程序的一般设计方法。
一、实验内容动态显示,也称为扫描显示。
显示器由6个共阴极LED数码管构成。
单片机的P0口输出显示段码,由一片74LS245输出给LED管;由P1口输出位码,经74LS04输出给LED显示。
二、实验步骤1、打开Proteus ISIS编辑环境,按下表所列的元件清单添加元件。
图1 动态显示实验电路原理图2、按实验要求在KeilC中创建项目,编辑、编译程序。
3、将编译生成的目标码文件(后缀为.Hex)传入Proteus的实验电路中。
4、在Proteus ISIS仿真环境中运行程序,观察实验运行结果并记录。
三、实验要求1.编写一显示程序显示201071;2.显示特殊字符good;3.调整软件延时子程序的循环初值,逐渐加大每一位LED点亮的时间,观察程序运行结果。
四、参考程序dbuf equ 30h ;置存储区首址temp equ 40h ;置缓冲区首址org 00hmov 30h,#2 ;存入数据mov 31h,#0mov 32h,#1mov 33h,#0mov 34h,#7mov 35h,#1mov r0,#dbufmov r1,#tempmov r2,#6 ;六位显示器mov dptr,#segtab ;段码表首地址dp00: mov a,@r0 ;取要显示的数据movc a,@a+dptr ;查表取段码mov @r1,a ;段码暂存inc r1inc r0djnz r2,dp00disp0: mov r0,#temp ;显示子程序mov r1,#6 ;扫描6次mov r2,#01h ;从第一位开始dp01: mov a,@r0mov p0,a ;段码输出mov a,r2 ;取位码mov p1,a ;位码输出acall delay ;调用延时mov a,r2rl amov r2,ainc r0djnz r1,dp01sjmp disp0segtab: db 3fh,06h,5bh,4fh,66hdb 6dh,7dh,07h,7fh,6fhdelay: mov r4,#03h ;延时子程序aa1: mov r5,0ffhaa: djnz r5,aadjnz r4,aa1retend实验原理MCS-51单片机内设置了两个可编程的16位定时器T0和T1,通过编程,可以设定为定时器和外部计数方式。
百分之一秒计时器设计

第1章秒计时器总体设计课程设计是单片机课程教学的最后一个环节,是对学生进行全面的系统的训练。
进行课程设计可以让学生把学过的比较零碎的知识系统化,真正的能够把学过的知识落到实处,能够开发简单的系统,也进一步激发了学生再深一步学习的热情,因此课程设计是必不少的,是非常必要的。
1.1 设计目的设计目的1.单片机的基本原理及相关的简单应用。
2.掌握用单片机设计系统的一般步骤。
3.了解LED数码管的基本知识和驱动方法。
4.掌握单片机系统各个组成部分的作用以及分布位置。
5.学会运用单片机的硬件资源。
1.2 设计任务和要求任务和要求任务:用AT89S51单片机和中小规模集成芯片设计1/100秒计时器要求:1. 计时精度 10-2秒。
2. 6位数码显示,分别表示分、秒、1/10秒、1/100秒。
3. 有两个按键分别控制秒表的归零、停止。
4. 用汇编语言编程,用proteus仿真。
1.3 总体设计方案1.硬件设计方案方案:该系统采用51系列单片机AT89C51作为控制核心,该系统可以完成运算控制、信号识别以及显示功能的实现。
由于用了单片机,使其技术比较成熟,应用起来方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。
整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改。
MCS-51单片机特点如下:(1)可靠性好:单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的CPU,程序指令和数据都可以写在ROM里,许多信号通道都在同一芯片,因此可靠性高、易扩充。
(2)单片机有一般电脑所必须的器件,如三态双向总线,串并行的输入及输出引脚,可扩充为各种规模的微电脑系统。
(3)控制功能强:单片机指令除了输入输出指令,逻辑判断指令外还有更丰富的条件分支跳跃指令。
其原理框图如图1.1所示:图1.1 硬件设计原理框图2.软件设计方案通过汇编语言编写程序来实现设计任务与要求,总体设计方案图如图1.2所示:图1.2 软件设计原理框图第2章单片机应用系统简介单片机的应用系统随着用途不同,它们的硬件和软件结构差别很大,但系统设计的方法和步骤基本上是相同的。
LED显示屏原理详细解析(用到的芯片74HC138、74HC245、74HC595、4953、TB62726、JXI5020等芯片功能详解)

74HC245简介:总线驱动器,典型的TTL型三态缓冲门电路。
由于单片机等CPU的数据/地址/控制总线端口都有一定的负载能力,如果负载超过其负载能力,一般应加驱动器。
另外,也可以使用74HC244等其他电路,74HC244比74HC245多了锁存器。
74HC245实物图:74HC245引脚定义:第1脚DIR,为输入输出端口转换用,DIR=“1”高电平时信号由“A”端输入“B”端输出,DIR=“0”低电平时信号由“B”端输入“A”端输出。
第2-9脚“A”信号输入输出端,A1=B1、、、、、、A8=B8,A1与B1是一组,如果DIR=“1”OE=“0”则A1输入B1输出,其它类同。
如果DIR=“0”OE=“0”则B1输入A1输出,其它类同。
第11-18脚“B”信号输入输出端,功能与“A”端一样,不再描述。
第19脚OE,使能端,若该脚为“1”A/B端的信号将不导通,只有为“0”时A/B端才被启用,该脚也就是起到开关的作用。
第10脚GND,电源地。
第20脚VCC,电源正极。
TRUTH TABLE真值表Control Inputs 控制输入Operation 运行G DIRL L B 数据到A 总线L H A 数据到B 总线H X 隔开H=高电平 L=低电平×=不定Absolute Maximum Ratings绝对最大额定值Supply Voltage电源电压(VCC) -0.5 to -7.0V DC Input Voltage DIR and G pins (VIN) 直流输入电压方向和G引脚(输入电压)-1.5 to VCC -1.5V DC Input/Output Voltage (VIN, VOUT)直流输入/输出电压-0.5 to VCC -0.5V Clamp Diode Current 钳位二极管电流(ICD) ±20 mA DC Output Current直流输出电流,每个引脚(输出)±35 mA DC VCC or GND Current, per pin (ICC) ±70 mA Storage Temperature Range 储存温度范围(TSTG) -65℃ to -150℃Power Dissipation (PD)功耗(Note 3) 600 mW S.O. Package only 500 mW Lead Temperature (TL) (Soldering 10 seconds) 260℃【74HC245的作用:信号功率放大。
单片机控制数码管动态扫描显示原理

P02 P03 P04 P05 P06
11 P01
P00
7 4 2 110
3
a b c d e f g dp
DPY
a
a
a
a
f g bf g bf g bf g b
e
ce
ce
ce
c
d
d
d
d
dp
dp
dp
dp
DPY 4 -LED
P20 P21 6 C0 P22 8 C2 P23 9 C3
12 C4
LED
U1
一、工作方式寄存器TMOD
工作方式寄存器TMOD用于设置定时/计数器的 工作方式,低四位用于T0,高四位用于T1。其格式 如下:
GATE:门控位。GATE=0时,只要用软件使TCON中的 TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时, 要用软件使TR0或TR1为1,同时外部中断引脚INT0/1也为 高电平时,才能启动定时/计数器工作。即此时定时器的启 动条件,加上了INT0/1引脚为高电平这一条件。
VCC GND RXD TXD ALE/ P PSEN
40 20 10 11 30 29
P 14 P 15 P 16 P 17
8 K9 C K13
9 K10 D K14
A K11 E K15
B F
动态显示
动态显示的特点是将所有位数码管的段选线并联在 一起,由位选线控制是哪一位数码管有效。这样一来, 就没有必要每一位数码管配一个锁存器,从而大大地简 化了硬件电路。选亮数码管采用动态扫描显示。所谓动 态扫描显示即轮流向各位数码管送出字形码和相应的位 选,利用发光管的余辉和人眼视觉暂留作用,使人的感 觉好像各位数码管同时都在显示。动态显示的亮度比静 态显示要差一些,所以在选择限流电阻时应略小于静态 显示电路中的。
利用74LS164芯片扩展8位LED串行显示接口电路

集中实践报告书课题名称 利用74LS164芯片扩展8位LED 串行显示接口电路姓 名 学 号 系、 部 专业班级 指导教师※※※※※※※※※ ※※ ※※ ※※※※※※※※※※※年月日利用74LS164芯片扩展8位LED串行显示接口电路一、设计目的利用74LS164芯片扩展8位LED串行显示。
学习和掌握单片机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。
通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。
二、设计要求1. 要求将片内30H-37H单元中数据,8个数码管,用扩展串行的显示端口显示出来。
2. 要求做出实物。
三、硬件电路设计74LS164是串行输入并行输出的移位寄存器,每接一片74LS164可扩展一个8位并行输出口,可以作为LED显示器的8根段选线。
实物如图3-1所示。
系统总电路原理图如图3-2,为89C52单片机最小系统与8位数码管的连接图,分别用8个74LS164和8个LED数码管。
部分硬件电路原理图如图3-3所示。
图3-1 电路连接实物图图3-2 总电路原理图图3-3 部分硬件电路原理图数码管中有8段LED数码管显示器由8个发光二极管组成。
LED数码管显示器有两种不一样的形式:一种是8个发光二极管的阳极都连在一起的,称之为共阳极LED数码管显示器;另一种是8个发光二极管的阴极都连在一起的,称之为共阴极LED数码管显示器。
本次设计采用共阳极LED数码管。
在单片机应用系统中,数码管显示器显示常用两种办法:静态显示和动态扫描显示。
所谓静态显示,就是每一个数码管显示器都要占用单独的具有锁存功能的I/O接口用于笔划段字形代码。
这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码,因此,使用这种办法单片机中CPU的开销小。
单片机课程设计--+16x16点阵LED电子显示屏的设计

单片机课程设计-- 16x16点阵LED电子显示屏的设计第一章系统总体方案设计LED驱动显示采用动态扫描方法, 动态扫描方式是逐行轮流点亮, 这样扫描驱动电路就可以实现多行的同名列共用一套列驱动器。
以16×16点阵为例, 把所有同一行的发光管的阳极连在一起, 把所有同一列的发光管的阴极连在一起(共阳的接法), 先送出对应第1行发光管亮灭的数据并锁存, 然后选通第1行使其燃亮一定的时间, 然后熄灭;再送出第2行的数据并锁存, 然后选通第2行使其燃亮相同的时间, 然后熄灭;…第16行之后, 又重新燃亮第1行, 反复轮回。
当这样轮回的速度足够快(每秒24次以上), 由于人眼的视觉暂留现象, 就能看到显示屏上稳定的图形。
该方法能驱动较多的LED, 控制方式较灵活, 而且节省单片机的资源。
显示数据传输采用串行传输的方法, 控制电路可以只用一根信号线, 将列数据一位一位传往列驱动器, 在硬件方面无疑是十分经济的。
但串行传输过程较长, 数据按顺序一位一位地输出给列驱动器, 只有当一行的各列数据都已传输到位之后, 这一行的各列才能并行地进行显示。
对于串行传输方式来说, 列数据准备时间可能相当长, 在行扫描周期确定的情况下, 留给行显示的时间就太少了, 以致影响到LED的亮度。
采用串行传输中列数据准备和列数据显示的时间矛盾, 可以采用重叠处理的方法。
即在显示本行各列数据的同时, 传送下一行的列数据。
为了达到重叠处理的目的, 列数据的显示就需要有锁存功能。
对于列数据准备来说, 它应能实现串入并出的移位功能。
这样, 本行已准备好的数据打入并行锁存器进行显示时, 串行移位寄存器就可以准备下一行的列数据, 而不会影响本行的显示。
系统框图如图一图一点阵显示器硬件系统框图第二章系统硬件电路的设计硬件电路大致上可以分为单片机系统及外围电路、列驱动电路和行驱动电路三部分。
一. 单片机系统及外围电路单片机采用89C51或更高频率的晶振, 以获得较高的刷新频率, 使得显示更稳定。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
串行口动态扫描显示电路单片机并行I/O口数量总是有限的,有时并行口需作其他更重要的用途,一般也不会用数量众多的并行I/O口专门用来驱动显示电路,能否用80C51的串行通信口加上少量I/O及扩展芯片用于显示电路呢?答案是肯定的。
80C51的串行通信口是一个功能强大的通信口,而且是相当好用的通信口,用于显示驱动电路再合适不过了,下面我们就根据这种需要设计一个用两个串行通信口线加上两根普通I/O口,设计一个4位LED显示电路。
当然只要再加上两根I/O口线即可轻易实现8位LED的显示电路。
左图是电原理图,我们还是采用C2051单片机,同时用廉价易得的74LS164和74LS138作为扩展芯片。
74LS164(详细技术手册)是一个8位串入并出的移位寄存器,其此处的功能是将C2051串行通信口输出的串行数据译码并在其并口线上输出,从而驱动LED数码管。
74LS138是一个3-8译码器,它将单片机输出的地址信号译码后动态驱动相应的LED。
但74LS138电流驱动能力较小,为此,我们使用了未级驱动三极管2SA1015作为地址驱动。
将4只LED的段位都连在一起,它们的公共端则由74LS138分时选通,这样任何一个时刻,都只有一位LED 在点亮,也即动态扫描显示方式,其优点在上一节中我们已经阐述。
使用串行口进行LED通信,程序编写相当简单,用户只需将需显示的数据直接送串口发送缓冲器,等待串行中断即可,看看下面的程序。
程序清单ORG 0100HMOV SCON,#00H ;串行口工作方式MAIN: MOV R3,#00H ;字型码初始地址DJNZ R4,DELAY ;延时时间未到继续INC R3 ;显示下个字符CJNE R3,#0AH,LOOP ;示显示到9继续AJMP MAIN ;返回主程序DISPLAY:CLR P3.2CLR P3.3 ;选中第一位ACALL DISP ;显示ACALL DELAY1 ;延时10MSSETB P3.3 ;选中第二位ACALL DISPACALL DELAY1SETB P3.3 ;选中第三位SETB P3.2ACALL DISPACALL DELAY1SETB P3.2 ;选中第四位SETB P3.3ACALL DISPACALL DELAY1RETDISP: MOV A,R3MOV DPTR,#TABLEMOVC A,@A+DPTR ;查表MOV BUFF,A ;送发送缓冲器VAIT: JNB TI,WAIT ;等待串行中断CLR TI ;清中断标志RETDELAY1: MOV R6,#10H ;延时子程序LOOP1: MOV R7,#38HLOOP2: DJNZ R7,LOOP2DJNZ R6,LOOP1RETTABLE: DB 0C0H,0F9H,0A4H,0B0H,99HDB 92H,82H,0F8H,80H,90HEND ;源程序结束动态扫描LED显示电路上一节我们讲述了单只LED与单片机的接口电路及编程实例,目的在于让初学者了解LED在单片机中的应用原理,单只LED显示在实际应用中并无多大用途,一般都是多位的LED显示。
现在我们作进一步学习,我们要讲解的是8位LED的显示原理及实际的编程方法。
这里我们没有采用多I/O口的8051系列单片机,而是采用了完全兼容C51指令系统的质优价廉的AT89C2051单片机,它的软件编程与C51完全一致。
在多数的应用场合中,我们并不希望使用多I/O端口的单片机,原则上是使用尽量少引脚的器件。
在没有富余端口的情况下,怎样通过扩展电路达到预期的目的呢?我们希望通过此例使设计人员在实际应用中了解一点电路扩展的原理,对实际的应用有所帮助。
左图是显示电路,由于AT89C2051外部15个I/O引脚,即P1口和P3口,单P3口的P3.6是不引出的,15个I/O口要直接驱动8位LED显然是不够的,我们通过一片面74LS273对地址进行锁存,如果P1口仅用于显示驱动,而没有与其它外设进行数据交换,可省略这个锁存器,直接或通过其他驱动电路驱动连接LED。
地址线我们通过一片74LS138三—八译码器对8位LED进行分时选通,这样在任一时刻,只有一位LED是点亮的,但只要扫描的频率足够高(一般大于25Hz),由于人眼的视觉暂留特性,直观上感觉却是连续点亮的,这就是我们常说的动态扫描电路。
此电路中,74LS273用于驱动LED的8位段码,8位LED相应的"a"—"g"段连在一起,它们的公共端分别连至由74LS138(点击芯片型号可浏览其详细的技术手册)译码选通后经74LS04反相驱动的输出端。
这样当选通某一位LED 时,相应的地址线(74LS04输出端)输出的是高电平,所以我们的LED选用共阳LED数码管。
动态扫描的频率有一定的要求,频率太低,LED将出现闪烁现象。
如频率太高,由于每个LED点亮的时间太短,LED的亮度太低,肉眼无法看清,所以一般均取几个ms左右为宜,这就要求在编写程序时,选通某一位LED使其点亮并保持一定的时间,程序上常采用的是调用延时子程序。
在C51指令中,延时子程序是相当简单的,并且延时时间也很容易更改,可参见程序清单中的DELAY延时子程序。
为简单起见,我们只是编写了8位LED同步显示"00000000"—"11111111"直到"99999999"数字,并且反复循环。
程序很简单,流程图略去。
程序清单:ORG 0100HMAIN: MOV R3,#00H ;字型码初始地址LOOP: MOV DPRT,#TABLE ;字型码送数据指针MOV A,R3MOV A,@A+DPTRMOV P1,A ;送显示MOV R4,#0E8H ;循环显示某个字符1SDELAY: ACALL DISPLAY ;显示DJNZ R4,#DELAY ;延时显示时间示到继续INC R3 ;显示下个字符CJNE R3,#0AH,LOOP ;示显示到9续续AJMP MAIN ;返回主程序DISPLAY:MOV R1,#08H ;共显示8位LEDMOV R5,#00H ;从第一位开始显示DISP: MOV A,R5MOV P3,A ;送地址数据ACALL DELAY1 ;送位显示15MSINC R5 ;指向下一位LEDDJNZ R1,DISP ;8位未显示完继续RETDELAY1: MOV R6,#10H ;延时子程序LOOP1: MOV R7,#38HLOOP2: DJNZ R7,LOOP2DJNZ R6,LOOP1RETTABLE: DB 0C0H,0F9H,0A4H,0B0H,99HDB 92H,82H,0F8H,80H,90HEND ;程序结束单片机键盘接口程序设计键盘是由若干按钮组成的开关矩阵,它是单片机系统中最常用的输入设备,用户能通过键盘向计算机输入指令、地址和数据。
一般单片机系统中采和非编码键盘,非编码键盘是由软件来识别键盘上的闭合键,它具有结构简单,使用灵活等特点,因此被广泛应用于单片机系统。
按钮开关的抖动问题组成键盘的按钮有触点式和非触点式两种,单片机中应用的一般是由机械触点组成的。
在下图中,当开<键盘结构图>图1图2关S未被按下时,P1。
0输入为高电平,S闭合后,P1。
0输入为低电平。
由于按钮是机械触点,当机械触点断开、闭合时,会有抖动动,P1。
0输入端的波形如图2所示。
这种抖动对于人来说是感觉不到的,但对计算机来说,则是完全能感应到的,因为计算机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级,对计算机而言,这已是一个“漫长”的时间了。
前面我们讲到中断时曾有个问题,就是说按钮有时灵,有时不灵,其实就是这个原因,你只按了一次按钮,可是计算机却已执行了多次中断的过程,如果执行的次数正好是奇数次,那么结果正如你所料,如果执行的次数是偶数次,那就不对了。
为使CPU能正确地读出P1口的状态,对每一次按钮只作一次响应,就必须考虑如何去除抖动,常用的去抖动的办法有两种:硬件办法和软件办法。
单片机中常用软件法,因此,对于硬件办法我们不介绍。
软件法其实很简单,就是在单片机获得P1。
0口为低的信息后,不是立即认定S1已被按下,而是延时10毫秒或更长一些时间后再次检测P1。
0口,如果仍为低,说明S1的确按下了,这实际上是避开了按钮按下时的抖动时间。
而在检测到按钮释放后(P1。
0为高)再延时5-10个毫秒,消除后沿的抖动,然后再对键值处理。
不过一般情况下,我们常常不对按钮释放的后沿进行处理,实践证明,也能满足一定的要求。
当然,实际应用中,对按钮的要求也是千差万别,要根据不一样的需要来编制处理程序,但以上是消除键抖动的原则。
键盘与单片机的连接<键盘连接> 图3 <单片机与键盘接口图> 图41、通过1/0口连接。
将每个按钮的一端接到单片机的I/O口,另一端接地,这是最简单的办法,如图3所示是实验板上按钮的接法,四个按钮分别接到P3.2 、P3.3、P3.4和P3.5。
对于这种键各程序能采用持续查询的办法,功能就是:检测是否有键闭合,如有键闭合,则去除键抖动,判断键号并转入对应的键处理。
下面给出一个例程。
其功能很简单,四个键定义如下:P3.2:开始,按此键则灯开始流动(由上而下)P3.3:停止,按此键则停止流动,所有灯为暗P3.4:上,按此键则灯由上向下流动P3.5:下,按此键则灯由下向上流动UpDown EQU 00H ;上下行标志StartEnd EQU 01H ;起动及停止标志LAMPCODE EQU 21H ;存放流动的数据代码ORG 0000HAJMP MAINORG 30HMAIN:MOV SP,#5FHMOV P1,#0FFHCLR UpDown ;启动时处于向上的状态CLR StartEnd ;启动时处于停止状态MOV LAMPCODE,#0FEH ;单灯流动的代码LOOP:ACALL KEY ;调用键盘程序JNB F0,LNEXT ;如果无键按下,则继续ACALL KEYPROC ;不然调用键盘处理程序LNEXT:ACALL LAMP ;调用灯显示程序AJMP LOOP ;反复循环,主程序到此结束DELAY:MOV R7,#100D1: MOV R6,#100DJNZ R6,$DJNZ R7,D1RET;----------------------------------------延时程序,键盘处理中调用KEYPROC:MOV A,B ;从B寄存器中获取键值JB ACC.2,KeyStart ;分析键的代码,某位被按下,则该位为1(因为在键盘程序中已取反)JB ACC.3,KeyOverJB ACC.4,KeyUpJB ACC.5,KeyDownAJMP KEY_RETKeyStart:SETB StartEnd ;第一个键按下后的处理AJMP KEY_RETKeyOver:CLR StartEnd ;第二个键按下后的处理AJMP KEY_RETKeyUp: SETB UpDown ;第三个键按下后的处理AJMP KEY_RETKeyDown:CLR UpDown ;第四个键按下后的处理KEY_RET:RETKEY:CLR F0 ;清F0,表示无键按下。