湖南人文科技学院
课程设计报告
课程名称:单片机原理及应用课程设计
设计题目: 闪烁LED小灯的设计 系 别: 通信与控制工程系 专 业: 通信工程专业 班 级: 0602班 学生姓名: 林飞 学 号: 06416211 起止日期: 2009年6月8日~ 2009年6月19日 指导教师: 方智文 李朝鹏 教研室主任: 刘建闽
指导教师评语: 指导教师签名: 年 月 日 成项 目 权重 绩评0.2 1、设计过程中出勤、学习态度等方面 定 0.5 2、课程设计质量与答辩 0.3 3、设计报告书写及图纸规范程度 总 成 绩 教研室审核意见: 教研室主任签字: 年 月 日 成绩 教学系审核意见: 主任签字: 年 月 日
摘 要
当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。可以说,智能控制与自动控制的核心就是单片机,自计算机问世以来,单片机技术在社会各领域中得到了广泛的应用,在流水灯控制系统中,单片机更是取代了由齿轮调节延迟时间的旧式市发展速度,成为日后此系统中的核心部分。由于单片机具有一些突出的优点:体积小、功能强、成本低、应用面广,、重量轻、电源单一、功耗低;功能强、价格低等特点;数据大都在单片机内部传送,运行速度快、抗干扰能力强、可靠性高,所以单片机被广泛的应用于测控系统、数据采集、智能仪器仪表、机电一体化产品、智能接口、计算机通信以及单片机的多级系统等领域。
关键词:单片机;集成块;I/O口;中断;扫描;LED灯;STC89C52;
目 录
摘 要 ........................................................................................................................................ 1 目 录 ........................................................................................................................................ 1 一、设计要求 ............................................................................................................................ 1
1.1基本部分 ....................................................................................................................... 1 二、实验方案与原理分析 ........................................................................................................ 1
2.1方案一 ........................................................................................................................... 1 2.2、方案二 ........................................................................................................................ 2 2.3、方案三 ........................................................................................................................ 3 三、方案对比 ............................................................................................................................ 3 四、各种应用软件及芯片的简介 ............................................................................................ 3
4.1、ST89C52的简介 ........................................................................................................ 4 4.2、LED灯的介绍............................................................................................................ 5 五、程序说明 ............................................................................................................................ 6
5.1、初始化程序 ................................................................................................................ 6 5.2、键盘的消抖 ................................................................................................................ 7
a. 硬件消抖.................................................................................................................. 7 b. 软件消抖 ................................................................................................................. 7 c:显示功能程序 ........................................................................................................... 8
六、总结与思考及致谢 .......................................................................................................... 10 七、参考文献 .......................................................................................................................... 11 附录一 ......................................................................................................错误!未定义书签。 附录二、 .................................................................................................................................. 12 附录三 ......................................................................................................错误!未定义书签。 附录四 ......................................................................................................错误!未定义书签。
闪烁LED小灯的设计
一、设计要求
利用单片机作为控制核心,完成功能:本设计的闪烁小灯控制器,
具体要求如下:可使小灯轮流点亮,可使小灯轮流点亮、逐点点亮、间隔点亮。通过按键来进行切换。
1.1基本部分
(1)主程序 (2) 中断程序 (3) 扫描子程序 (4)延时程序
二、实验方案与原理分析
实验总体电路构造方案比较简单,主要包括键盘控制电路(用脉冲按键开关对电路进行控制)和显示电路(单片机控制发光二极管的显示)。
按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~12MHz工作频率,使用ST89C52单片机时无须外扩存储器。因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。
2.1方案一
利用STC89C52A芯片做为CPU。
只有3.3V工作电压的STC89C52单片机,使得产品更小,更轻,功耗更低降低成本,提升性能,原有程序直接使用,硬件无需改动。。如果相关新增功能没有用到,则不需看相应部分。用STC提供的STC-ISP.exe工具将您原有的代码下载进STC相关的单片机即可,或用通用编程器编程
另外TXD和RXD是用于异步串行通信的。其实STC系列单片机的ISP下载线就是一个max232芯片连接STC和计算机的串行通信口。计算机把程序从九针串口送到MAX232芯片,电平转换后送进单片机的串行口,也就是TXD和RXD。然后单片机的串行模块把数据送到程序区。
方案一系统方框图如下:
CPU(运算部件)数据存储器P0口P2口程序存储器特殊功能寄存器定时、计数器串行口(控制部件)P1口中断系统P3口图 1 系统方框图
2.2、方案二
利用MSP430芯片做为CPU。
MSP430各端口具有丰富的控制寄存器供用户实现相应的操作。其中P1,P2具有7
个寄存器,P3~P6具有4个寄存器。通过设置寄存器我们可以实现:(1)每个I/O位独立编程;(2)任意组合输入,输出和中断;(3)P1,P2所有8个位全部可以用作外部中断处理;(4)可以使用所以指令对寄存器操作;(5)可以按字节输入、输出,也可按位进行操作; 方案二的框图如下:
XINXOUTACLKMCLK闪存器内存256B比较器P1口8个IO口16MhzCPU16个寄存器启动定时寄存器JTAG接口看门狗电路掉电保护P2.X&XIN/XINOUTP2口8个IO口VCCVSS基本的时钟系统SMCLKP1.x&JTAG图 2 方案二系统框图
2
2.3、方案三
框图略。利用芯片PIC16FA做为主要芯片。原理图见附录中的PIC16FA.,此芯片具有高性能RISC CPU.仅有35条单字指令,除程序分支指令为两个周期外,其余均为单周期指令,有14个中断源,8个深度的硬件堆栈,也是支持直接,间接和相对寻址方式。
三、方案对比
利用STC89C52A芯片做为CPU时在掉电时典型功耗为0.5uA, 还可由外部中断唤醒,中断返回后,继续执行原程序。空闲模式,典型功耗为2mA。正常工作模式,典型功耗为4mA - 7mA。超强抗干扰STC89C51RC / RD+系列单片机。 I/O口输入/输出口经过特殊处理,很多干扰是从I/O进去的,每个I/O均有对VCC/对GND二级管箝位保护。电源单片机内部的电源供电系统经过特殊处理,很多干扰是从电源进去的。时钟,单片机内部的时钟电路经过特殊处理,很多干扰是从时钟部分进去的。看门狗,单片机内部的看门狗电路经过特殊处理,打开后无法关闭,可放心省去外部看门狗。复位电路,单片机内部的复位电路经过特殊处理,很多干扰是从复位电路部分进去的,STC89C51RC/RD+系列单片机为高电平复位。推荐外置复位电路为MAX810/STC 。 而在用MSP430芯片做为CPU时,MSP430系统中没有专门的输入/输出指令,输入/输出操作通过传送指令来实现。当任一事件引起的中断进行处理时,PXIFG.0~PXIFG.7不会自动复位,必须由软件来判断是对哪一个事件,并将相应的标志复位并且外部中断事件的时间必须保持不低于1.5倍的MCLK时间,以保证中断请求被接受,且使相应中断标志同时端口P3、P4、P5、P6没有中断能力,端口COM和S,他们实现必需要与液晶片的直接接口相连。对于方案三中,在当中断发生时,中断标志位置1,不管它的相应使能位或全体使能位的状态,用户软件在使能一个中断之前保证合适的中断标志位清零。且价格比ST89C52要贵得多。
尤其重要的是STC89C52A芯片便宜,且对于我们所需功能不是很多,且对于这个要求不是很高的LED灯点亮的情况下,都能满足条件。因此我是毫不犹豫的选择了STC89C52A芯片做为我的主芯片;
四、各种应用软件及芯片的简介
单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-5
3
1单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
4.1、ST89C52的简介
如外部不加上拉,或外部上拉到Vcc,上电复位后单片机从内部开始执行程序,当外部下拉到地,上电复位后单片机上电复位后单片机从内部开始执行程序;从外部开始执行程序。阻容复位时,电容为10uF,电阻为10K;RC/RD+ 系列单片机RESET 脚内部没;电容C2 可接47~33pF(<24MHz),30,22,15pF,33M 以上15pF;6M 以下47pF,100pF-180pF;下拉电阻,必须用此10K 电阻;单片机内部的复位电路经过特殊处理,很多干扰是从复位电路部分进去的,STC89C51RC/RD+系列单片机为高电平复位。推荐外置复位电路为 MAX810/STC810,STC6344,STC6345,813L,706P;也可用R/C 复位,10uF 电容/10k 电阻,22uF/8.2k 等。宽电压,不怕电源抖动5V: 6v - 3.4v 3V: 4v - 1.9v; 外部时钟频率降一半: 传统的8051 为每个机器周期12 时钟,如将STC 的增
强型8051 单片机在ISP 烧录程序时设为双倍速(即6T 模式,每个机器周期6 时钟),则可将单片机外部时钟频率降低一半,有效的降低单片机时钟对外界的辐射 单片机内部时钟振荡器增益降低一半: 在ISP 烧录程序时将OSCDN 设为1/2 gain
可以有效的降低单片机时钟高频部分对外界的辐射,5V单片机外部晶振频率<24MHz时,3V;单片机外部晶振频率<16MHz 时,将OSCDN 设为1/2 gain。
4
图 3 STC芯片图
4.2、LED灯的介绍
该灯使用5V电源供电,220V交流电经C1降压电容降压后经全桥整流再通过C2滤波
后经限流电阻R3给串联的38颗LED提供恒流电源.LED的额定电流为20mA,但是我们在制作节能灯的时候要考虑很多方面的因素对LED的影响,包括光衰和发热的问题,我们在做这种灯的时候因为LED的安装密度比较高,热量不容易散出,LED的温度对光衰和寿命影响很大,如果散热不好很容易产生光衰,因为LED的特性是温度升高电流就会增大,所以
5
一般在做大功率照明时散热的问题是最重要的,将影响到LED的稳定性,小功率一般都采取自散热方式,所以在电路设计时电流不宜过大.所以一定要有个保护电阻,电容C1还得有一个卸放电阻,限流电阻防止电压升高和温度升高LED的电流增大,C2是滤波电容,实际在LED电路中可以不用滤波电路,C2是用来防止开灯时的冲击电流对LED的损害,开灯的瞬间因为C1的存在会有一个很大的充电电流,该电流流过LED将会对LED产生损伤,有了C2的介入,开灯的充电电流完全被C2吸收起到了开灯防冲击保护.该电路是小功率灯杯最实用的电路,占用体积小可以方便的装在空间较小的灯杯里,现在被灯杯产品广泛的采用.优点:恒流源,电源功耗小,体积小,经济实用.但是在设计时降压电容要采用耐压在400V以上的涤纶电容或CBB电容,滤波电容要用耐压250v以上.此电路适合驱动20-40只20mA的LED.
五、程序说明
程序中我们是可以逐个控制P1端口的每个位来实现的,但是程序显得会有点复杂,而我利用循环移位指令及查表,采用循环程序结构进行编程。我们在程序一开始就给P1口送一个数,这个数本身就让P1.0先低,其他位为高,然后延时一段时间,再让这个数据向高位移动,然后再输出至P1口,这样就实现“流水”效果啦。由于8051系列单片机的指令中只有对累加器ACC中数据左移或右移的指令,因此实际编程中我们应把需移动的数据先放到ACC中,让其移动,然后将ACC移动后的数据再转送到P1口,这样同样可以实现“流水”效果。具体编程如下所示,程序结构确实简单了很多。
运用查表法所编写的流水灯程序,能够实现任意方式流水,而且流水花样无限,只要更改流水花样数据表的流水数据就可以随意添加或改变流水花样,真正实现随心所欲的流水灯效果。我们首先把要显示流水花样的数据建在一个以TAB为标号的数据表中,然后通过查表指令“MOVC A,@A+DPTR”把数据取到累加器A中,然后再送到P1口进行显示
5.1、初始化程序
通过扫描P3.2口,判断是否有按键按下,然后再20H内存单元的低3位的对应位置1标志,确定应执行的闪烁功能。当20H.0为1时,发光管轮流点亮;当20H.1为1时,发光管逐点点亮;当20H.2为1时,发光管间隔点亮。在主程序对20H的低3位进行位值判定后,转入相应的闪烁控制程序。上电初始化时,对20H的最低置1,系统进入轮流点亮方式.
6
5.2、键盘的消抖
通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号小型如图2-3。由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动。抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒按键的抖动,可用硬件或软件两种方法。 如下图所示:
图 4 去抖图
a. 硬件消抖
在键数较少时可用硬件方法消除键抖动。当按键未按下时,输出为1;当键按下
时,输出为0。此时即使用按键的机械性能,使按键因弹性抖动而产生瞬时断开(抖 动跳开B),中要按键不返回原始状态A,双稳态电路的状态不改变,输出保持为0,不会产生抖动的波形。也就是说,即使B点的电压波形是抖动的,但经双稳态 电路之后,其输出为正规的矩形波。这一点通过分析RS触发器的工作过程很容易得到验证。 b. 软件消抖
如果按键较多, 常用软件方法去抖, 即检测出键闭合后执行一个延时程序, 产生
5ms~10ms的延时, 让前沿抖动消失后再一次检测键的状态, 如果仍保持闭合状态电平, 则确认为真正有键按下。当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。以下是本次设计的软件消抖子程序块: DELAY:MOV R3,#20 ; 延时0.2秒 D1: MOV R4,#20 D2: MOV R5,#248
7
,改变R3的值可以改变延时间的长短
DJNZ R5,$ DJNZ R4,D2 DJNZ R3,D1 RET
;延时时间为513us
DL512:MOV R2,#0FFH LOOP1:DJNZ R2,LOOP1 RET
;10ms延时子程序(调用20次0.5ms延时子程序) DL10MS:MOV R3,#14H LOOP2:LCALL DL512 DJNZ R3,LOOP2 RET
;延时子程序,改变R4寄存器初值可改变闪烁的快慢(时间为25ms*15) DL05S:MOV R4,#0FH LOOP3:LCALL DL25MS DJNZ R4,LOOP3 RET
;25ms延时子程序,调用扫键子程序延时,可快速读出功能按键值 DL25MS: MOV R5,#0FFH LOOP4:LCALL KEYWORK DJNZ R5,LOOP4 RET
c:显示功能程序
我们主要是从显示设备上获取微机系统的信息的,因此,我们每操作一下,显示
设备上都应该有一定的反应。也就是说监控程序需要调用显示模块。不同的操作就需要显示不同的内容。这也说明各执行模块对显示模块的驱动方式是不同的。但是没有操作的时候,显示的内容也是要有变化的,如现场各个量的变化情况。在安排中断程序时,中断程序也是要调用显示模块。这样一来我们可以得到一种比较好的方法就是只让一处调用显示模块,其他各处均不得直接调用显示模块,但是有权力申请。我们只要设置一个标志,当某个模块需要时,将申请标志置位,同时设定有关显示内容。这样一来就不
8
会发生冲突了。为了使显示模块能及时反映系统需要,应将显示模块安排在一个重复执行的循环。这样处理起来也就比较方便,只要在监控程序的汇合处调用显示模块就可以了。不过在为了避免出现显示混乱。解决这个的办法是在申请显示前,先检查是否已经有显示申请,如果有,就不再申请,等待下次机会;如果没有,则先置位申请标志,再将显示内容送到显示缓冲区。这时就不必担心其他的前台模块来打扰了,就可以得到一次完整的显示机会。
显示程序由显示主程序和显示子程序组成。显示主程序负责每次显示地址首址(在A寄存器中)、第个数字的显示时间和下一个显示地址的间隔用延时来处理。在显示子程序中,1ms延时程序是用调用键扫描子程序的方法实现的。主程序如附录(四)延时程序所示.
第一种功能就是轮流点亮,我采用的带进位的左移指令这样的话也就是使灯从11111111变成
11111110>11111101>11111011>11110111>11101111>11011111>10111111>01111111>11111111.程序如AAA所示;
第二种功能就是逐点点亮,为了方便,我是用了查表的方式把整个显示放在一个TAB中。也就是为了方便查表使用。只要我让其在最开始时就把指针放在表头位置,然后一步一步查表就可以得到我们想要的效果。
第三种功能是间隔点亮,这个功能是最简单的了,我们只要赋好了初值,也就是关键是把初值赋成了10101010,也就是一开始便让他是间隔点亮。这样一来,我们只要用一个指令CPL也就是逐位取反可以得到,但是仔细一点会发现,我们只要通过移位指令就可以了。我就是用的RL移位指令来实现我们所需要的这种功能。
对于三种功能的实现,只要利用按键就可以进行切换。这就是这次课程设计的总体设计任务的实现。
9
六、总结与思考及致谢
我们进行了为期两周的课程设计。通过这次课程设计,我拓宽了知识面,锻炼了能力,综合素质得到较大提高。而安排课程设计的基本目的,是在于通过理论与实际的结合、人与人的沟通,进一步提高思想觉悟和领悟力。尤其是观察、分析和解决问题的实际工作能力。作为整个学习体系的有机组成部分,课程设计虽然安排在两周进行,但并不具有绝对独立的意义。它的一个重要功能,在于运用学习成果,检验学习成果。运用学习成果,把课堂上学到的系统化的理论知识,尝试性地应用于实际设计工作,并从理论的高度对设计工作的现代化提出一些有针对性的建议和设想。检验学习成果,看一看课堂学习与实际工作到底有多大距离,并通过综合分析,找出学习中存在的不足,以便为完善学习计划,改变学习内容与方法提供实践依据。对我们通信专业的本科生来说,实际能力的培养至关重要,而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践。这也是一次预演和准备毕业设计工作。通过课程设计,让我们找出自身状况与实际需要的差距,并在以后的学习期间及时补充相关知识,为求职与正式工作做好充分的知识、能力准备,从而缩短从校园走向社会的心理转型期。课程设计促进了我系人才培养计划的完善和课程设置的调整。近年来,我系为适应学生的实践需要陆续增设与调整了一系列课程,受到同学的欢迎,其中这次的设计很受同学们的喜欢。课程设计达到了专业学习的预期目的。在两个星期的课程设计之后,我们普遍感到不仅实际动手能力有所提高,更重要的是通过对软件开发流程的了解,进一步激发了我们对专业知识的兴趣,并能够结合实际存在的问题在专业领域内进行更深入的学习。并且在这次课程设计的过程中,我真正接触到了硬件,经历从对硬件方面知识的欠缺到熟悉的过程,通过这次实验,第一次觉得原来硬件并不像我想象中的那样难,相反地,它是一门很有意思的课程,那么多不同的小小的芯片组合在一起竟然可以实现你想象不到的效果,真的是很神奇!以前只是觉得软件里的程序很神奇,因为就是那些密密麻麻的代码组合在一起也可以实现很特别的功能,现在看来硬件也蛮有意思的,总的说来,计算机真的是一门很神奇的课程,不管在哪些方面,都起着举足轻重的作用,想想现在的各行各业,哪个不用到微型机,对于学习通信专业的我来说,这应该是个警示,在剩下的大学生活里,我应该好好珍惜,好好学习各方面的知识,这样以后在工作中也不至于落下笑话,至少要让别人觉得自己确实是学通信工程专业出去的。至少在单片机方面也是了解了一些些,我相信这次课程设计会对我以后的工作会有很大程度的益处,在此还要谢谢方老师和李老师两位的用心指导!
10
七、参考文献
[1] 朱定华,戴汝平.单片微机原理与应用.(M) 北京:清华大学出版社,2003
[2]刘和平 《PIC16F87X单片机使用软件与接口技术 C语言及其应用》.北京航空航天大学 出版社,2002
[3]李朝青 《PC机及单片机数据通信技术》. 北京航空航天大学出版,2000
[4]刘立民 《MCS-51系列单片机应用系统设计》.北京航空航天大学出版社,1999.5.07 [5]王有绪 《PIC系列单片机接口技术及应用系统设计》.北京航空航天大学出版社,2001.4.5
[6]潘新民 《微型计算机控制技术》.人民邮电出版社 ,2001.6.08 [7]刘文涛 《protel2004完全学习手册》. 电子工业出版社 [8]刘瑞新 《单片机原理及应用教程》. 机械工业出版社 [9]孙鑫 《单片机原理及应用》 电子工业出版社
[10]周航慈 《单片机应用程序设计技术》 北京航空航天大学出版社
11
要注意的是,此芯片只有35条指令,因此写程序时,不会显得特别麻烦。只要把要点亮的灯的值送到端口RB使得灯亮或灭即可。在判断键RC0,也就是15号引脚有没有被按下。如果有的话,则进行切换从而进入到另一种模式下进行工作,也就是显示不同的功能。同样三种模式是可以通过你按键的次数不同从而相互转化的。
图 5 PIC16FA的原理图
附录一、
方案一的电路原理图
图 6 方案一的电路原理图
表格 1 元件清单 元件名称 规格 数量 备注
12
ST89C52单片机 一块 附底座 晶振 12MHZ 一块 PNP三极管 9012 八支 8×8点阵共阳LED显共阳 一块 示器 按钮开关 三个 四脚或两脚 极性电容 20uf、10uf 各一支 瓷片电容 30pf 两支 电阻 270Ω、各八支 4.7kΩ 发光二极管LED点阵 8ⅹ8点阵 一组 封装元件 电源插座 +5V电源 一个 电阻 1kΩ 一支
13
因篇幅问题不能全部显示,请点此查看更多更全内容