单片机原理课程设计报告.docx
- 文档编号:29001265
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:17
- 大小:217.52KB
单片机原理课程设计报告.docx
《单片机原理课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机原理课程设计报告.docx(17页珍藏版)》请在冰豆网上搜索。
单片机原理课程设计报告
单片机原理及接口技术
课程设计报告
设计题目:
基于单片机的广告显示牌设计
学号:
姓名:
指导教师:
基于单片机的广告显示牌设计
LED就是lightemittingdiode,发光二极管的英文缩写,简称LED。
它是一种通过控制半导体发光二极管的显示方式,其大概的样子就是由很多个通常是红色的发光二极管组成,靠灯的亮灭来显示字符。
LED显示屏用来显示文字、图形、图像、动画、行情、视频、录像信号等各种信息的显示屏幕。
由于LED显示屏因为其像素单元是主动发光的,具有亮度高、视角广、工作电压低、功耗小、寿命长、耐冲击和性能稳定等优点。
因而被广泛应用于车站、码头、机场、商场、医院、宾馆、银行、证券市场、建筑市场、拍卖行、工业企业管理和其它公共场所。
LED显示屏的发展前景极为广阔,目前正朝着更高亮度、更高气候耐受性、更高的发光密度、更高的发光均匀性、可靠性、全色化方向发展。
据报道,由于发光二极管(LED)用于广告牌具有亮度高、寿命长和节能的特点,虽然其初装价格较高,但日本一些灯具生产商和广告牌经营者正看好这一产品,并努力开发相关市场。
LED节能环保的优点与当今越来越受重视的环保意识不谋而合,因此LED的应用前景良好。
LED的设计使用也不断的得到改善,以更好的适应社会需求。
1.设计任务
结合实际情况,基于AT89C52单片机的广告显示牌的设计。
该设计应满足的功能要求为:
(1)广告牌可以正常显示字体;
(2)广告牌上的字可以循环滚动;
(3)广告牌可以暂停和继续;
主要硬件设备:
AT89C52单片机、74HC154译码器芯片、4片8*8点阵显示器。
2.整体方案设计
要显示中文字,需要4片8×8的点阵显示器组合成16×16的点阵显示器才能完整的显示一个中文字。
如图2-1为整个系统的电路框架图。
图2-1显示电路框架图
从理论上讲,只要控制与组成这些图形或文字的各个所在位置相对应的器件发光,就可以得到想要的显示结果,这种同时控制各个发光点亮灭的方法称为静态驱动显示方式。
把行列总线接在单片机的I/0口,然后把上面分析到的扫描代码送入总线,就可以得到显示的汉字了。
但是若将LED点阵的行列端口全部直接接入89C52单片机,则需要使用32条I/0口,这样会造成I/0口资源的耗尽,系统也再无扩充的余地。
因此,我们在实际应用中只是将LED点阵的16条行线直接接在P0口和P2口,至于列选扫描信号则是由4—16线译码器74HCl54来选择控制,这样一来列选控制只使用了单片机的4个I/O口,节约了很多I/O口资源,为单片机系统扩充使用功能提供了条件。
本设计中,汉字扫描显示的基本过程是这样的:
单片机89C52按照设定的程序在P0和P2接口输出与内部汉字对应的代码电平送至LED点阵的行选线(高电平驱动),同时在P1.1,P1.2,P1.3,P1.4接口输出列选扫描信号(低电平驱动),即轮流给行信号输出低电平,当高电平与低电平接通,则该发光二极管亮。
在任意时刻只有一行发光二极管是处于可以被点亮的状态,其它行都处于熄灭状态。
利用人眼的视觉暂留特性合成整个汉字的显示。
再改变取表地址实现汉字的滚动显示。
3.系统硬件电路设计
3.1单片机最小系统
一般来说,单片机的最小系统包括电源,晶振,复位电路。
有了以上三块内容,单片机就能够工作了。
另外要注意的一点是,EA脚也要接高电平,告诉单片机不使用片外存储器。
3.1.1时钟晶振电路
单片机XTAL1脚和XTAL脚是外部接晶振的两个引脚,通常在接一个晶振的同时要在晶振的两个脚接两个电容,这两个电容叫晶振的负载电容,分别接在晶振的两个脚上和对地的电容,一般在几十皮法。
它会影响到晶振的谐振频率和输出幅度,使晶振频率更加稳定。
本设计中,单片机晶振采用12MHz的频率,以获得较高的刷新率,使显示更加稳定。
如图3-1所示。
图3-1单片机的时钟晶振电路原理图
3.1.2复位电路
本设计采用上电复位的方式实现复位。
上电复位电路由电容串联电阻构成,由图3-1所示,并结合“电容电压不能突变”的性质,可以知道:
当系统一上电,RST脚将会出现高电平,这个高电平持续的时间由电路的RC值来决定。
典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位。
所以我们只要适当组合RC的取值就可以保证可靠的复位。
一般文献推荐C取10uF,R取8.2K。
本设计中我们采用C取10u法拉,R取10K欧姆。
如图3-2所示为单片机的时钟晶振和复位电路原理图。
图3-2单片机的时钟晶振和复位电路原理图
3.2列驱动
3.2.174HC154芯片的特性
74HC154是一款高速CMOS器件,74HC154引脚兼容低功耗肖特基TTL(LSTTL)系列。
74HC154译码器可接受4位高有效二进制地址输入,并提供16个互斥的低有效输出。
74HC154的两个输入使能门电路可用于译码器选通,以消除输出端上的通常译码“假信
号”,也可用于译码器扩展。
该使能门电路包含两个“逻辑与”输入,必须置为低以便使能输出端。
任选一个使能输入端作为数据输入,74HC154可充当一个1-16的多路分配器。
当其余的使能输入端置低时,地址输出将会跟随应用的状态。
以下图3-3为74HC154的引脚图和实物图。
图3-3译码器74HC154引脚图
引脚说明:
1-1113-17:
输出端。
(outputs(activeLOW))
18-19:
使能输入端、低电平有效(enableinputs(activeLOW))
20-23地址输入端(addressinputs)
24:
VCC电源正(positivesupplyvoltage)
需要注意的是,只要控制端G1、G2任意一个为高电平,A、B、C、D任意电平输入都无效。
G1、G2必须都为低电平才能操作芯片。
3.2.2列驱动电路
由于16x16点阵显示器有16行,为充分利用单片机的接口,本电路中加入了一个4-16线译码器74HC154,其输入是一个16进制码,解码输出为低态扫描信号,把74HC154的G1口连接单片机89C52的P1.4引脚,来实现控制,G2引脚接地,然后以A、B、C、D四脚为输入端。
就会形成16种不同的输入状态,分别为0000~1111,然后使每种状态只控制一路输出,即会有16路输出。
如图3-4为驱动电路在proteus仿真软件中的电路原理图。
图3-4驱动电路原理图
3.3LED点阵显示屏工作原理
LED发光二极管,是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光。
LED的心脏是一个半导体的晶片。
以下为8*8点阵LED显示屏的原理图。
图3-5点阵LED原理图
晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来。
半导体晶片由两部分组成,一部分是P型半导体,在它里面空穴占主导地位,另一端是N型半导体,在这边主要是电子。
但这两种半导体连接起来的时候,它们之间就形成一个P-N结。
当电流通过导线作用于这个晶片的时候,电子就会被推向P区,在P区里电子跟空穴复合,然后就会以光子的形式发出能量,这就是LED灯发光的原理。
而光的波长也就是光的颜色,是由形成P-N结的材料决定的。
4.系统程序设计
4.1系统显示原理
每一个字由16行16列的点阵组成显示,即国标汉字库中的每一个字均由256点阵来表示。
我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。
事实上这个汉字屏不仅可以显示汉字, 也可以显示在256像素范围内的任何图形。
用8位的AT89C52单片机控制, 由于单片机的总线为8位,一个字需要拆分为2个部分。
本电路把它拆分为左部和右部,左部由16(行)*8(列)点阵组成,右部也由16(行)*8(列)点阵组成。
以显示汉字“自”为例,来说明其扫描原理:
图4-1点阵屏
单片机首先由P2口输出显示数据信号给左部分的第一行如图4-1所示,即第一行的P20---P27口。
方向为P20到P27,显示汉字“自”时,P27点亮,由左到右排,为P20灭,P21灭,P22灭,P23灭,P24灭,P25灭,P26灭,P27亮。
即二进制00000001,转换为16进制为0x01。
左部分的第一行完成后,继续扫描右半部的第一行,为了接线的方便,我们仍设计成由左往右扫描,即从P00向P07方向扫描,从上图可以看到,这一行全灭,即为00000000,16进制则为0x00。
然后单片机再次转向左半部第二行,此为P26亮,为00000010,即16进制0x02。
这一行完成后继续进行右半部分的第二行扫描,全灭,为二进制00000000,即16进制0x00。
依照这个方法,继续进行下面的扫描,一共扫描32个8位,可以得出汉字“自”的扫描代码为:
0x80,0x00,0x40,0x00,0x20,0x00,0xF8,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0xF8,0x0F,
0x08,0x08,0x08,0x08,0xF8,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0xF8,0x0F,0x08,0x08,
由这个原理可以看出,无论显示何种字体或图像,都可以用这个方法来分析出它的扫描代码从而显示在屏幕上。
4.2程序框图
4.3字模提取软件的运用
一个国标汉字是由16X16即256个点(像素)来构成的,显示一个汉字该亮哪些点这些复杂的工作都交给取模软件来完成,同时,取模软件也负责把要显示的汉字转化成程序中要用到的显示代码,代码以一定的规律表征了该亮的点(用“1”表示)与不该亮的点(用“0”表示),一共256位。
单片机负责将这些代码一段一段有规律地送到LED屏。
汉字的点阵字模是从点阵字库文件中提取出来的,就可以显示汉字了。
4.4循环程序的设计
为了是文字能够在LED显示屏上循环显示,设计了程序如下:
intpy=0;//定义偏移量
intcount=0;//定义次数
if(count<50)//设置为每闪60次指针发生一次偏移
{count++;
if(count==50)
{
count=0;//次数清零
py+=2;//每次偏移量为2
if(py>64)//指针终点
py=0;//偏移量归零,重新开始循环
}
}
count用来控制每次移位LED灯闪的次数。
这里设置为50,即每移位一次,LED灯闪50次,然后再进行下次移位。
4.5延时程序的设计
画面的稳定有两个条件:
显示延长的时间应控制在合理的范围之内,时间小了会看不清画面,时间大了画面不连续。
延时函数如下:
voiddelay(void)//延时程序
{
intj;
for(j=0;j<20;j++);//每次闪烁持续的时间,可以控制滚动速度
}
4.6指针程序的设计
为了让图像实现滚动,设计了指针p加偏移量py。
当偏移量发生变化,*(p+py)也跟着变化,这样指针就会指向下一个数组单元,实现滚动显示。
py的增量必须为2的倍数,如果为奇数,会出现左右屏交替显示的现象。
本设计将py每次的偏移量设置为2,因为如果设置太大,滚动会有加大的跳跃性,使画面失去流畅性。
voiddelay(void);
voidmain()
{
char*p;//定义指针
inti;
intcount=0;
p=&word_mu[0][0];//p指向数组起始点
while
(1)
{
for(i=0;i<16;i++)//滚动显示程序
{
P1=i;
P2=*(p+py+2*i);//左边屏幕
P0=*(p+py+2*i+1);//右边屏幕
delay();//亮延时
if(count<50)
{count++;
if(count==50)//滚动速度,count越小越快闪的次数
{
count=0;
py+=2;
if(py>64)
py=0;}
}}}
从i=0到i=15,显示完16行,并且重复50次后,指针偏移量+2,实现整体移位一行。
依此执行,直到执行完数组全部单元,然后py赋值0,即重头开始执行。
这样就实现了滚动循环显示。
5.系统调试
5.1Proteus软件仿真调试
5.1.1拖尾现象
在滚动显示的过程中,发现在切换行显示数据的时候产生拖尾现象,通过多次调试都无法解决该问题,于是决定在切换行前先关闭列驱动器。
并且延时,以此来消除切换行过程中,在人眼中产生的残影。
从而实现消隐。
设计程序如下:
for(i=0;i<16;i++)
{
P1=i;
P0=*(p+py+2*i+1);//右边
P2=*(p+py+2*i);//左边
delay();
P1_4=1;
delay();}
在切换行是,给P1.4赋值1,使P1.4引脚输出高电平,关闭74HC154芯片,从而关闭了屏幕的显示。
5.1.2指针终点设置错误造成乱码
在程序设计的过程中,因为减少了显示字数,忘记了更改指针偏移量的终点值,导致显示完成预定文字之后,尾随着显示乱码。
if(count<50)
{count++;
if(count==50)
{
count=0;
offset+=2;
if(py>225)
py=0;}
py的终点值应该等于数组总长度-2×i-1,即数组长度-31。
5.2硬件调试
图5-1在Proteus下的原理图
基于Proteus环境下仿真结果如下。
“”字样在Proteus系统下的仿真图
6.程序清单
#include
sbitP1_4=P1^4;
sbitkey=P1^5;
unsignedcharcodeword_mu[][2]={
};
voiddelay(void);
voidmain()
{
char*p;//定义指针
intpy=0;//定义偏移量
intcount=0;//灯闪的次数
inti;
p=&word_mu[0][0];//p指向数组起始点
while
(1)
{
for(i=0;i<16;i++)//滚动显示程序
{
P1=i;
P2=*(p+py+2*i);//左边屏幕
P0=*(p+py+2*i+1);//右边屏幕
delay();//亮延时
P1_4=1;//P1.4引脚赋1,即关闭译码器
delay();//灭延时
}
if(count<50)
{count++;
if(count==50)//每次移位LED灯闪的次数,可以控制滚动速度
{
count=0;
if(key==0)
{
py+=2;//每次偏移2个数组单元
if(py>225)//循环显示的终点
py=0;}//循环初始化
}
}}
}
voiddelay(void)//延时程序
{intj;
for(j=0;j<20;j++);//每次闪烁持续的时间,可以控制滚动速度
}
7.小结
本设计学到的内容:
一、通过查阅大量的相关资料,详细了解了LED的发光原理和LED显示屏的原理,清楚地了解了LED显示屏与其它显示屏相比较有哪些优点。
二、通过本次设计,我掌握了有关单片机控制的设计思想和设计方法,对74HC154等芯片有了更近进一步的了解,并对其进行测试和加以应用学习,从而获得了新的知识。
三、本文设计的LED显示屏能够实现在目测条件下LED显示屏各点亮度均匀充足,而且显示时稳定、清晰无串扰。
显示效果有静止、移入移出等。
四、学会了Proteus、KeilC等软件的使用,并最终完成设计。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 课程设计 报告