单片机x点阵设计Word文件下载.docx
《单片机x点阵设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机x点阵设计Word文件下载.docx(22页珍藏版)》请在冰点文库上搜索。
课程设计说明书第20页
1绪论
1.1课题描述
单片微型计算机(single
chip
microcomputer)简称单片机,它是为各类专用控制器而设计的通用或专用微型计算机系统,高密度集成了普通计算机微处理器,一定容量的RAM和ROM以及输入/输出接口,定时器等电路于一块芯片上构成的[1]。
单片机自20世纪70年代问世以来,以极其高的性价比受到人们的重视和关注,所以应用很广,发展很快。
单片机的优点是体积小、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易[2]。
在现代工业控制和一些智能化仪器仪表中,越来越多的场所需要用点阵图形显示器显示汉字,汉字显示屏也广泛应用到汽车报站器,广告屏等。
所以研究LED显示有实用的意义。
汉字显示方式是先根据所需要的汉字提取汉字点阵(如16×
16
点阵),将点阵文件存入ROM,形成新的汉字编码;
而在使用时则需要先根据新的汉字编码组成语句,再由MCU根据新编码提取相应的点阵进行汉字显示。
不论显示图形还是文字,都是控制与组成这些图形或文字的各个点所在位置相对应的LED器件发光。
通常事先把需要显示的图形文字转换成点阵图形,在按照显示控制的要求以一定的格式形成显示数据。
对于只控制通断的图文显示屏来说,每个LED发光器件占据数据中的1位(1bit),在需要该LE
D器件发光的数据中相应的位填1,否则填0。
当然,根据控制电路的安排,相反的定义同样时可行的。
这样依照所需显示的图形文字,按显示屏的各行各列逐点填写显示数据,就可以构成一个显示数据文件。
显示图形的数据文件,其格式相对自由,只要能够满足显示控制的要求即可。
文字的点阵格式比较规范,可以采用现行计算机通用的字库字模。
组成一个字的点阵,其大小也可以有16×
16、24×
24、32×
32、48×
48等不同规格[3]。
用点阵方式构成图形或文字,是非常灵活的,可以根据需要任意组合和变化,只要设计好合适的数据文件,就可以得到满意的显示效果。
因而采用点阵式图文显示屏显示经常需要变化的信息,是非常有效的。
1.2基本工作原理及框图
LED点阵总体框图如图1所示,点阵电路大体上可以分成微机本身的硬件、显示驱动电路、控制信号电路三部分。
控制电路部分包括一个51CUP和一些外围电路。
在整个电路当中此控制电路部分相当于一个上位机,它负责控制整个电路以及相应的程序的运行、与PC机的串行通讯、以及给屏体电路部分发送命令。
点阵显示屏体、以及它的行和列的各个驱动电路。
由于两部分的电路在制板时可以放到一起,所以可以将其字库放到控制电路部分使用串行通讯方式来与屏体电路部分进行数据和命令的传送。
此显示电路采用扫描方式进行显示时,每行有一个行驱动器,各行的同名列共用一个列驱动器。
由行译码器给出的行选通信号,从第一行开始,按顺序依次对各行进行扫描(把该行与电源的一端接通)。
另一方而,根据各列锁存的数据,确定相应的列驱动器是否将该列与电源的另一端接通。
接通的列,就在该行该列点燃相应的LED;
未接通的列所对应的LED熄灭。
单片机
列驱动器
行驱动器
LED显示点阵
电源
图1点阵显示总体框图
2相关芯片及硬件电路设计
单片机(Microcontroller,又称微处理器)是在一块硅片上集成了各种部件的微型机,这些部件包括中央处理器CPU、数据存储器RAM、程序存储器ROM、定时器/计数器和多种I/O接口电路。
AT89C51单片机的基本结构见图2
图251单片机内部结构
51是MCS-51系列单片机的一个产品。
MCS-51系列单片机是Intel公司推出的通用型单片机,51单片机系列指的是MCS-51系列和其他公司的51衍生产品。
这些衍生品是在基本型基础上增强了各种功能的产品。
这些产品给8位单片机注入了新的活力,给它的开发应用开拓了更广泛的前景。
51系列的内部结构可以划分为CPU、存储器、并行口、串行口、定时器/计数器、中断逻辑几部分。
(1)中央处理器
51的中央处理器由运算器和控制逻辑构成,其中包括若干特殊功能寄存器(SFR)。
算术逻辑单元ALU能对数据进行加、减、乘、除等算术运算;
“与”、“或”、“异或”等逻辑运算以及位操作运算。
PSW的格式如下所示,其各位的含义是:
表1PSW寄存器各位的含义
D7
D6
D5
D4
D3
D2
D1
D0
CY
AC
F0
RS1
RS0
OV
P
CY:
进位标志。
有进位/错位时CY=1,否则CY=0。
AC:
半进位标志。
当D3位向D4位产生进位/错位时,AC=1,否则AC=0,常用于十进制调整运算中。
F0:
用户可设定的标志位,可置位/复位,也可供测试。
RS1、RS0:
四个通用寄存器组选择位,该两位的四种组合状态用来选择0~3寄存器组。
OV:
溢出标志。
当带符号数运算结果超出-128~+127范围时OV=1,否则OV=0。
当无符号数乘法结果超过255时,或当无符号数除法的除数为0时OV=1,否则OV=0。
P:
奇偶校验标志。
每条指令执行完,若A中1的个数为奇数时P=1,否则P=0,即偶校验方式。
控制逻辑主要包括定时和控制逻辑、指令寄存器、译码器以及地址指针DPTR和程序寄存器PC等。
(2)存储器组织
51单片机在物理上有四个存储空间:
片内程序存储器和片外程序存储器、片内数据存储器和片外数据存储器[4]。
图351存储器组织结构
程序存储器的某些单元是保留给系统使用的:
0000H~0002H单元是所有执行程序的入口地址,复位以后,CPU总是丛0000H单元开始执行程序。
0003H~002AH单元均匀地分为五段,用做五个中断服务程序的入口。
用户程序不应进入上述区域。
51的RAM虽然字节数不很多,但却起着十分重要的作用。
256个字节被分为两个区域:
00H~7FH时真正的RAM区,可以读写各种数据。
而80H~FFH是专门用于特殊功能寄存器(SFR)的区域。
对于8051安排了21个特殊功能寄存器,每个寄存器为8位,所以实际上128个字节并没有全部利用。
内部RAM的各个单元,都可以通过直接地址来寻找,对于工作寄存器,则一般都直接用R0~R7,对特殊功能寄存器,也是直接使用其名字较为方便。
8051内部特殊功能寄存器都是可以位寻址的,并可用“寄存器名.位”来表示,如ACC.0,B.7等。
(3)AT89C51芯片
AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4kbytes的反复擦写的Flash只读程序存储器和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域[5]。
AT89C51引脚图如图4所示。
图4AT89C51引脚图
AT89C51提供以下标准功能:
4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个十六位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其他所有部件工作直到下一个硬件复位[6]。
2.2点阵显示原理
一般的点阵都是8x8的,即横竖都有8个发光二极管,如图5所示。
观察二极管正负极,我们可以很容易发现,如果赋予P0=0xff;
P2=0x00;
那么所有的发光二极管将被点亮,从而点阵就可以实现全亮。
类似的,如果需要实现某一列或者某一行全亮,也可以进行类似的赋值。
比如,我们要实现第一列全亮,第一列全亮就要求P20=0;
其他为1则代码为P0=0xff;
P2=0xfe;
但是如果需要让点阵显示一个字符的话,上述赋值则不能达到目的,需要通过动态扫描来实现。
扫描包括行扫描和列扫描,我们可以任意使用其中一种。
假设我们使用行扫描,就是首先令P07为1,即P00=0x80;
然后观察在这一行上有哪些二极管被点亮,点亮的那一列所对应的端口就为0,不亮的就为1,记下此时P2数值,短暂延时过后,令P06=1,即P00=0x40;
然后观察在这一行上有哪些二极管被点亮,点亮的那一列就为0,不亮的就为1,记下此时P2数值,同理如此重复下去,直到P00=0x01;
那么所有的P0和P2的数值就构成了两个长度为8的数组,我们可以在程序中每个一段时间按顺序发送一组代码,只要时间段足够短,那么我们就可以在点阵上看到稳定的字符了。
图58x8点阵示意图
2.3列驱动电路
动态扫描的意思简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如16行)的同名列共用一套列驱动器。
具体就16×
16的点阵来说,我们把所有同一行的发光管的阳极连在一起,把所有同一列的发光管的阴极连在一起(共阳的接法),先送出对应第一行发光管亮灭的数据并锁存,然后选通第一行使其燃亮一定的时间,然后熄灭;
再送出第二行的数据并锁存,然后选通第二行使其燃亮相同的时间,然后熄灭;
……第十六行之后又重新燃亮第一行,这样反复轮回。
采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面无疑是十分经济的。
但是,串行传输过程较长,数据按顺序一位一位地输出给列驱动器,只有当一行的各列数据都已传输到位之后,这一行的各列才能并行地进行显示。
这样,对于一行的显示过程就可以分解成列数据准备(传输)和列数据显示两个部分。
对于串行传输方式来说,列数据准备时间可能相当长,在行扫描周期确定的情况下,留给行显示的时间就太少了,以至影响到LED的亮度。
解决串行传输中列数据准备和列数据显示的时间矛盾问题,可以采用重叠处理的方法。
即在显示本行各列数据的同时,传送下一行的列数据。
为了达到重叠处理的目的,列数据的显示就需要具有锁存功能。
经过上述分析,可以归纳出列驱动器电路应具备的主要功能。
对于列数据准备来说,它应能实现串入并出的移位功能;
对于列数据显示来说,应具有并行锁存的功能。
这样,本行已准备好的数据打入并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据,而不会影响本行的显示。
经过上述分析最终采用具备上述功能的74HC595,它具有一个8位串入并出的移位寄存器和一个8位输出锁存器的结构,而且移位寄存器和输出锁存器的控制是各自独立的,可以实现在显示本行列数据的同时,传送下一行的列
数据,也能达到重叠处理的目的。
74HC595的外形及结构如图6所示。
图674HC595外形结构图
它的输入侧有8个串行移位寄存器,每个移位寄存器的输出都连接一个输出锁存器。
引脚SI是串行数据的输入端。
引脚SCK是移位寄存器的移位时钟脉冲在其上升沿发生移位,并将SI的下一个数据打入最低位移位后的各位信号出现在各移位寄存器的输出端,也就是输出锁存器的输入端。
RCK是输出锁存器的打入信号,其上升沿将移位寄存器的输出打入输出锁存器。
引脚G是输出三态门的开放信号,只有当其为低时锁存器的输出才开放,否则为高组态。
SCLR信号是移位寄存器清零输入端,当其为低时移位寄存器的输出全部为零。
由于SCK和RCK两个信号是互相独立的,所以能够做到输入串行移位与输出锁存互不干扰。
芯片的输出端为QA~QH,最高位QH可作为多片74HC595级联应用时,向上一级的级联输出。
但因为QH受输出锁存器的打入控制,所以还从输出锁存器前引出QH,作为与移位寄存器完全同步的级联输出。
在电路图中的连接如图7所示
图774HC595连接图
2.4行驱动电路
本设计中采用一个74HC154译码器实现4线16线输出,来驱动点阵显示屏的行。
74HC154是一款高速CMOS器件,74HC154引脚兼容低功耗肖特基TTL(LSTTL)系列。
74HC154译码器可接受4位二进制加权地址输入(A,B,C和D),并当使能时,提供8个互斥的低有效输出(X0至X15)。
74HC154特有2个使能输入端:
两个低有效E1和E2。
除非E1和E2置低,否则74HC154将保持所有输出为高。
ABCD四个输入端可分别从0000-1111时输出段可分别选中点阵的1至15行从而实现对个行的扫描控制。
74HC154的使能端E1受单片机P1.4引脚控制从而实现控制扫描的开始与结束。
74HC145在电路中的连接如图8所示:
图874HC154连接图
2.5硬件总体电路
硬件总体电路如图9所示:
图9硬件总体电路
3系统软件设计
3.1显示驱动程序定时器赋初值
读取行号并增加1
送新行显示数据
消隐
切换显示数据
发送新行号,打开显示
退出中断
进入中断
图10显示驱动程序流程图
显示驱动程序在进入中断后首先要对定时器T0重新赋初值,以保证显示屏刷新率的稳定,1/16扫描显示屏的刷新率(帧频)计算公式如下:
刷频率(帧频)=1/16×
T0溢出率
=1/16×
f/12(65536-t)
其中f位晶振频率,t为定时器T0初值(工作在16位定时器模式)。
然后显示驱动程序查询当前燃亮的行号,从显示缓存区内读取下一行的显示数据,并通过串口发送给移位寄存器。
为消除在切换行显示数据的时候产生拖尾现象,驱动程序先要关闭显示屏,即消隐,等显示数据打入输出锁存器并锁存,然后再输出新的行号,重新打开显示。
本文设计的系统软件能使系统在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形和文字应稳定、清晰无串扰。
图形或文字显示有静止、移入移出等显示方式。
显示驱动程序(显示屏扫描函数)流程图如图10所示
3.2系统的主程序
系统主程序开始以后,首先是对系统环境初始化,包括设置串口、定时器、中断和端口;
然后以“卷帘出”效果显示图形,停留约1s;
接着向上滚动显示“河北工程大学信电学院”这10个汉字及一个图形,然后以“卷帘入”效果隐去图形。
由于单片机没有停机指令,所以可以设置系统程序不断的循环执行上述显示效果。
开始
系统初始化
“卷帘出”显示效果
“上滚屏”显示效果
“左跑马”显示效果
“卷帘入”显示效果
单元显示屏可以接收来自控制器(主控制电路板)或上一级显示单元模块传输下来的数据信息和命令信息,并可将这些数据信息和命令信息不经任何变化地再传送到下一级显示模块单元中,因此显示板可扩展至更多的显示单元,用于显示更多的显示内容。
图11是系统主程序流程图。
图11主程序流程图
总结
本次课程设计主要是进行了点阵显示汉字的设计,对于点阵平时见到得很多,但是对其显示的真正原理并不是很清楚,正好通过此次设计吧点阵显示的基本原理弄清楚了,并且能能够自己设计,并变成实现一些简单的应用。
在这次设计的过程中我通过查阅大量的相关资料,了解了LED的现状,清楚地了解了LED显示屏与其它显示屏相比较有那些优点,明确了目标。
在设计过程中我对点阵如何显示汉字,并且如何滚动有了比较详细的了解,知道动态扫描实现的原理,并且熟练掌握了Proteus仿真软件的基本使用,与此同时也感到单片机的重要作用。
另外,由于刚开始时对C语言在单片机上的应用不是很了解,导致在程序的编程时逻辑上产生了很多错误,后来通过自己对别人的程序进行了解,通过自己的不断练习最终实现了想要的结果。
不仅如此,通过这次设计,从这次设计中,我们最重要的感受是:
做任何事都有耐心和毅力,否则将一事无成。
致谢
课程设计即将结束,在老师的指导和同学的帮助之下,学生对于道路设计有了更多新的认知,对路基路面设计有了更深一步的认识,对路基路面综合设计的整体脉络了解得更加的清晰透彻。
通过课程设计,我对自己大学近三年以来所学的知识有更多的认识。
课程设计,帮助我们总结大学三年收获、认清自我。
同时,还帮助我们改变一些处理事情时懒散的习惯。
从最开始时的搜集资料,整理资料,到方案比选,确定方案,再到着手开始进行路基工程、路面工程和路线排水的设计,每一步都是环环相扣,衔接紧密,其中任何一个步骤产生遗漏或者疏忽,就会对以后的设计带来很多的不便。
学生的动手能力和资料搜集能力在设计中也得到提升。
课程设计中很多数值、公式、计算方法都需要我们去耐心地查阅书籍,浏览资料,设计中需要用到辅助设计软件的地方,也需要我们耐心的学习。
掌握其使用的要领,运用到设计当中去。
最后汇总的时候,需要将前期各个阶段的工作认真整理。
课程设计结束了,通过设计,学生深刻领会到基础的重要性,课程设计不仅仅能帮助学生检验大学四年的学习成果,更多的是课程设计可以帮助我们更加清楚的认识自我,磨练学生的意志与耐性,这会为学生日后的工作和生活带来很大的帮助。
参考文献
[1]何立民.MCS-51系列单片机应用系统设计与接口技术.北京:
北京航空航天大学出版社,1990.23-25
[2]何立民.单片机应用技术选编.北京:
北京航空航天大学出版社,2000.30-33
[3]邬宽明.单片机外围器件实用手册.北京:
北京航空航天大学出版社,1998.70-73
[4]张毅刚等.MCS-51单片机应用设计.哈尔滨:
哈尔滨工业电子出版社,1996.55-56
[5]张新成,杨志邦.c语言程序设计.郑州:
河南科学技术出版社,2009.55-65
[6]余发山,王福忠.单片机原理及应用技术.徐州:
中国矿大出版社,2004.34-36
附录:
程序清单
16x16点阵设计程序:
#include<
reg51.h>
#defineBLKN2//列锁存器数
sbitG=P1^4;
//P1.4为显示允许控制信号端口
sbitRCLK=P1^6;
//P1.6为输出锁存器时钟信号端
sbitSCLR=P1^5;
//P1.5为移位寄存器清0端
voiddelay(unsignedint);
//延时函数
unsignedchardatadispram[32];
//显示缓存
/x------------------主函数---------------x/
voidmain(void)
{
unsignedcharcodeBmp[][32]={//字模表
//看
{0,120,63,128,1,0,31,240,2,0,127,252,4,0,15,240,24,16,47,240,72,16,15,240,8,16,15,240,0,0,0,0},
//我
{6,64,56,80,8,72,8,64,127,252,8,64,8,72,14,72,24,80,104,80,8,36,8,84,8,140,57,4,0,0,0,0},
//的
{8,64,8,64,16,124,62,132,35,4,34,4,34,68,62,36,34,36,34,4,34,4,34,4,62,4,34,24,0,0,0,0},
//单
{8,32,4,64,31,240,17,16,17,16,31,240,17,16,17,16,31,240,1,0,1,0,127,252,1,0,1,0,0,0,0,0},
//片
{0,64,16,64,16,64,16,64,31,248,16,0,16,0,16,0,31,224,16,32,16,32,16,32,32,32,64,32,0,0,0,0},
//机
{16,0,17,240,17,16,125,16,17,16,17,16,57,16,53,16,81,16,17,16,17,16,18,20,18,20,20,12,0,0,0,0},
//课
{32,0,19,248,18,72,3,248,114,72,19,248,16,64,19,252,16,64,20,224,25,80,18,72,4,68,0,64,0,0,0,0},
//程
{0,0,13,248,113,8,17,8,17,248,124,0,16,0,25,248,52,64,48,64,81,248,16,64,16,64,19,252,0,0,0,0},
//设
{32,0,17,240,17,16,1,16,1,16,114,12,20,0,19,248,17,8,17,16,20,160,24,64,17,176,6,12,0,0,0,0},
//计
{32,64,16,64,16,64,0,64,0,64,119,252,16,64,16,64,16,64,16,64,20,64,24,64,16,64,0,64,0,0,0,0},
{
0xF8,0x3F,0xE7,0xCF,0xDF,0xF7,0xBF,0xFB,0xB3,0x9B,0x73,0x9D,0x7F,0xFD,0x7F,0xFD,
0x6F,0xED,0x67,0xCD,0xB3,0x9B,0xB8,0x3B,0xDF,0xF7,0xE7,0xCF,0xF8,0x3F,0xFF,0xFF
}/x:
x/
};
unsignedinti,j,k,l;
SCON=0x00;
//串口工作模式0:
移位寄存器方式
TMOD=0x01