石家庄铁道大学四方学院集中实践报告书课题名称节日彩灯控制器设计 姓 名吴春慧 学 号 20137762 系、 部电气工程系 专业班级方1353-2 指导教师牛晓燕2016 年 7 月 6 日※※※※※※※※※ ※※ ※※ ※※ ※※※※※※※※※ 2013级 单片机接口设计课程设计目录第1章设计目的 (2)第2章设计要求 (2)第3章硬件电路设计 (2)3.1 系统结构框图 (2)3.2 STC89C52单片机 (3)3.3 总电路图 (4)第4章软件设计 (5)4.1 主程序设计 (5)4.2 LED灯子程序设计 (7)4.2 延时子程序设计 (7)4.3 源程序 (8)第5章结论 (10)参考文献 (11)第1章设计目的1、掌握单片机实际系统的开发步骤。
2、熟悉节日彩灯控制器的工作原理。
3、加深对单片机汇编语言的认识和理解,并会编程。
第2章设计要求1、设计4个按键S0、S1、S2、S3,S0—开始按此键则灯开始流动(由上而下);S1—停止,按此键则停止流动,所有灯为暗;S2—上,按此键则灯由上向下流动;S3—下,按此键则灯由下向上流动。
2、由按键控制功能的流水灯,其中的LED采取共阳极接法,通过依次向连接LED的I/O口送出低电平,可实现题目要求的功能。
3、要求做出实物。
第3章硬件电路设计3.1 系统结构框图节日彩灯控制系统主要由单片机、LED显示器、开关及电源组成。
其结构框图如图3-1所示。
图3-1系统结构框图3.2 STC89C52单片机89C52本质是一种低耗高性能的微控制器。
它的主要特性是拥有8K字节的程序存储空间;512字节的数据存储空间;内带4K字节的EEPROM存储空间和可直接使用串行口下载。
此外,它还是增强型的80C51单片机,有6时钟/机器周期和12时钟/机器周期可以任意选择,同时它的指令代码完全兼容传统80C51单片机。
89C52共有四个八位的并行双向口,即有32根输入输出口线。
各口的每一位均由锁存器、输出驱动器和输入缓冲器组成。
STC89C52芯片有40个引脚,引脚图如图3-2所示,各引脚功能介绍如下:图3-2 STC89C52引脚图VCC(40引脚):电源电压。
VSS(20引脚):接地。
P1端口(P1.0~P1.7,1~8引脚):P1口是一个带内部上拉电阻的8位双向I/O 口。
P1的输出缓冲器可驱动4个TTL负载。
对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。
P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流。
P1口特点是输出锁存器,输出时没有条件。
输入缓冲,输入时有条件,即需要先将该口设为输入状态,先输出1。
此外,P1.0和P1.1是多功能的。
P1.0还可以作为定时器/计数器2的外部输入端T2。
P1.1还可以作为定时器/计数器2的外部控制端T2EX。
P3端口(P3.0~P3.7,10~17引脚):P3是一个带内部上拉电阻的8位双向I/O 端口。
P3的输出缓冲器可驱动4个TTL负载。
对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。
P3做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流。
P3口除作为一般I/O口外,还有其他一些复用功能如下:P3.0---RXD,串行输入口。
P3.1---TXD,串行输出口。
P3.2---INT0,外部中断0的请求。
P3.3---INT1,外部中断1的请求。
P3.4---T0,定时器/计数器0外部计数脉冲。
P3.5---T1,定时器/计数器,1外部计数脉冲。
P3.6---WR,外部数据存储器写选通。
P3.7---RD,外部数据存储器读选通。
RST(9引脚):复位输入。
当输入连续两个机器周期以上高电平时为有效,用来完成单片机单片机的复位初始化操作。
ALE(30引脚):地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。
XTAL1(19引脚)):振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2(18引脚):振荡器反相放大器的输入端。
3.3 总电路图在总电路图中,复位电路与晶振电路是单片机最小系统中包括的电路,复位连在AT89C52的9引脚,而晶振电路的两条接线分别与18、19引脚相连。
对于本次设计,还需要将8个LED灯接入电阻中,并且分别与8个限流电阻相连保护发光二极管,与单片机的P1口相连。
4个按键S0、S1、S2、S3分别连单片机的P3.4、P3.5、P3.3和P3.1由这四个按键来控制灯的启动、停止、由上而下、由下而上。
由按键控制功能的LED工作的方式,其中的LED采取共阳极接法,通过依次向连接LED的I/O口送出低电平,可实现题目要求的功能。
节日彩灯控制器的总电路图如图3-5所示。
图3-3 总电路图第4章软件设计4.1 主程序设计节日彩灯控制器设计的功能是:当在没有任何按键按下时,8个LED灯均呈现灭灯的状态,并一直在等待按键的按下。
当按下开始键S0键后,8个LED 灯自上而下循环流动,检测有没有按下停止键即S1,若按下停止键S1则立即停止流动,否则检测是否按下按键S2或者按键S3,若都没有按下则灯继续保持原先的状态流动。
当按键S3被按下,灯自下而上流动,同样也要检测是否按下停止键S1,按下则停止,否则灯将继续自下而上流动。
同理,当按键S2被按下时,灯自上而下流动,如果按下停止键S1,按下则停止,否则灯将继续自上而下流动。
当既按下S2又按下S3时,灯将先自上而下流动,后自下而上流动。
通过四个键S1、S2、S3、S4的控制,实现彩灯的亮、灭和彩灯的流动显示,以及在不同情况下的彩灯的流动变换。
这是整个节日彩灯的完整控制与流动过程。
节日彩灯控制器的主程序流程图如图4-1所示图4-1 主程序流程图4.2 LED灯子程序设计在本设计中的LED灯的流动有两个方向,分别为自上而下和自下而上,无论是哪种方式,其LED灯的子程序都是一样的过程。
首先赋初值,取表中的数,将数值给P1口,然后判断LED灯是否循环完了8次。
如果循环完8次则对应LED灯亮,并延时输出。
如果没有循环完8次,将返回原处重新开始。
因而得到流程图为图4-2所示。
图4-2 LED灯子程序流程图4.2 延时子程序设计对于LED灯循环显示程序来说,由于单片机运行速度非常快,以至于当灯亮时人眼看不见,不方便检测与监控,因此在程序中需要添加延时子程序。
同时延时子程序还可以有效的防止抖动。
延时子程序运用了两个for循环嵌套,外循环执行一次,内循环执行z次,因此延时时间为100z。
延时子程序的流程图如图4-3所示。
图4-3 子程序流程图4.3 源程序#include<reg52.h>#define uint unsigned int#define uchar unsigned charvoid san();void wu();void delay(uint);sbit key2=P3^5;//关闭彩灯的开关sbit key1=P3^4;//启动彩灯的开关sbit key3=P3^3;//控制彩灯右移的开关sbit key4=P3^1;//控制彩灯左移的开关uchar temp;//定义一个无符号字符型数据变量uchar temp1;//定义一个无符号字符型数据变量uchar temp2;/定义一个无符号字符型数据变量uint a;int c;void main()//主程序{while(1)//判断哪个开关被按下{if(key1==0){san();}if(key2==0){P1=0xff;}if(key3==0){san();}if(key4==0){wu();}}}void san(){uchar table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//定义一个数组for(a=0;a<8;a++){temp=table[a];//将数组赋值给变量tempP1=temp;delay(300);//延时}}void delay(uint z)//延时程序{uint x,y;for(x=100;x>0;x--)for(y=z;y>0;y--);}void wu(){uchar table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//定义一个数组for(c=7;c>-1;c--){temp1=table1[c];//将数组赋值给变量temp1P1=temp1;delay(300);//延时}}第5章结论在本次课程设计中,我们用的是Multisim软件画图,然后经过不断地仿真、调试成功。
最后根据本设计做出实物并与计算机相连,完成整个设计。
本设计做的是实物,我主要负责软件部分,但是我也参与了硬件部分,利用我们编好的程序成功写入到了单片机当中,然后实现了LED灯的从上往下,从下往上,以及反复往返流动。
本次设计主要运用C语言对单片机进行编程控制。
只需要节日彩灯的程序分为三部分即可:主程序、LED灯的程序,延时程序。
主程序要根据题目要求画出主程序框图,依据主电路图及主流程图编程。
LED灯的程序分两个流动方向,设置不同的初值及移动的方向就可以获得。
而延时程序根据延时时间利用for 循环来实现。
编程之后,修改错误,进行调试。
这次设计灯的流动方式是可以有好多种的,但是时间有限,我们只完成了老师给的任务。
在这次课程设计的过程中,我们既锻炼了自己的思考能力,又加强了我们思考问题的完整性和与实际生活联系的可行性。
参考文献[1] 高峰.单片微型计算机原理与接口技术[M].科学出版社,2007[2] 张志良.单片机原理与控制技术[M].机械工业出版社,2007[3] 谭浩强.C程序设计.清华大学出版社,1991。