(广告传媒)LED广告屏设
计
毕业设计(论文)
专业
班次
姓名
指导老师
二 0一三年
LED广告屏的开发和设计
摘要
LED点阵广告牌在大街小巷随处可见,它的应用领域现在极其广泛。像证券
交易、金融信息的显示,LED显示屏需求量都是非常大的。而这些 LED的最基本
单元都是 8*8的点阵,它是组成汉字及其其它图形的基础。
本次的设计就是采用单片机作为主要控制单元核心,来实现一个简单的 LED
点阵汉字显示系统。通过单片机对行列扫描的控制,配合程序的运用,来实现显
示、滚动、暂停以及调速。汉字的显示就是字模以极快的速度在屏幕上循环,超
过一定的速度,由于人眼的暂留效应,就会认为是完整地显示了汉字。把字模按
一定的速度依次调用显示,在我们视线中就好像字体在滚动。
在本次的设计中,主要用到了单片机的串口通信技术,这样不仅节省了单片
机 IO口的数目,而且是程序更加简洁。
LED显示汉字技术相信在将来还会得到更加广泛的应用,它在我们日常生活
中占得地位相信也会愈来愈重要。
关键词:单片机 LED点阵汉字显示
目录
摘要 I
1. 绪论 1
引言 1
LED显示屏的特点 1
LED显示屏产品的优势 2
设计任务及要求 3
2 系统设计及其硬件电路设计 4
总体系统设计 4
实现方法选取 4
硬件电路设计 6
显示电路 6
列驱动电路 7
行驱动电路 8
复位电路 9
晶振电路 10
3. 主要器件简介 11
STC11F32单片机简介 11
74HC595简介 15
74LS138简介 17
4953芯片介绍 19
4 单片机串口通行介绍 19
STC11F系列单片机串行通信接口 19
串行口的结构与组成 20
5 软件和程序设计 24
字模软件 24
程序流程图 25
软件各子模块设计 26
写入 74HC595程序的设计 27
列驱动程序的设计 28
行驱动程序设计 29
结论 30
致谢 31
参考文献 32
附录 33
英文翻译原文 33
译文 38
程序源代码 41
原理图 52
第一章绪论
引言
近几年,LED显示屏的发展非常迅速,大街小巷到处充斥的 LED的广告流动
字幕。这与它本身所具有的优点分不开的。这些优点概括起来是:亮度高、工作
电压低、功耗小、小型化、寿命长、耐冲击和性能稳定。LED的发展前景极为广
阔,目前正朝着更高亮度、更高耐气候性、更高的发光密度、更高的发光均匀性,
可靠性、全色化方向发展。
LED显示屏采用了低电压扫描驱动,具有耗电省、使用寿命长、成本低、亮
度高、视角大、可视距离远、防水、规格品种多等优点,可以满足各种不同应用
场景的需求,发展前景非常广阔,被公认为最具增长潜力也是发展最快的的 LED
应用市场。随着北京奥运会、上海世博会、广州亚运会等重大赛会的举办,体育
场馆、车站、机场、医院、银行、商业场所、公共广场、居民社区的大面积应用,
LED显示屏的市场应用空间不断扩大。
LED显示最早的设计方案为点阵模块方案,由室内伪彩点阵屏发展而来。它
的优势是原材料成本较低,且生产加工工艺简单,质量稳定。缺点是色彩一致性
差,马赛克现象较严重,显示效果较差。
显示屏的特点
组合型 led点阵显示器以发光二极体为图素,它用高亮度 led芯片进行阵列
组合后,再透过环氧树脂和塑模封装而成。具有高亮度、功耗低、引脚少、视角
大、寿命长、耐湿、耐冷热、耐腐蚀等特点。
点阵显示器有单色和双色两类,可显示红,黄,绿,橙等。led点阵有 4×4、
4×8、5×7、5×8、8×8、16×16、24×24、40×40等多种;根据图素的数目分为等,
双原色、三原色等,根据图素顏色的不同所显示的文字、图像等内容的顏色也不
同,单原色点阵只能显示固定色彩如红、绿、黄等单色,双原色和三原色点阵显
示内容的顏色由图素内不同顏色发光二极体点亮组合方式决定,如红绿都亮时可
显示黄色,如果按照脉冲方式控制二极体的点亮时间,则可实现 256或更高级灰
度显示,即可实现真彩色显示。
几种 led点阵显示器的内部电路结构和外型规格,其他型号点阵的结构与引
脚可试验获得,led点阵显示器单块使用时,既可代替数码管显示数位,也可显
示各种中西文字及符号,如 5x7点阵显示器用于显示西文字母,5×8点阵显示器
用于显示中西文,8x8点阵用于显示中文文字,也可用于图形显示。用多块点阵
显示器组合则可构成大屏幕显示器,但这类实用装置常通过微机或单片机控制驱
动。
由 led点阵显示器的内部结构可知,器件宜采用动态扫描驱动方式工作,由
于 led管芯大多为高亮度型,因此某行或某列的单体 led驱动电流可选用窄脉冲,
但其平均电流应限制在 20ma内,多数点阵显示器的单体 led的正向压降约在 2v
左右,但大亮点∮10的点阵显示器单体 led的正向压降约为 6v。
大屏幕显示系统一般是将由多个 led点阵组成的小模组以搭积木的方式组合
而成的,每一个小模组都有自己的独立的控制系统,组合在一起后只要引入一个
总控制器控制各模组的命令和资料即可,这种方法既简单而且具有易展、易维修
的特点。
led点阵显示系统中各模组的显示方式有静态和动态显示两种。静态显示原
理简单、控制方便,但硬体接线复杂,在实际应用中一般采用动态显示方式,动
态显示采用扫描的方式工作,由峰值较大的窄脉冲驱动,从上到下逐次不断地对
显示幕的各行进行选通,同时又向各列送出表示图形或文字资讯的脉冲信号,反
复以上操作,就可显示各种图形或文字资讯。
显示屏产品的优势
LED显示屏产品的优势:
1.高的换帧频率(不小于 300hz)极大的提高了图像的稳定性。
2.高的灰度级,使常规真彩数据 RGB各 8位(256级数据)分别扩展为 14位,
并通过局部控制扫描的方式,将 14位数据量完全转换为 214=16384个亮度档次,
从而实现 16384级灰度。
3.通过人眼的视觉特性,根据白天及晚间环境光的变化,进行最高亮度及最
低亮度值的改变(根据查色表)不伦差值如何改变,在该亮度范围内可实现 16384
级的灰度,从而极大的提高了图像显示的清晰度,红绿兰可独立进行任意γ校正,
对显示屏进行手动或自动亮度调节 100级软件调节、硬件 16级亮度调节。
4.合理的结构、简单的组合,使显示屏体重量达到最低。
5.合理的工作电流,既不降低亮度,又提高了工作效率,使显示屏可在不用
空调降温的条件下正常工作。
6.采用数据分块处理,各块同步并行通讯的方式,极大的提高通讯速度。
7.远程通讯使用千兆网高速数据通讯芯片,采用光电隔离技术,从而极大的
提高了防静电防雷击的性能。
8.显示屏可通计算机网络系统进行远程控制。
9.具有先进的显示屏内温、湿度、烟雾监控,适时调节温湿度并有报警功能。
设计任务及要求
本次设计主要就是利用 STC11F32单片机作为控制,由 LED点阵作为显示器,
配合其他的一些外围的电路来实现点阵式汉字,并进行一些功能扩充。
主要内容为:
1、熟悉掌握 STC系列单片机远离及编程;
2、设计单片机的最小系统电路;
3、设计 LED广告屏电路
4、设计 LED广告屏的功能程序
5、调试 LED广告屏系统;
2系统设计及其硬件电路设计
总体系统设计
任何设计都要有一个计划,一步一步地进行。电子设计更是如此,首先要确
定要使用的电子元器件,画出基本的流程图,确定硬件电路,设计软件,仿真,
焊接电路。
整个设计从功能上应该可分为三个模块:中心控制模块、行列驱动模块、显
示模块。中心模块就是由单片机控制的,是整个系统的核心,主要用来输出组成
汉字的信号。行列驱动就是用来传输汉字的信号的,显示模块,即最直观的部分,
就是显示功能。
图 2-1总体设计方案图
实现方法选取
数据传送方式的选择:
单片机的输出有并行输出和串行输出,并行输出虽然节省时间,但占用的位比较
多,它的输出是并行的,所以就需要几位数据同时从几个端口输出。而串口虽然
要一位一位输出,但其只需要一个端口就能输出多位的数据。虽然并行效率高,
但占用的 IO口太多,而本次设计需要的 IO口远远超过了单片机的并行输出 IO
口,所以在信号输出的方式选择上要采用串口通信模式。
显示模块工作方式的选择:
图文显示一般有静态和动态显示两种方法,静态显示虽然设计简单,但其占用的
管脚太多,如本设计中 16*32的点阵共有 512个发光二极管,显然单片机没有这
么多的端口可供使用,但如果采用锁存器来扩展端口,按 8位的锁存器来计算,
16*32的点阵需要 512/8=64个锁存器。这个数字也不实际,因为我们仅仅是 16*32
的点阵,而在实际应用中的显示屏往往要更多,这样在锁存器上花的成本就是一
个很庞大的数字。因此在实际应用中的显示屏几乎都不采用这种设计,而采用动
态显示的显示方法。
动态扫描的意思简单地说就是逐列轮流点亮,这样扫描驱动电路就可以实现
多列的同名行共用一套驱动器。就 16*16的点阵来说,把所有同 1列的发光管的
阴极连在一起,把所有同 1行的发光管的阳极连在一起,先送出对应第一列发光
管亮灭的数据并锁存,然后选通第 1列使其燃亮一定时间,然后熄灭;再送出第
二列的数据并锁存,然后选通第 2列使其燃亮相同的时间,然后熄灭;以此类推,
第 16列之后,又重新燃亮第 1列,反复轮回。当这样轮回的速度足够快(每秒 24
次以上),由于人眼的视觉暂留现象,就能够看到显示屏上稳定的图形了。如下
所示:每一个字由 16行 16列的点阵组成显示。即国标汉字库中的每一个字均由
256点阵来表示。我们可以把每一个点理解为一个像素,而把每一个字的字形理
解为一幅图像。事实上这个汉字屏不仅可以显示汉字,也可以显示在 256像素范
围内的任何图形。
我们以显示汉字“大”为例,来说明其扫描原理:
图 2-2显示汉字“大”的点阵图形
在本例中单片机首先显示的是左上角的第一列的上半部分,即第 0列的
P00---P07口。方向为 P00到 P07,显示汉字“大”时,P05点亮,由上往下排列,
为 灭,灭,灭 灭,灭,亮,灭,灭。即二进
制 00000100,转换为 16进制为 04H.。
上半部第一列完成后,继续扫描下半部的第一列,为了接线的方便,我们仍
设计成由上往下扫描,即从 P27向 P20方向扫描,从上图可以看到,这一列全部
为不亮,即为 00000000,16进制则为 00H。然后单片机转向上半部第二列,仍为
P05点亮,为 00000100,即 16进制 04H.这一列完成后继续进行下半部分的扫描,
P21点亮,为二进制 00000010,即 16进制 02H.依照这个方法,继续进行下面的
扫描,一共扫描 32个 8位,可以得出汉字“大”的字模代码为:
04H,00H,04H,02H,04H,02H,04H,04H
04H,08H,04H,30H,05H,0C0H,0FEH,00H
05H,80H,04H,60H,04H,10H,04H,08H
04H,04H,0CH,06H,04H,04H,00H,00H
由这个原理可以看出,无论显示何种字体或图像,都可以用这个方法来分析
出它的扫描代码从而显示在屏幕上。
我们设计的是一块 16*32的 LED显示屏,如下图:但是显示原理也是通过
STC11F单片机控制外围电路对整个屏幕进行扫描,用 74HC138译码器和 4953芯
片作为行驱动对屏幕上的 16行进行扫描控制,用 74HC595作为列驱动对屏幕上
的 32列进行扫描控制,根据人眼的视觉暂留效果,完成汉字的显示。
图 2-216*32LED显示屏实物
硬件电路设计
显示电路
我们所设计的是一块 16*32 的 LED 显示屏,他是由 16 行 32 列一共 512 个 LED
发光二极管组合而成。我们把他的每一行由 H1 到 H16 来表示,每一列由 L1
到 L32 来表示,而每一列中,从上到下每四个二极管是一组,分别为 L1、
2L1、3L1、4L1,第二列就为 L2、2L2、3L2、4L2 以此类推。
图 2-3 显示电路
列驱动电路
列驱动电路包括 16 个 74HC595,每一个 74HC595 的 8 个并行输出端连接着 8
组由四个二极管组成的 L 灯组。如:第一行第一个 74HC595 控制 L1 到 L8 这
8 个灯组,第二个 74HC595 控制着 2L1 到 2L8 这 8 个灯组。第二行第一个
74HC595 控制 L9 到 L16 这 8 个灯组,第二个 74HC595 控制 2L9 到 2L16 这 8
个灯组,以此类推。16 个 74HC595 完成了对 128 个 LED 灯组的控制
图 2-4 列驱动电路
行驱动电路
行驱动电路包括 1 个 74HC138 和 4 个 4953,根据 A 和 B 的值的不同,分别会
输出 Y0、Y1、Y2、Y3 四个不同数据,当 A=0、B=0 时,输出 Y0;当 A=1、B=0
时,输出 Y1;当 A=0、B=1 时,输出 Y2;当 A=1、B=1 时,输出 Y3。
通过 4953 芯片,Y0 控制 1、5、9、13 行,Y1 控制 2、6、10、14 行,Y2
控制 3、7、11、15 行,Y3 控制 4、8、12、16 行。
(a)74hc138
(b)4953
图 2-5 行驱动电路
复位电路
复位是单片机的初始化操作,它的主要功能是把 PC值初始化为 0000H,使单片机
从 0000H单元开始执行程序。除了进入系统的正常初始化以外,当由于程序运行
出错或操作错误使系统处于死锁状态时,为摆脱困境也需要按复位键以重新启动。
复位方式有自动复位和手动复位两种。本系统采用手动复位方式复位。
RST引脚是复位信号的输入端。复位信号是高电平有效,其有效时间应持续 24个
振荡脉冲周期以上。
图 2-6 复位电路
晶振电路
晶振电路用于产生程序运行所需的时钟信号,时序是指令执行中各信号之间
的先后关系。单片机本身就如同一个复杂的同步时序电路,为了保证同步工作方
式的实现,电路应该在统一的时钟信号控制下按时序进行工作。
在 AT89C51单片机内部是带有时钟电路的,因此,只需要在片外通过 XTAL1
和 XTAL2引脚接入定时控制元件,即可构成一个稳定的自激振荡器。在 AT89C51
芯片内部有一个高增益反相放大器,而在芯片的外部,XTAL1和 XTAL2之间跨接
晶体振荡器和微调电容就可以了。
图 2-7晶振电路
3.主要器件简介
单片机简介
单片机就是一个微型电脑,它的内部也用和电脑功能类似的模块,比如中央处理
器 CPU、随机存储器 RAM、只读存储器 ROM、中断系统、定时器/计数器、I/O接
口等半导体集成电路芯片,它主要是作为控制部分的核心部件。
单片机是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的
抗干扰能力,较低的成本,这也是和离线式计算机(比如家用 PC)的主要区别。
单片机必须靠程序运行,并且可以修改。通过不同的程序实现不同的功能,尤其
是一些特殊的功能,这是别的器件需要费很大力气才能做到的。因为单片机通过
编写的程序可以实现高智能,高效率,以及高可靠性。
单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能
化管理及过程控制等领域。
STC单片机是以 51内核为主的系列单片机,STC单片机是由笙泉科技设计,国内
宏晶公司贴牌生产的,这个芯片设计的时候就吸取其它 51系列单片很容易被解
密的教训,改进了加密机制。
STC11系列单片机是宏晶科技设计生产的单时钟/机器周期(1T)的单片机,是高速、
低功耗、超强干扰的新一代 8051单片机,指令代码完全兼容传统 8051,但速度
快 8-12倍。内部集成的 FLASH寿命可达 10万次,并且完全支持 ISP和 IAP功能。
该系列针对不同功能、电压、封装等的型号规格非常齐全。所有的 STC11/10xx
系列单片机内部都固化了宏晶科技的 ISP程序,不需要并行编程器,通过 RS232
串口就可以烧录用户程序。但一些系统为了程序保密或者采用其他诸如 RS485通
讯或其他通讯方式的需要,仍然需要自己编写 ISP程序用于系统升级。在
STC11/10xx系列单片机中以 IAP打头的芯片型号,用户程序和数据 FLASH是统一
寻址,允许在用户程序中擦写 FLASH,因此可以编写自己的 ISP程序。
图 3-1STC11f32单片机引脚图
STC11/10xx系列单片机特点:
●高速:1个时钟/机器周期,增强型 8051内核,速度比普通 8051快 8~12倍
●宽电压:~
●低功耗设计:空闲模式(可由任意一个中断唤醒)
●低功耗设计:掉电模式(可由任意一个外部中断唤醒,可支持下降沿/低电平和远
程唤醒,STC11xx系列还可通过内部专用掉电唤醒定时器唤醒)
●工作频率:0~35MHz,相当于普通 8051:0~420MHz
●时钟:外部晶体或内部 RC振荡器可选,在 ISP下载编程用户程序时设置
●1/2/4/8/12/16/32/48/60/62K字节片内 Flash程序存储器,擦写次数 10万次以
上
●1280/512/256 字节片内 RAM数据存储器
●芯片内 EEPROM功能,擦写次数 10万次以上
●ISP/IAP,在系统可编程/在应用可编程,无需编程器/仿真器
●2个 16位定时器,兼容普通 8051的定时器 T0/T1
●1个独立波特率发生器(故无需 T2做波特率发生器),缺省是 T1做波特率发生器
●可编程时钟输出功能,T0在 输出时钟,T1在 输出时钟,BRT在 输
出时钟
●硬件看门狗(WDT)
●全双工异步串行口(UART),兼容普通 8051,可当 2个串口使用(串口可在 P3与 P1
之间任意切换)
●先进的指令集结构,兼容普通 8051指令集,有硬件乘法/除法指令
●通用 I/O口(36/40个),复位后为:准双向口/弱上拉(普通 8051传统 I/O口)
可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏
每个 I/O口驱动能力均可达到 20mA,44/40管脚的 IC建议整个芯片不要超过
100mA,
20/18/16管脚的 IC建议整个芯片不要超过 60Ma
STC11/10xx系列主要性能:
在系统可编程,无需编程器,无需仿真器,可远程升级。
可送 STC-ISP下载编程器,1万片/人/天。
内部集成高可靠复位电路,复位脚设置为 I/O口使用时,复位脚可浮空。
速度快,1个时钟/机器周期,可用低频晶振,大幅降低 EMI。
输入输出口多,最多有 40个 I/O,复位脚如当 I/O口使用,可省去外部复位电路。
超强抗干扰,超强抗静电,整机可轻松过 2万伏静电测试。
超低功耗:掉电模式:外部中断唤醒功耗<,支持下降沿/低电平和远程唤醒。
STC11xx系列增加了掉电唤醒专用定时器,启动掉电唤醒定时器典型功耗<2uA。
适用于电池供电系统,如水表,气表,便携设备等.
空闲模式:典型功耗<
正常工作模式:2mA-7mA
复位脚:烧录程序时如设置为 I/O口,可当 I/O口使用或浮空
不用的 I/O口:浮空即可
使用 LQFP44封装时,最多有 40个 I/O口
使用 PDIP40封装时,最多有 36个 I/O口
简介
描述:
74HC595是硅结构的一种 CMOS器件,兼容低电压的 TTL电路,遵守 JEDEC标
准。74HC595是具有 8位移位寄存器和一个存储器,三态输出功能。移位寄存器
和存储器是分别的时钟。数据在 SHcp的上升沿输入,在 STcp的上升沿进入到存
储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个
脉冲。移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个
异步的低电平复位,存储寄存器有一个并行 8位的,具备三态的总线输出,当使
能 OE时(为低电平),存储寄存器的数据输出到总线。8位串行输入/输出或者并
行输出移位寄存器,具有高阻关断状态。三态。
特点:
8位串行输入/8位串行或并行输出存储状态寄存器,三种状态。输出寄存器
可以直接清除 100MHz的移位频率
输出能力:
并行输出,总线驱动;串行输出;标准中等规模集成电路 595移位寄存器有
一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,
存储寄存器有一个并行 8位的,具备三态的总线输出,当使能 OE时(为低电平),
存储寄存器的数据输出到总线。
图 3-274HC595 引脚图
引脚说明:
Q0…Q7第 15脚及 1-7脚,并行数据输出
GND第 8脚地
Q7’第 9脚串行数据输出
MR第 10脚主复位(低电平)
SHCP第 11脚移位寄存器时钟输入
STCP第 12脚存储寄存器时钟输入
OE第 13脚输出有效(低电平)
DS第 14脚串行数据输入
VCC第 16脚电源
芯片时序图:
图 3-3时序图
简介
描述:
74LS138为 3线-8线译码器,共有 54/74S138和 54/74LS138两种线路结构
型式,其 74LS138工作原理如下:当一个选通端(G1)为高电平,另两个选通端
(/(G2A)和/(G2B))为低电平时,可将地址端(A、B、C)的二进制编码在一个
对应的输出端以低电平译出。
作用:
利用 G1、/(G2A)和/(G2B)可级联扩展成 24线译码器;若外接一个反相器还
可级联扩展成 32线译码器。若将选通端中的一个作为数据输入端时,74LS138还
可作数据分配器。
引脚及内部电路:
图 3-43线-8线译码器 74LS138
图 3-574LS138内部电路
译码器 74LS138的功能表:
图 3-674LS138功能表
无论从逻辑图还是功能表我们都可以看到 74LS138的八个输出管脚,任何时
刻要么全为高电平 1—芯片处于不工作状态,要么只有一个为低电平 0,其余 7
个输出管脚全为高电平 1。如果出现两个输出管脚在同一个时间为 0的情况,说
明该芯片已经损坏。
芯片介绍
4953在 led中的作用是行驱动,电流放大
LED显示屏单元板,每一显示行需要的电流是比较大的,要使用行驱动管,每片
4953可以驱动 2个显示行
其内部是两个 CMOS管,1、3脚 VCC,2、4脚控制脚,2脚控制 7、8脚的输出,
4脚控制 5、6脚的输出,只有当 2、4脚为“0”时,7、8、5、6才会输出,否
则输出为高阻状态。
4953行功率管一段和 74hc138管脚相连,一端和单元板上二极管的正极相连
接。在短路的情况下 74hc4953很容易烧坏,有种烧焦的气味。
单元板上每个模块的同一行不亮;同一行不亮可能是行驱动管 TP127(或 4953)
损坏或虚焊或印刷电路断,或是从 138输出到 127(或 4953)的基极 B的信号没
有过来。更换 127(或 4953)或虚焊补焊或飞线。
图 3-74953引脚图
4 单片机串口通行介绍
本次设计的核心技术主要用到了单片机的串口通信技术,下面对单片机的串
口通信技术做一介绍:
系列单片机串行通信接口
STC11F系列单片机内部有一个功能强大的全双工串行异步通信接口,它既可以作
为 UART使用,能方便地构成双机或多机通信系统,也可以在外接移位寄存器后
扩展并行 I/O口。
串行口的结构与组成
单片机的串行通信口结构主要由两个串行数据缓冲器(SBUF)、发送控制器、
发送端口、接收控制器和接收端口等组成。串行口的工作方式和波特率由专用寄
存器 SCON和 PCON控制。
1、串行数据缓冲器(SUBF)
STC11F系列单片机串行口有两个串行数据缓冲器,其中一个用来发送数据,
一个用来接收,可以同时发送和接收。发送缓冲器只能写入,不能读出。同样,
接收缓冲器只能读出,不能写入。两个缓冲器使用同一个符号 SBUF,共用一个地
址 99H,根据读、写指令来确定访问其中的哪一个。
发送数据时,执行一条将数据写入 SBUF的传送指令,即可将要发送的数据
按事先设置的方式和波特率从 TXD端串行输出。一个数据发送完毕后,串行口能
向 CPU提出中断请求,发送下一个数据。
接收数据时,当一帧数据从 RXD端经过接收端口(移位寄存器)全部进入 SBUF
后,串行口发出中断请求,通知 CPU接收这一数据。CPU执行一条读 SBUF的指令,
就能将接受的数据送入某个寄存器或是存储单元。与此同时的是接收端口接收下
一帧数据。为了避免前后两帧数据重叠,接收器是双缓冲的。
2、串行口控制寄存器(SCON)
SCON是用于控制单片机串行口的工作方式的,同时还包含了要发送和接收到
的第 9位数据及串行口中断标志位。此寄存器的字节地址为 98H。各位的定义如
下:
图 4-1串行口 8位
SM0、SMl:串行口工作方式选择位,由软件设定,有四种方式:
00——方式 0;01——方式 1;
10——方式 2;11——方式 3。
SM2:仅用于方式 2和方式 3的多机通信控制位,本设计没有涉及到多机通
信,不再多做陈述。
REN:串行接收允许位:0——禁止接收;1——允许接收。
TB8:在方式 2、3中,TB8是发送机要发送的第 9位数据。
RB8:在方式 2、3中,RB8是接收机接收到的第 9位数据,该数据正好来自
发送机的 TB8。
TI:发送中断标志位。发送前必须用软件清零,发送过程中 TI保持零电平,
发送完一帧数据后,由硬件自动置 1。如要再发送,必须用软件再清零。本设计
就用到了此功能。
RI:接收中断标志位。接收前,必须用软件清零,接收过程中 RI保持零电
平,接收完一帧数据后,由片内硬件自动置 1。如要再接收,必须用软件再清零。
电源控制寄存器(PCON)
SM0 SM1 SM2 REN TB8 RB8 TI RI
PCON主要是为 CHMOS型单片机的电源控制而设置的专用寄存器,单元地址是
87H,其结构格式如下:
SMOD -------
-
-------
-
-------
-
GF1 GF0 PD IDL
SMOD:该位与串口通信有关。
SMOD=0;串口方式 1,2,3时,波特率正常。
SMOD=1;串口方式 1,2,3时,波特率加倍。
GF1,GF0:两个通用工作标志位,用户可以自由使用。
PD:掉电模式设定位。
PD=0单片机处于正常工作状态。
PD=1单片机进入掉电(PowerDown)模式,可由外部中断或硬件复位模式唤醒,
进入掉电模式后,外部晶振停振,CPU、定时器、串行口全部停止工作,只有外
部中断工作。
IDL:空闲模式设定位。
IDL=0单片机处于正常工作状态。
IDL=1单片机进入空闲(Idle)模式,除 CPU不工作外,其余仍继续工作,
在空闲模式下可由任一个中断或硬件复位唤醒。串行口的工作方式:
SM0SM1 模式 功能 波特率
00 0 同步移位寄存器 fosc/12
01 1 8位 UART 可变(T1溢出率)
10 0 9位 UART fosc/6或 fosc/32
11 1 9位 UART 可变(T1溢出率)
其中,fosc是振荡器的频率,UART为通用异步接收和发送器的英文缩写。
下面对这 4种工作模式作进一步介绍。
(1)方式 0
当设定 SM1、SM0为 00时,串行口工作于方式 0,它又叫同步移位寄存器输出方
式。在方式 0下,数据从 RXD()端串行输出或输入,同步信号从 TXD
()端输出,发送或接收的数据为 8位,低位在前,高位在后,没有起始位
和停止位。数据传输率固定为振荡器的频率 1/12,也就是每一机器周期传送一位
数据。方式 0可以外接移位寄存器,将串行口扩展为并行口,也可以外接同步输
入/输出设备。
执行任何一条以 SBUF为目的的寄存器指令,就开始发送。
(2)方式 1
当设定 SM1、SM0为 01时,串行口工作于方式 1。方式 1为数据传输率可变的 8
位异步通信方式,由 TXD发送,RXD接收,一帧数据为 10位,1位起始位(低电
平),8位数据位(低位在前)和 1位停止位(高电平)。数据传输率取决于定时
器 1或 2的溢出速率(1/溢出周期)和数据传输率是否加倍的选择位 SMOD。
对于有定时器/计数器 2的单片机,当 T2CON寄存器中 RCLK和 TCLK置位时,用
定时器 2作为接收和发送的数据传输率发生器,而 RCLK=TCLK=0时,用定时器 1
作为接收和发送的数据传输率发生器。两者还可以交叉使用,即发送和接收采用
不同的数据传输率。
类似于模式 0,发送过程是由执行任何一条以 SBUF为目的的寄存器指令引起的。
(3)方式 2
当设定 SM0、SM1二位为 10时,串行口工作于方式 2,此时串行口被定义为 9位
异步通信接口。采用这种方式可接收或发送 11位数据,以 11位为一帧,比方式
1增加了一个数据位,其余相同。第 9个数据即 D8位用作奇偶校验或地址/数据
选择,可以通过软件来控制它,再加特殊功能寄存器 SCON中的 SM2位的配合,
可使 MCS-51单片机串行口适用于多机通信。发送时,第 9位数据为 TB8,接收时,
第 9位数据送入 RB8。方式 2的数据传输率固定,只有两种选择,为振荡率的 1/64
或 1/32,可由 PCON的最高位选择。
(4)方式 3
当设定 SM0、SM1二位为 11时,串行口工作于方式 3。方式 3与方式 2类似,唯
一的区别是方式 3的数据传输率是可变的。而帧格式与方式 2一样为 11位一帧。
所以方式 3也适合于多机通信。
本设计只需要传送 8位的数据,不需要标志位,74HC595是一个 8位的寄存器,
不需要标志位及校验位,所以运用的方式 0。
5软件和程序设计
字模软件
字体的组成全都是由字模组成的,一个基本显示单元要显示一个汉字,需要
32个 8进制的数,即字模。从左边开始,每列用两个字模,上下各一个,低位在
上,16*64的 LED点阵可以分为上半部分和下半部分,两个 8*64的点阵。从左上
边的第一列开始,每一列的字模是由 8位的二进制数组成的,例如 00001111就
是下边的四个灯亮,换算成 8进制就是 0F,如果手动提取字模,会是一个比较麻
烦的工作。有字模提取的软件可供使用。
字模软件可以很方便地把需要的字模提取出来:
图 5-1字模提取软件
通过字模提取,可以得到“欢”的字模为:
0xFF,0x7F,0xFF,0x7F,0x03,0x7F,0xFA,0x01,0x7A,0xFB,0xB5,0xB7
,0xD7,0xBF,0xEF,0xBF,0xE7,0xBF,0xE7,0x9F,0xDB,0x5F,0xDB,0x6F
0xBE,0xE7,0x79,0xF1,0xC7,0xFB,0xFF,0xFF,
依次提取出需要的字模即可。
程序流程图
根据功能要求,需要同时在极短的时间里完成对 LED点阵屏幕上 16行 32列
所有点的扫描,从行、列寄存器中输出相应的字模使 16*32的 LED显示屏上的所
有为高电平的点亮起,那么根据人眼的视觉暂留效果,我们就可以看到屏幕上显
示的两个汉字。
我们所设计的程序是这样完成对屏幕的所有点的扫描,先扫描 1、5、9、13
行的前 8列,然后扫描该四行的 9到 16列,之后扫描该四行的 17到 24列,之
后是该四行的 25到 32列,完成之后进行一次显示。然后按照该顺序进行第 2、
6、10、14行的扫描和显示,之后是 3、7、11、15行的扫描和显示,最后进行是
4、8、12、16行的扫描和显示。这整个扫描显示过程都是在很短的时间内完成的,
在我们看来显示屏上形成的是稳定的两个汉字。
这样,设计出程序的主要流程图:
开始
系统初始化
调用显示程序
调整数据指针
是否显示完
图 5-2程序主流程图
软件各子模块设计
在本次的程序编写中,用到最多的语法就是 for 循环,下面简单介绍一
下 C 语言中 for 循环的用法:
一般情况下 for 循环里包含 3 条语句,第一句是为循环变量赋初始值值,第
二句是循环条件,第三句是给循环变量重新赋值,例如:
for(i=0;i<num;i++)
{
//
}
这个循环的循环变量是 i,i 的初始值是 0,循环条件是 i<num,i 以自增的方
式赋新值,也可以写出 i+=10,即 i=i+10。就拿上面这个例子来说,执行的
过程是先给给 i 赋初值,再判断 i 是否小于 num,若是则执行 for 循环里的
语句,执行完之后再执行 i++,然后再判断 i 是否小于 num,若是则仍执行 for
循环里的语句,否则退出循环。
写入 74HC595程序的设计
写入的每个 8 位字模和 0x80 与,然后向左移位之后再和 0x80 与,进行
8 次该循环,就可以将一个字模中的 8 位数据通过 74HC595 的 DS 串行输入端
写入。
程序如下:
voidwrite595(uchardat)//数据串行送入 595
{
uchari;
for(i=0;i<8;i++)
{
CLK=0;
SER=dat&0x80;
dat<<=1;
CLK=1;
}
列驱动程序的设计
列驱动就是把字模从单片机中通过串口输出到寄存器,然后从寄存器输出到
显示器上。我们先将字模中的第 4 行第 1 列(i+k-1=3、sign=0)的 8 位输
出到寄存器,通过 for 循环依次输出字模中第 1 列的 3、2、1 行的三个 8 位。
然后依次输出字模中的第 2 列的 4、3、2、1 行。之后通过最外面的 for 循
环,完成对字模中第 1 列的 8、7、6、5 行和第 2 列的 8、7、6、5 行的输出。
完成之后 16 个 74HC595 中都写好了 8 位数据,对 16 个 74HC595 全部给一个
上升沿,就将这些寄存器中的数据一起输出到显示屏上。
程序如下:
voidinput(ucharsign)//送一帧数据,sign 表示送的列数
{
uchari,j,k,s;
k=0;
for(s=0;s<2;s++)//s 表示字数,共 2 个字
{
for(i=4;i>0;i--)
{
write595(tab[i+k-1][sign]);
}
for(j=4;j>0;j--)
{
write595(tab[j+k-1][sign+1]);
}
k+=4;
}
RCLK=0;
RCLK=1;
}行驱动程序设计
行驱动是通过控制 E1、E2 的值的不同,我们在主程序中进行实现,当 input
(0)时,输出的是显示屏上第 1、5、9、13 行中的所有列,所以这时候令
E1=0、E2=0,控制行驱动输出 Y0,令 1、5、9、13 行全亮,所以就可以将这 4
行中的点的亮灭情况显示出来。之后 input(2),同理来显示第 2、6、10、
14 行的点的亮灭情况。然后依次 input4 和 6,来显示 3、7、11、15 行和 4、
8、12、16 行。这一连串动作都在很短的时间内完成,所以我们看到屏幕上
显示出稳定的两个汉字。
程序如下:
voidmain()
{
while(1)
{
input(0);//控制两个字的前两列
E1=0;E2=0;//控制 1,5,9,13 行亮
input(2);
E1=1;E2=0;
input(4);
E1=0;E2=1;
input(6);
E1=1;E2=1;
}
}
结论
这次设计以单片机为核心,实现了汉字的显示和流动。在最初选题的时候,就是
因为这个设计的应用领域比较广,具有很大的实用价值。所以才决定做这个题目。
当然,我做的这个汉字显示系统功能比较单一,显示内容比较少。和市场上运用
的还有很大的差距,但原理基本是一样的。因为我在大四下学期由于工作需要,
去了徐州实习,一直到 4月下旬才开始做毕业设计。时间比较紧迫,而且实际设
计的经验也比较缺乏,所以只是单纯的实现了汉字的显示。没有进一步的进行功
能的扩展。
这次设计让我学到了很多,对单片机的知识又加深了一层。对大学所学的知识有
了一个很好的综合运用,动手能力和解决问题的能力也得到了加强。在这次设计
中,我终于体会到了从零开始的不易和得到结果的喜悦。过程是不易的,但结果
却是可人的,我终于得到了小小的收获。以前在 C语言上总是停留在读程序和看
程序上边,而这次却要自己编写程序,从中体会颇深。在编写过程中,总是出现
一些平时忽略的语法上的小错误,虽然大的框架是对的,但就是一些地方不行,
这还是实践少的缘故,但功夫不负有心人,结果还是令人欣慰的。
总而言之,这次毕业设计让我获益匪浅。
致谢
首先,我要感谢学院给我提供了这个课题,让我有一个亲自设计的机会。
其次,我特别要感谢我的指导老师曹卫锋老师给我提供的支持和帮助。由于我大
四的下学期在徐州实习,还要麻烦曹老师有事时特意通知我。从北京回来后又对
我的课题对我进行批注和辅导。在此,谢谢曹老师的悉心指导。
另外,我要谢谢我在北京的项目经理王珂先生,在单片机方面,他无私的传授了
我很多知识。并对我的课题提出来很多建议,还有比我早进公司的耿飚,在平时
的工作中也教会了我很多 C语言的知识,在此,谢谢你们。
还有,我要谢谢我周围的同学们,我们在一起改程序,一起调试,一起焊接电路,
是你们让我觉得这不是一件枯燥无味的事情。在此,谢谢你们。
最后,我要感谢我的父母,在背后默默地支持着我,在业余时间对我的鼓励。也
许我在一些方面还做的不够好,离你们心中理想的样子还有一定的差距。但我一
定会努力的,我爱你们。谢谢你们!
总之,感谢所有帮助和支持过我的人,谢谢你们。
参考文献
[1]汪得彪.MCS-51单片机原理及接口技术.北京:电子工业出版社,2003-48。
[2]房小翠,王金凤.单片机实用系统设计技术.北京:北京航天航空大学出版
社,1999-158。
[3]潘永雄.新编单片机原理与应用.西安:西安电子科技大学出版社,
2003-195。
[4]周航慈.单片机应用程序设计技术.北京:北京航空航天大学出版社,
1999-59。
[5]赵佩山.单片机接口技术及应用.北京:机械工业出版社,2000-295。
[6]袁涛,李月香,杨胜利单片机 C高级语言程序设计及其应用北京:北京航
天航空大学出版社 2001-176。
[7]谭浩强,C程序设计北京:清华大学出版社,2005-294。
附录
附-1STC单片机及外围电路连接图
附-2显示屏及外围电路电路图
源程序:
#include""//51单片机头文件
#defineuintunsignedint
#defineucharunsignedchar
//P1口若为 0xd8-0xdf,则扫描上八行,若为 0xe8-0xef,则扫描下八行
sbitSER=P0^0;//595数据输入端
sbitRCLK=P0^2;//595存储器锁存时钟
sbitCLK=P0^1;//595数据移位时钟
sbitE1=P0^3;//138的 A端
sbitE2=P0^4;//138的 B端
//sbitE=P0^5;//138的 G2端,若 G2为高电平,则 Y0,Y1,Y2,Y3输出均为高
电平,所以正常情况下,G2为低电平
ucharcodetab[][8]={
{0xFF,0x7F,0xFF,0x7F,0x03,0x7F,0xFB,0x03}
{0xFA,0xFB,0xB6,0xF7,0xD5,0xBF,0xEB,0xBF}
{0xEF,0xBF,0xD7,0x5F,0xDB,0x5F,0xBA,0xEF}
{0x7E,0xEF,0xFD,0xF7,0xFB,0xFB,0xF7,0xFD},//欢,由硬件知先发送第四行
倒着发,从第四行发到第一行
{0xFF,0xFF,0xDF,0x7F,0xEC,0xC3,0xED,0xDB}
{0xFD,0xDB,0xFD,0xDB,0x0D,0xDB,0xED,0xDB}
{0xED,0xDB,0xED,0x4B,0xEC,0xD7,0xED,0xDF}
{0xEF,0xDF,0xD7,0xDF,0xB8,0x01,0xFF,0xFF},//迎
};
voidwrite595(uchardat)//数据串行送入 595
{
uchari;
for(i=0;i<8;i++)
{
CLK=0;
SER=dat&0x80;
dat<<=1;
CLK=1;
}
}
voidinput(ucharsign)//送一帧数据,sign表示送的列数
{
uchari,j,k,s;
k=0;
for(s=0;s<2;s++)//s表示字数,共 2个字
{
for(i=4;i>0;i--)
{
write595(tab[i+k-1][sign]);
}
for(j=4;j>0;j--)
{
write595(tab[j+k-1][sign+1]);
}
k+=4;}
RCLK=0;
RCLK=1;
}
voidmain()
{
while(1)
{
input(0);//控制两个字的前两列
E1=0;E2=0;//控制 1,5,9,13行亮
input(2);
E1=1;E2=0;
input(4);
E1=0;E2=1;
input(6);
E1=1;E2=1;
}
}