单片机硬件实习LED点阵显示.docx
《单片机硬件实习LED点阵显示.docx》由会员分享,可在线阅读,更多相关《单片机硬件实习LED点阵显示.docx(29页珍藏版)》请在冰豆网上搜索。
![单片机硬件实习LED点阵显示.docx](https://file1.bdocx.com/fileroot1/2022-12/30/7b5d35bc-6f64-4143-a803-722a15a13b61/7b5d35bc-6f64-4143-a803-722a15a13b611.gif)
单片机硬件实习LED点阵显示
目录
1.设计背景1
2.设计要求2
2.1设计内容2
2.2设计目的2
3.模块电路的介绍与分析2
3.18255可编程芯片介绍2
3.1.18255芯片的外部引脚3
3.1.28255的内部结构3
3.1.38255方式控制字4
3.2LED点阵及芯片介绍5
3.2.1MD1216C-RG介绍5
3.2.274LS374芯片介绍6
3.2.374LS273芯片介绍7
4.设计步骤8
4.1硬件设计8
4.1.1键盘扫描电路8
4.1.2点阵显示扫描电路9
4.2软件设计10
4.2.1软件设计程序流程图11
4.2.2软件设计程序代码及分析13
5.设计结果23
5.1设计效果23
5.2调试错误及处理情况23
6.设计心得24
参考文献25
1.设计背景
点阵LED显示器是把一些LED组合在同一个包装中,常见的规格有5*7,8*8,16*16等几种。
通常,若要显示阿拉伯数字、英文字母、特殊符号等,则可采用5*7的点阵即可够用,若要显示中文字,则需要4片8*8的点阵组成16*16的点阵显示器才能显示一个中文字。
LED电子显示屏是由几万--几十万个半导体发光二极管像素点均匀排列组成。
用不同的材料可以制造不同色彩的LED像素点。
目前应用最广的是红色、绿色、黄色。
而蓝色和纯绿色LED的开发已经达到了实用阶段。
LED是发光二极管英文LightEmittingDiode的简称,是六十年代末发展起来的一种半导体显示器件,七十年代,随着半导体材料合成技术、单晶制造技术和P-N结形成技术的研究进展,发光二极管在发光颜色、亮度等性能得以提高并迅速进入批量化和实用化。
进入八十年代后,LED在发光波长范围和性能方面大大提高,并开始形成平板显示产品即LED显示屏。
LED电子显示屏是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。
它是集微电子技术、光电子技术、计算机技术、信息处理技术于一体的显示系统,是目前国际上极为先进的显示媒体。
由于它具有发光效率高、使用寿命长、组态灵活、色彩丰富、工作性能稳定以及对室内室外环境适应能力强等优点而日渐成为显示媒体中的佼佼者。
在我国改革开放之后,特别是进入90年代国民经济高速增长,对公众场合发布信息的需求日益强烈,LED显示屏的出现正好适应了这一市场形势,因而在LED显示屏的设计制造技术与应用水平上都得到了迅速的提高,生产也得到了迅速的发展,并逐步形成产业,成为光电子行业的新兴产业领域。
LED显示屏经历了从单色、双色图文显示屏,到图像显示屏的发展过程。
随着信息产业的高速发展,LED显示屏作为信息传播的一种重要手段成为现代信息化社会的一个闪亮标志。
近年LED显示屏已广泛应用于室内、外需要进行服务内容和服务宗旨宣传的公众场所如银行、营业部、车站、机场、港口、体育场馆等信息的发布,政府机关政策、政令,各类市场行情信息的发部和宣传等。
目前,对于那些需要显示的信息量不是很大,分辨率不是很高,又需要制造成本相对比较低的场合,使用大、小屏幕LED点阵显示器是比较经济适用的,它可以用单片机控制实现显示字符、数字、汉字和简单图形,可以根据需要使用不同字号、字型。
汉字显示方式是先根据所需要的汉字提取汉字点阵(如16×16点阵),将点阵文件存入ROM,形成新的汉字编码。
而在使用时则需要先根据新的汉字编码组成语言,再由MCU根据新编码提取相应的点阵进行汉字显示。
具体显示技术和原理将会在正文中得到详细论述。
LED显示屏分为图文显示屏和视频显示屏,均由LED矩阵块组成。
图文显示屏可与计算机同步显示汉字、英文文本和图形;视频显示屏采用微型计算机进行控制,图文、图像并茂,以实时、同步、清晰的信息传播方式播放各种信息,还可显示二维、三维动画、录像、电视、VCD节目以及现场实况。
LED显示屏显示画面色彩鲜艳,立体感强,静如油画,动如电影,广泛应用于车站、码头、机场、商场、医院、宾馆、银行、证券市场、建筑市场、拍卖行、工业企业管理和其它公共场所。
LED显示屏可以显示变化的数字、文字、图形图像;不仅可以用于室内环境还可以用于室外环境,具有投影仪、电视墙、液晶显示屏无法比拟的优点。
LED之所以受到广泛重视而得到迅速发展,是与它本身所具有的优点分不开的。
这些优点概括起来是:
亮度高、工作电压低、功耗小、小型化、寿命长、耐冲击和性能稳定。
LED的发展前景极为广阔,目前正朝着更高亮度、更高耐气候性、更高的发光密度、更高的发光均匀性,可靠性、全色化方向发展。
2.设计要求
2.1设计内容
利用51单片机和LED点阵显示模块,来设计点阵显示的硬件电路,并编制相应程序,实现中英文字符的显示。
编制键盘扫描程序,将键值显示在LED显示器上.
2.2设计目的
(1)了解LED点阵显示的基本原理和实现方法。
(2)掌握点阵汉字库的编码和从标准字库中提取汉字编码的方法。
3.模块电路的介绍与分析
3.18255可编程芯片介绍
8255A是目前应用最广的可编程并行接口电路。
不可编程并行接口电路的特点是电路简单,使用方便。
但是,它们在硬件连接好了之后,功能就很难改变。
可编程并行接口电路的特点就在于使用灵活,可以在不改变硬件的情况下通过软件编程来改变芯片的功能。
图
3.18255引脚图
3.1.18255芯片的外部引脚
由图2.1可见,8255由以下几个部分组成:
数据端口A、B、C(其中,C口被分成C口上半部分和C口下半部分两个部分),A组和B组控制逻辑,数据总线缓冲器和读/写控制逻辑。
8255部包含3个8位的输入输出端口A、B和C,通过外部的24根输入输出线与外设交换数据或进行通信联络。
端口A和端口B都可以用作一个8位的输入口或8位的输出口,C口既可以作为一个8位的输入口或输出口用,又可作为两个4位的输入输出口(C口上半部分和C口下半部分)使用,还常常用来配合A口和B口工作,分别用来产生A口和B口的输出控制信号和输入A口和B口的端口状态信号。
表
3.18255各引脚功能
3.1.28255的内部结构
图3.28255内部结构
8255A在使用前要写入一个方式控制字,选择A、B、C三个端口各自的工作方式,共有三种;
方式0:
基本的输入输出方式,即无须联络就可以直接进行的I/O方式。
其中A、B、C口的高四位或低四位可分别设置成输入或输出。
方式1:
选通I/O,此时接口和外围设备需联络信号进行协调,只有A口和B口可以工作在方式1,此时C口的某些线被规定为A口或B口与外围设备的联络信号,余下的线只有基本的I/O功能,即只工作在方式0.
方式2:
双向I/O方式,只有A口可以工作在这种方式,该I/O线即可输入又可输出,此时C口有5条线被规定为A口和外围设备的双向联络线,C口剩下的三条线可作为B口方式1的联络线,也可以和B口一起方式0的I/O线8255A由数据总线缓冲器、读/写控制逻辑电路、A组和B组控制电路以及数据端口A、B和C组成。
数据总线缓冲器是8255A与系统数据总线的接口,CPU输入输出的数据、CPU输出的控制字和外设的状态信息都是通过这个缓冲器传送的。
读/写控制逻辑电路把CPU的控制命令或输出数据送至相应的端口,把外设的状态信息或输入数据通过相应的端口送至CPU。
数据端口PA和PB都包含一个8位输出锁存器/缓冲器和一个8位输入锁存器,PC口包含一个8位输出锁存器/缓冲器和一个8位输入缓冲器(不锁存输入信号)。
在工作方式1或方式2下,PC口分成高4位和低4位两个输入口作为PA和PB的控制信号输出或状态信号输入。
、A
、A
、
和
决定端口的地址。
3.1.38255方式控制字
①方式控制字
方式控制字决定端口A、B和C的工作方式。
图3.38255控制字
②按位操作控制字
端口C的任一位可用这个控制字来置位或复位。
图3.48255按位操作控制字
3.2LED点阵及芯片介绍
3.2.1MD1216C-RG介绍
图3.5MD1216C-RG分布
点阵显示模块的行输入线接至内部LED的阴极端,列输入线接至内部LED的阳极端(若阳极端输入为高电平,阴极端输入为低电平则该LED点亮)。
该实验模块使用74L374来控制行输入线的电平值。
将74LS374的某输出置0,则对应的LED阴极端被置0。
该模块使用74LS273来控制列输入线,并通过9013提供电流驱动。
将74LS273的某输出置1,则对应的LED阳极端被置高。
每次系统重新开启或总清后,74LS273输出为全0,LED显示被关闭。
3.2.274LS374芯片介绍
图3.674LS374引脚图
74LS374的输出端O0~O7可直接与总线相连。
当三态允许控制端OE为低电平时,O0~O7为正常逻辑状态,可用来驱动负载或总线。
当OE为高电平时,O0~O7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。
当时钟端CP脉冲上升沿的作用下,O随数据D而变由于CP端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善400mV。
D0~D7数据输入端
OE三态允许控制端(低电平有效)
CP时钟输入端
O0~O7输出端
图3.774LS374内部结构及真值表
简要说明:
374为具有三态输出的八D边沿触发器,共有54/74S374和54/74LS374两种线路结构型式,其主要电器特性的典型值如下(不同厂家具体值有差别):
型号fmPD54S374/74S374100MHz450mW,54LS374/74LS37450MHz135mW
3.2.374LS273芯片介绍
图3.874LS273引脚图及真值表
1脚是复位CLR,低电平有效,当1脚是低电平时,输出脚2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)全部输出0,即全部复位;当1脚为高电平时,11(CLK)脚是锁存控制端,并且是上升沿触发锁存,当11脚有一个上升沿,立即锁存输入脚3、4、7、8、13、14、17、18的电平状态,并且立即呈现在在输出脚2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)上.
4.设计步骤
4.1硬件设计
4.1.1键盘扫描电路
图4.18255键盘扫描原理图
CS8255接F228H,则命令字地址为F22BH,PA口地址为F228H,PB口地址为F229H,PC口地址为F22AH。
30模块中的短路套都套在8255侧。
PB口键盘作为入端口,PC口的PC.0和PC.1为输出口,一共十六个键,分别显示‘0’到‘9’十个数字,‘ABCDEF’六个英文字母。
4.1.2点阵显示扫描电路
图4.2LED显示模块及行扫描电路
图4.3列扫描电路
图4.4地址译码电路
图4.5系统框图
本实验模块使用1块MD1216C-RG(共阳极)组成16×16点阵,以满足汉字显示的要求。
为了方便的控制四个单元,使用了一片74LS139译码,产生四个地址片选信号:
CLKC1=CSLED,CLKC2=CSLED+1,用于列控制的两片74LS273;CLKR1=CSLED+2,CLKR2=CSLED+3,用于行控制的两片74LS374。
LED模块的CSLED接F200H。
4.2软件设计
4.2.1软件设计程序流程图
图4.5主程序流程图
主程序主要是对8255进行初始化,8255初始化为PB口输入,PC口低四位和高四位均为输出。
初始值为82H。
将10000010B写入8255控制字,设置PA、PC口为输出口,PB口为输入口。
PB输入的为键盘相应键的键值,PC口所输出的是扫描的是哪一行。
然后对点阵显示屏进行清零,队列清零要给列端口送00H,因为列为74LS273控制,接LED灯的阳极端,送入0,LED阳极低电平,LED灯不亮,对行清零,则给行端口送入0FFH,因为74LS374控制行,接LED灯的阴极,送入0FFH则阴极高电平,LED灯不亮。
之后进入等待按键的循环程序,一旦有键按下,马上消除抖动在判断,也就是先调用一个延时子程序,再判断传入的PB口数据是不是比0FF小,如果比0FF小,则没有键按下,返回主程序。
如果确实有键按下,则进入键盘扫描和功能子程序,传入的数据是8255的PB口的数据。
图4.6键盘扫描流程图
在子程序中进行对键值的精确判断,也就是通过把PB口传进来的数据送给累加器ACC,立即数00H送给R0,若扫描的是第二行,就把08H送给R0。
对累加器进行带进位的右移,并判断进位标志Cy的值,如果值为1,那么R0加1,如果R0为零,则说明找到了被按下的键的标号,也就是R0里面存的数字,就可以跳转到相应的按键功能程序处,把对应要显示字型的表首地址传给DPTR,由于显示子程序要传入的是字型编码表的表首地址,是16位地址,所以要先把DPH和DPL的内容分别送入30H和31H存储起来,随即进入显示子程序。
图4.7显示程序流程图
显示子程序的传入参数是需要在点阵上显示的字型的表首地址,这时候就可以从30H和31H中得到。
显示好后,返回程序,再继续等待按键。
4.2.2软件设计程序代码及分析
;FOReat598
;*********LED点阵显示示例程序***********************
C8255EQU0F22BH;8255命令口地址
P8255AEQU0F228H;8255PA口地址
P8255BEQU0F229H;8255PB口地址
P8255CEQU0F22AH;8255PC口地址
CSLEDEQU0F200H
CSc1EQUCSLED;列1~8273
CSc2EQUCSLED+1H;列9~16273
CSr1EQUCSLED+2H;行1~8374
CSr2EQUCSLED+3H;行9~16374
ORG0000H
LJMPSTART
ORG0040H
START:
MOVSP,#60H
MOVDPTR,#C8255
MOVA,#82H;PB口输入,PA,PC口输出
MOVX@DPTR,A
LCALLCLEAN
CLEAN:
MOVA,#0H;关闭LED列显示
MOVDPTR,#CSc1
MOVX@DPTR,A
MOVDPTR,#CSc2
MOVX@DPTR,A
MOVA,#0FFH;关闭LED行显示
MOVDPTR,#CSr1
MOVX@DPTR,A
MOVDPTR,#CSr2
MOVX@DPTR,A
MOVR2,#50
MOVR3,#5
MOVR0,#0
MOVDPTR,#TAB_KWO
MOV30H,DPH
MOV31H,DPL
LOOP:
ACALLRD_KB
L:
DJNZR2,LL
MOVR2,#50
MOVA,31H
CLRC
ADDA,#32
MOV31H,A
MOVA,30H
ADDCA,#0
MOV30H,A
DJNZR3,LL
MOVR3,#5
MOVDPTR,#TAB_KWO
MOV30H,DPH
MOV31H,DPL
LL:
ACALLDISPLAY
SJMPLOOP
KB_DIS:
LCALLRD_KB;读键子程序
SJMPKB_DIS;循环扫描
RD_KB:
MOVA,#02H;键盘扫描第一行
MOVDPTR,#P8255C
MOVX@DPTR,A
MOVDPTR,#P8255B
MOVXA,@DPTR
CJNEA,#0FFH,KEY_L0;判键是否按下,有键转KEY_L0
SJMPKEY_L1;无键转第二行
KEY_L0:
LCALLDELAY;延时消抖
MOVDPTR,#P8255B;读键值
MOVXA,@DPTR
MOVR1,#00H
CJNEA,#0FFH,KEYCAL;计算键值
KEY_L1:
MOVA,#01H;扫描第二行
MOVDPTR,#P8255C
MOVX@DPTR,A
MOVDPTR,#P8255B
MOVXA,@DPTR
CJNEA,#0FFH,J_KEY_L1;判键是否按下,有键转J_KEY_L1
LJMPNOKEY
J_KEY_L1:
LCALLDELAY;延时消抖
MOVDPTR,#P8255B;读键值
MOVXA,@DPTR
MOVR1,#08H
CJNEA,#0FFH,KEYCAL;计算键值
LJMPNOKEY
KEYCAL:
;计算键码
MOVR0,#08H
SHIFT:
RRCA
JNCCALC
INCR1
DJNZR0,SHIFT
CALC:
CLRC;换算显示码
MOVA,R1
CJNEA,#01H,K0
K0:
JCKEY_0_1
CJNEA,#02H,K1
K1:
JCKEY_1_1
CJNEA,#03H,K2
K2:
JCKEY_2_1
CJNEA,#04H,K3
K3:
JCKEY_3_1
CJNEA,#05H,K4
K4:
JCKEY_4_1
CJNEA,#06H,K5
K5:
JCKEY_5_1
CJNEA,#07H,K6
K6:
JCKEY_6_1
CJNEA,#08H,K7
K7:
JCKEY_7_1
CJNEA,#09H,K8
K8:
JCKEY_8_1
CJNEA,#0AH,K9
K9:
JCKEY_9_1
CJNEA,#0BH,KA
KA:
JCKEY_A_1
CJNEA,#0CH,KB
KB:
JCKEY_B_1
CJNEA,#0DH,KC
KC:
JCKEY_C_1
CJNEA,#0EH,KD
KD:
JCKEY_D_1
CJNEA,#0FH,KE
KE:
JCKEY_E_1
CJNEA,#10H,KF
KF:
JCKEY_F_1
LJMPNOKEY
KEY_0_1:
LJMPKEY_0;跳转到相应的功能键
KEY_1_1:
LJMPKEY_1
KEY_2_1:
LJMPKEY_2
KEY_3_1:
LJMPKEY_3
KEY_4_1:
LJMPKEY_4
KEY_5_1:
LJMPKEY_5
KEY_6_1:
LJMPKEY_6
KEY_7_1:
LJMPKEY_7
KEY_8_1:
LJMPKEY_8
KEY_9_1:
LJMPKEY_9
KEY_A_1:
LJMPKEY_A
KEY_B_1:
LJMPKEY_B
KEY_C_1:
LJMPKEY_C
KEY_D_1:
LJMPKEY_D
KEY_E_1:
LJMPKEY_E
KEY_F_1:
LJMPKEY_F
KEY_0:
MOVDPTR,#SZ0
MOV30H,DPH
MOV31H,DPL
LJMPKEYWAIT
KEY_1:
MOVDPTR,#SZ1
MOV30H,DPH
MOV31H,DPL
LJMPKEYWAIT
KEY_2:
MOVDPTR,#SZ2
MOV30H,DPH
MOV31H,DPL
LJMPKEYWAIT
KEY_3:
MOVDPTR,#SZ3
MOV30H,DPH
MOV31H,DPL
LJMPKEYWAIT
KEY_4:
MOVDPTR,#SZ4
MOV30H,DPH
MOV31H,DPL
LJMPKEYWAIT
KEY_5:
MOVDPTR,#SZ5
MOV30H,DPH
MOV31H,DPL
LJMPKEYWAIT
KEY_6:
MOVDPTR,#SZ6
MOV30H,DPH
MOV31H,DPL
LJMPKEYWAIT
KEY_7:
MOVDPTR,#SZ7
MOV30H,DPH
MOV31H,DPL
LJMPKEYWAIT
KEY_8:
MOVDPTR,#SZ8
MOV30H,DPH
MOV31H,DPL
LJMPKEYWAIT
KEY_9:
MOVDPTR,#SZ9
MOV30H,DPH
MOV31H,DPL
LJMPKEYWAIT
KEY_A:
MOVDPTR,#SZA
MOV30H,DPH
MOV31H,DPL
LJMPKEYWAIT
KEY_B:
MOVDPTR,#SZB
MOV30H,DPH
MOV31H,DPL
LJMPKEYWAIT
KEY_C:
MOVDPTR,#SZC
MOV30H,DPH
MOV31H,DPL
LJMPKEYWAIT
KEY_D:
MOVDPTR,#SZD
MOV30H,DPH
MOV31H,DPL
LJMPKEYWAIT
KEY_E:
MOVDPTR,#SZE
MOV30H,DPH
MOV31H,DPL
LJMPKEYWAIT
KEY_F:
MOVDPTR,#SZF
MOV30H,DPH
MOV31H,DPL
LJMPKEYWAIT
NOKEY:
SJMPKEYEXIT
KEYWAIT:
LCALLDISPLAY
MOVDPTR,#P8255B;等待键释放
MOVXA,@DPTR
CJNEA,#0FFH,KEYWAIT
MOVDPTR,#TAB_KWO
MOV30H,DPH
MOV31H,DPL
KEYEXIT:
LCALLDISPLAY
RET
DISPLAY:
MOVR5,#00H;设定汉字表格初始值
MOVR4,#01H;设定列扫描初始值,从第一列开始
DISP:
MOVA,R5
RLACC
MOVDPH,30H
MOVDPL,31H;此处设定所要显示的字符
MOVCA,@A+DPTR
CPLACC;代码取反,决定显示的阴阳
MOVDPTR,#CSR1
MOVX@DPTR,A
MOVA,R5
RLACC
INCACC
MOVDPH,30H;此处设定所要显示的字符
MOVDPL,31H
MOVCA,@A+DPTR
CPLACC
MOVDPTR,#CSr2