单片机课程设计报告书.docx
《单片机课程设计报告书.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告书.docx(21页珍藏版)》请在冰豆网上搜索。
单片机课程设计报告书
武汉理工大学华夏学院
课程设计
课程名称嵌入式应用课程设计
题目无线LED控制器
专业:
软件工程
班级:
1091
学号:
10212809108
姓名:
王伟
成绩:
指导教师:
夏婷
2012年6月20日
课程设计任务书
设计题目:
无线LED控制器设计
设计目的:
1.巩固和加深课堂所学知识;
2.学习掌握一般的软硬件的设计方法和查阅、运用资料的能力;
3.掌握LED点阵显示器芯片的工作原理、MCS-51单片机外围扩展芯片8255、74LS273芯片及串口通信的接口设计和编程。
设计任务:
(在规定的时间内完成下列任务)
使用MCS-51单片机仿真实验仪DVCC-52196JH++作为实验平台,采用C语言进行程序设计,在16×16LED点阵显示器上实现汉字移动显示,并利用GPRS模块(串口通信),采用简单通信协议,通过PC机无线控制LED屏,可改变LED屏中显示的汉字及汉字的移动方向。
时间安排:
(部分时间,某些工作可以自己安排重叠进行)
时间
课程设计内容
方式
6月17日
上午
介绍题目,分任务,介绍MCS-51单片机硬件结构、C语言程序设计基础
讲座/案例
下午
查阅资料,功能分析,熟悉软件开发环境
上机
6月18日
上午
硬件设计、拟定实验电路
讲座/案例
下午
绘制硬件原理图、接线图,并连线
上机
6月19日
上午
单片机的接口编程、中断编程
讲座/案例
下午
绘制程序流程图,编写程序
上机
6月20日
上午
单片机C语言高级应用
讲座/案例
下午
调试程序、运行系统,撰写设计报告
上机
6月21日
课程答辩,下午4:
00前交齐设计报告
评审
具体要求:
设计报告撰写格式要求
(按提供的设计报告统一格式撰写),应包括如下内容:
①设计任务与要求②总体方案与说明③硬件原理图与说明
④实验接线图与说明⑤软件主要模块流程图⑥源程序清单与注释
⑦问题分析与解决方案(包括调式记录、调式报告,即在调式过程中遇到的主要问题、解决方法及改进设想);
⑧小结与体会
附录:
①源程序(必须有简单注释)②使用说明③参考资料
指导教师签名:
2012年6月17日
教研室主任(或责任教师)签名:
2012年6月17日
目录
第1章需求分析..................................................................................................................1
1.1设计题目……………………………………………………………………………1
1.2课程设计任务及要求…………………………………………………………………1
1.3软硬件运行环境及开发工具………………………………………………………1
1.4系统的功能要求………………………………………………..………………..1
第2章概要设计……………………………………………………………………………1
2.1设计方案..……………………………………………………………………………1
2.2工作原理………………….………….………………………………………………1
2.2.1LED点阵的显示文字图形原理....................................................................2
2.2.2单片机控制电路2
2.2.3列驱动电路4
2.2.4行驱动电路6
2.2.5晶振电路…………………….………………………….…………………...….7
2.3设计的思路图……………………………………………………………………....8
第3章详细设计……………………………………………………………………………8
3.1硬件设计与实现………………………………………………………………………8
3.1.1复位模块………..………………………………..……………………….…….8
3.1.2字模模块…………..…………………………………………………………..9
3.1.3系统实现原理图模块………………………..………………………………...9
3.2系统主程序流程…………………………………………………………………..…10
3.3功能模块详细设计………………………………………………………………..11
3.3.1正向慢转模块11
3.3.2正向快转模块11
3.3.3中断程序框图……………………………………………............................11
第4章系统调试与操作说明…………………………………………………………..12
4.1系统调试………………………………………………………………………………..12
4.2问题分析与解决………………………………………………………………………..13
第5章课程设计总结与体会…………………………………………………………..13
参考文献……………………………………………………………………………………..14
附录:
源程序…………………………………………………………………………..15
第1章需求分析
1.1设计题目
无线LED控制器设计
1.2课程设计任务及要求
使用MCS-51单片机仿真实验仪DVCC-52196JH++作为实验平台,采用C语言进行程序设计,在16×16LED点阵显示器上实现汉字移动显示,并利用GPRS模块(串口通信),采用简单通信协议,通过PC机无线控制LED屏,可改变LED屏中显示的汉字及汉字的移动方向。
1.3软硬件运行环境及开发工具
硬件环境:
微机系列,内存在256M以上
软件环境:
MicrosoftWindowsXP
开发工具:
Proteus7Pofessional
MCS-51单片机仿真实验仪DVCC-52196JH++
1.4系统的功能要求
能横向滚动显示“单片机课程设计”几个字符。
第2章概要设计
2.1设计方案
由于MCS-51单片机仿真实验仪DVCC-52196JH++的LED点阵中没有16X16的点阵,可以通过其四个8X8的LED点阵对应的行和列分别连接起来构成16X16点阵,行和列的交叉处有一个LED,再分别给行和列相应的高低电平,那么对应的LED就发光。
16×16的点阵共有256个发光二极管,显然单片机没有这么多端口,我们采用锁存器来扩展端口,按8位的锁存器来计算,16×16的点阵需要256/8=32个锁存器。
此时共需要32根行列控制线,对单片机来说不够,需要外扩I/O接口,我们选择的是8255A芯片。
LED点阵显示系统中各模组的显示方式有静态和动态显示两种。
静态显示原理简单、控制方便,但硬体接线复杂,在实际应用中一般采用动态显示方式,动态显示采用扫描的方式工作,由峰值较大的窄脉冲驱动,从上到下逐次不断地对各行进行选通,同时又向各列送出表示图形或文字资讯的脉冲信号,反复执行以上操作,就可显示各种图形或文字。
2.2工作原理
2.2.1LED点阵的显示文字图形原理
LED驱动显示采用动态扫描方法,动态扫描方式是逐行轮流点亮,这样扫描驱动电路就可以实现多行的同名列共用一套列驱动器。
把所有同一行的发光管的阴极连在一起,把所有同一列的发光管的阳极连在一起,先送出对应第1列发光管亮灭的数据并锁存,然后选通第1列使其燃亮一定的时间,然后熄灭;再送出第2列的数据并锁存,然后选通第2列使其燃亮相同的时间,然后熄灭;….第16列之后,又重新燃亮第1列,反复轮回。
当这样轮回的速度足够快(每秒23次以上),由于人眼的视觉暂留现象,就能看到显示屏上稳定的图形。
2.2.2单片机控制电路
AT89C51是一种带4K字节FLASH储存的低电压、高性能CMOS8位微处理器,俗单片机。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。
单片机系统如图所示:
图2.1AT89C51单片机系统
AT89C51单片机系统
(1)管脚说明
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
(2)P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出
动态扫描的意思简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如16行)的同名列共用一套列驱动器。
具体就16×16的点阵来说,我们把所有同一行的发光管的阳极连在一起,把所有同一列的发光管的阴极连在一起(共阳的接法),先送出对应第一行发光管亮灭的数据并锁存,然后选通第一行使其燃亮一定的时间,然后熄灭;再送出第二行的数据并锁存,然后选通第二行使其燃亮相同的时间,然后熄灭;……第十六行之后又重新燃亮第一行,这样反复轮回。
当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,我们就能看到显示屏上稳定的图形了。
显示数据通常存储在单片机的存储器中,按8位一个字节的形式顺序排放。
显示时要把一行中各列的数据都传送到相应的列驱动器上去,这就存在一个显示数据传输的问题。
从控制电路到列驱动器的数据传输可以采用并列方式或串行方式。
采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面无疑是十分经济的。
但是,串行传输过程较长,数据按顺序一位一位地输出给列驱动器,只有当一行的各列数据都以传输到位之后,这一行的各列才能并行地进行显示。
这样,对于一行的显示过程就可以分解成列数据准备(传输)和列数据显示两部分。
对于串行传输方式来说,列数据准备时间可能相当长,在行扫描周期确定的情况下留给行显示的时间就太少了,以致影响到LED的亮度
2.2.3列驱动模块
列驱动用74154芯片来实现,由于点阵显示器有16行,本电路中加入了一个4-16线译码器74154,再通过7406取反,其输入是一个16进制码,解码输出为低态扫描信号,它们的管脚示意图如图4所示。
把74154的E2引脚接地,然后以A、B、C、D四脚为输入端。
就会形成16种不同的输入状态,分别为0000~1111,然后使每种状态只控制一路输出,即会有16路输出。
列驱动电路部分如下:
图2.2列驱动电路
74154介绍
74154这种4线—16线译码器非常适合用于高性能存储器的译码器。
当两个选通输入E1和E2为低时,它可将4个二进制编码的输入译成16个互相独立的输出之一。
实现解调功能的办法是:
用4个输入线写出输出线的地址,使得在一个选通输入为低时数据通过另一个选通输入。
当任何一个选通输入是高时,所有输出都为高。
74LS154引脚说明如下表:
表174LS154引脚说明
符号
引脚
描述
~
~
1~11,13~17
输出端
GND
12
GND电源地
~
18~19
使能输出端
A、B、C、D
20~23
地址输出端
Vcc
24
VCC电源正
2.2.4行驱动电路
由于4点阵显示器有16行,为充分利用单片机的接口,本电路中加入了一个4-16线译码器74LS154,其输入是一个16进制码,解码输出为低态扫描信号,它的结构如图3-4所示。
图2.374LS154结构图
74LS154引脚说明如表3-2
表274LS154引脚说明
符号
引脚
描述
~
~
1~11,13~17
输出端
GND
12
GND电源地
~
18~19
使能输出端
A、B、C、D
20~23
地址输出端
Vcc
24
VCC电源正
图2.4行驱动电路
如图3-5所示的行驱动电路中,把74LS154的G1和G2引脚接地,然后以A、B、C、D四脚为输入端。
就会形成16种不同的输入状态,分别为0000~1111,然后使每种状态只控制一路输出,即会有16路输出。
如果一行64点全部点亮,则通过74LS154的电流将达640mA,而实际上,74LS154译码器提供不了足够的吸收电流来同时驱动64个LED同时点亮,因此,应在74LS154每一路输出端与16x64点阵显示器对应的每一行之间用一个三极管来将电流信号放大,本文选用的是三极管8550。
这样,74LS154某一输出脚为低电平时,对应的三极管发射极为高电平从而使点阵显示器的对应行也为高电平。
2.2.5晶振电路
图2.5单片机晶体振荡器电路
晶振是电路中常用用的时钟元件,全称是叫晶体震荡器,在单片机系统里晶振的作用非常大,他结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。
晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。
在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。
高级的精度更高。
有些晶振还可以由外加电压在一定范围内调整频率,称为压控振荡器(VCO)。
晶振的作用是为系统提供基本的时钟信号。
通常一个系统共用一个晶振,便于各部分保持同步。
有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。
2.3设计的思路图
图2.6设计的思路图
第3章详细设计
3.1硬件设计与实现
3.1.1复位模块
图3.1单片机复位电路
当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。
如果RST持续为高电平,单片机就处于循环复位状态。
根据应用的要求,复位操作通常有两种基本形式:
上电复位和上电或开关复位。
上电复位要求接通电源后,自动实现复位操作。
常用的上电复位电路如图3-2A中左图所示。
图中电容C1和电阻R1对电源十5V来说构成微分电路。
上电后,保持RST一段高电平时间,由于单片机内的等效电阻的作用,不用图中电阻R1,也能达到上电复位的操作功能,上电或开关复位要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。
常用的上电或开关复位电路如上图所示。
上电后,由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平。
当单片机已在运行当中时,按下复位键K后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。
3.1.2字模模块
字模软件支持汉语拼音自动命名C语言数组格式,支持汉语拼音自动命名汇编语言标号DB表格式,集成汉字自动识别功能,清除非汉字字符,提取汉字功能,适合用于产生点阵LED大屏幕、LCD液晶汉字字模,可用作开发辅助工具,得到精减汉字库,节约有限的ROM空间资源。
也可用作带点阵LCD显示系统的汉化工具或其它需要汉字点阵数据的地方。
图3.2向字模软件中输入字符
3.1.3系统实现原理图模块
图3.3系统的原理图
3.2系统主程序流程
图3.4系统主程序流程图
3.3功能模块详细设计
3.3.1正向慢转模块
while
(1)
{
if(count==160)count=0;
for(i=0;i<32;i++)
if(i<16)
Row[i]=hanzi[count+i];
else
Row[i]=hanzi[160+count+i];
TR0=1;
Delay(100);
count++;
TR0=0;
P2=0xff;
}
在主程序中加入这段代码就可以实现LED显示字的正向转动,在voidDelay(uintx)函数中传入一个小的值(如上述程序中的传入100)即可实现慢转。
3.3.2正向快转模块
LED显示字的正向转动的实现同上,慢转实现只需在在voidDelay(uintx)函数中传入一个大的值(如上述程序中的传入1000)即可。
3.3.3中断程序框图
图3.5中断程序流程图
第4章系统调试与操作说明
4.1系统调试
LED显示屏硬件电路只要器件质量可靠,管脚焊接正确,一般无需调试即可正常工作。
软件部分需要调试的主要有显示屏刷新频率及显示效果两部分。
显示屏刷新率由定时器T0的溢出率和单片机的晶振频率决定,表4.1给出了实验调试时采用的频率及其对应的定时器T0初值。
表3显示屏刷新率(帧频)与T0初值关系表(24M晶振)
刷新率(Hz)
25
50
62.5
75
85
100
120
T0初值
0xec78
0xf63c
0xf830
0xf97e
0xfa42
0xfb1e
0xfbee
从理论上来说,24Hz以上的刷新率就能看到连续稳定的显示,刷新率越高,显示越稳定,同时刷新率越高,显示驱动程序占用的CPU时间也越多。
实验证明,在目测条件下刷新率40Hz以下的画面看起来闪烁较严重,刷新率50Hz以上的已基本觉察不出画面闪烁,刷新率达到85Hz以上时再增加画面闪烁将没有明显改善。
4.2问题分析与解决
在系统调试过程中,我们遇到了许多的问题。
通过不断分析这些问题和不断重复调试最终都得到了很好的解决。
下面列举几个突出的问题:
问题一:
LED显示屏上字出现了,但是就是不能实现移动的效果。
解决方案:
通过不断尝试,查阅资料及老师的帮助,才将它给实现了。
只需在该死循环中加入下列的代码即可。
while
(1)
{
if(count==160)count=0;
for(i=0;i<32;i++)
if(i<16)
Row[i]=hanzi[count+i];
else
Row[i]=hanzi[160+count+i];
TR0=1;
Delay(100);
count++;
TR0=0;
P2=0xff;
}
问题二:
LED显示屏上显示的字出现了乱码的情况。
解决方案:
改变数组的大小,有多少个字就给分配多大的大小。
第5章总结和体会
本次课程设计在指导老师的细心指导下和严格要求下完成的。
在编写代码的过程中,我不仅了解了Protues仿真软件和Keil软件,更是全面地温习了以前所学过的知识,用理论联系实际并结合单片机原理课程和解决实际问题,巩固、加深和扩展了有关单片机设计方面的知识。
尤其重要的是让我们养成了科学的习惯,在设计过程中一定要注意掌握设计进度,按预定计划完成阶段性的目标,在基础设计阶段,注意设计计算与结构设计交替进行,采用正确的设计方法。
在这次实训中,老师通过分组来协调完成这个项目,这种做法不仅让我们学会了如何在以后的工作中如何划分职责及如何将这个项目稳步的进行完。
整个设计过程中注意对设计资料和计算数据的保存和积累,保持记录的完整性。
在课程设计的实践中进行了设计基本技能的训练,掌握了查阅和使用标准、规范及相关技术资料的基本技能以及计算、数据处理等方面的能力。
通过对通用89C51单片机处理器铁电存储器芯片、常用元器件的设计,掌握了一般单片机设计的程序和方法,让我们对整个单片机程序的设计,C51语言有了一个比较深的理解。
还有就是增强了自身的动手能力,把以前书本上讲的或是没有讲的,通过次课程设计具体的实施,使自己真正得到锻炼。
在本次课程设计过程当中,指导老师和其他老师以及同学们都给予了很大的帮助支持,老师严谨的治学态度和务实的求知精神给我留下了很深的印象,他鼓励我孜孜不倦,锐意进取,特别是在困难的时候,他有意识地培养我独立思考和解决问题的能力。
刘老师的严格要求,令我以后的工作和生活当中受益匪浅。
在此,对他们所给予的指导和帮助表示最衷心的感谢。
参考文献:
[1]陈孟建等编著.C语言程序设计.电子工业出版社,2006.6:
19~36,171~182.
[