单片机课程设计报告书课题名称节日彩灯控制器设计 姓 名 学 号 院、系、部电气工程系 专 业电子工程及其自动化 指导教师2013年 7 月10日※※※※※※※※※※※※※ ※※ ※※※※※※※※※2010级单片机 课程设计节日彩灯控制器设计一、设计目的1、了解节日彩灯控制器的工作原理2、掌握电路板的实物焊接3、掌握独立电源设计方法和原理二、设计要求1、设计4个按键S0、S1、S2、S3,2、S0—开始,按此键则灯开始流动(由上而下)。
3、S1—停止,按此键则停止流动,所有灯为暗。
4、S2—上,按此键则灯由上向下流动。
5、S3—下,按此键则灯由下向上流动。
三、硬件电路设计3.1系统结构框图图3-1 系统结构框图节日彩灯控制系统主要由单片机、LED灯、5V电源及开关组成3.2 STC89C52单片机最小系统单片机最小系统包括:单片机,复位电路,晶振电路。
1、单片机的介绍:VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8个TTL门电流。
当P0口的管脚第一次写“1”时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4个TTL门电流。
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)这是由于上拉的缘故。
P3口作为AT89C51的一些特殊功能口,管脚备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(计时器0外部输入)P3.5 T1(计时器1外部输入)2、复位的介绍:复位是单片机的初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。
单片机的RST引脚为主机提供了一个外部复位信号输入口。
复位按键按下以前,RST引脚为低电平。
按下复位按键后,RST引脚得到两个机器周期以上的高电平,单片机的复位方式可由手动复位方式完成。
3、晶振的介绍:外接石英晶体或者陶瓷谐振器以及电容C1、C2接在放大器的反馈回路(AT89C52内部有一个用于构成内部振荡器的高增益反相放大电路,XTAL1、XTAL2分别是该放大器的输入和输出端)中构成并联振荡电路。
为了使装置能够被外部时钟信号激活,XATL1应该有效,而XTAL2应该被悬空。
由于输入到内部的时钟信号电路通过了一个二分频的信号,外部信号的工作周期比没有别的要求,但是最大值和最小值的大小可以在数据表上观察出来。
3.3 LED显示电路主要由8个LED灯与保护电阻组成图3-3 LED灯显示电路3.4系统电路原理图由按键控制功能的LED工作的方式,其中的LED采取共阳极接法通过依次向连接LED的I/O口送出低电平,可实现题目要求的功能图3-4系统电路原理图四、软件设计4.1设计思路本设计由主程序、子程序和延时程序组成。
其中,子程序的关键在于设计了两个数组,通过数组中的初始数值控制二极管的亮、灭。
主程序除了调用二极管显示子程序外,还一直保持查询是否有功能键按下,一旦有按键按下,就会进入相应的按键处理,实现对发光二极管的控制。
4.2程序流程图图4-1 程序流程图五、源程序#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);//延时}}七、设计总结经过几天的努力,终于完成了本学期的单片机课程设计,过程虽是辛苦的,但从中我学到了很多东西,通过这次课程设计,使我对硬件电路的工作原理有了进一步的学习,进一步的认识。
在这次课程设计中我遇到了一些困难,但在老师的指导和同学的帮助,再加上自己查阅了些许资料的情况下都解决了。
虽然课程设计进行的不够顺利,但还是完成了任务,使自己的专业知识又得到了提升。
在对单片机有了进一步的认识,巩固了课上学习的理论知识,对于计算机汇编语言的系统化整体化有了更深的认识。
在编写程序的过程中遇到了很多困难经过反复修改不断修正最终才能得以执行。
整个设计过程最大的收获就是意识到理论知识扎实的重要性,实践是建立在理论之上。
在做的过程中也遇到一些问题,首先是程序的编写,我们用的是keil软件,经过不断的调试修改终于使程序编译成功,然后将其加到Portel中设计好的电气图中进行仿真,没有错误。
在硬件焊接的过程中主要是端口的选择,开始由于端口没连对,使我们的四个按键无法控制彩灯亮的方式,还有就是焊接时要小心别焊错了。
整个设计过程最大的收获就是意识到理论知识扎实的重要性,实践是建立在理论之上的,平时基础知识学的好的同学做起来就是娴熟,同时意识到作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。
我们这次实习所遇到的多半问题多数都是由于我们不够严谨。
另外就是合作的重要性,每个人都有他的特长一个人难免有疏漏,只有大家共同努力才能顺利的完成任务。
不过无论做什么事情,我们都要坚强,有足够的毅力与决心,有足够的挑战困难的勇气,那样就能把事情做好做成功。
在这次难得的课程设计过程中我锻炼了自己的思考能力和动手能力。
通过题目选择和设计电路的过程中,加强了我思考问题的完整性和实际生活联系的可行性。
在方案设计选择和芯片的选择上,培养了我的综合应用单片机的能力,对单片机的各个管脚的功能也有了进一步的认识。
还锻炼我的查阅技术资料的能力,动手能力,发现问题,解决问题的能力。
同时感谢老师和同学的指导帮助。
八、参考文献1、《C语言程序设计习题集(第二版)》,陈朔鹰陈英主编,人民邮电出版社,2003年2月。
2、《C程序设计(第二版)》,谭浩强编,清华大学出版社,1999年12月。
3、刘瑞挺主编,计算机二级教程,南开大学出版社,1996年10月。
4、陈朔鹰等编著,C语言程序设计基础教程,兵器工业出版社,1994年9月。