《单片机课程设计五彩灯控制器.doc》由会员分享,可在线阅读,更多相关《单片机课程设计五彩灯控制器.doc(23页珍藏版)》请在三一办公上搜索。
1、 湖南文理学院课程设计报告 课程名称: 单片机技术课程设计 课题名称: 五彩灯控制器 系 部: 电气与信息工程学院 专业班级: 自动化09103 学生姓名: 周声平 指导教师: 梅英 完成时间: 2012年6月15日 报告成绩: 评阅意见: 评阅教师 日期 目 录 一 设计题目3二 设计要求3三 设计作用及软件3四 所用设备与目的3五 系统设计方案3 1 系统总体设计3 2 系统工作原理4六 系统硬件设计7 1 单片机最小系统7 2 单元电路设计8七 系统软件设计10 1 主程序流程设计10 2 子程序设计.13八 实验调试结果.14九 设计中的问题及解决方法.19十 设计心得.19十一 参考
2、文献.20十二 程序清单.20 一 设计题目 五彩灯控制器 二 设计要求8个彩灯的控制电路的任务为:用AT89C51单片机设计设计5个按键实现对8个LED的控制,并利用数码管显示按下的按键号,5个按键对应的功能为:1号键:此键按下,对应所有的灯都熄灭;2号键:此键按下,LED1-LED8流动点亮;3号键:此键按下,LED1-LED8依次点亮;4号键:此键按下,LED1、LED3、LED5、LED7和LED2、LED4、LED6、LED8轮流点亮。5号键:此键按下,LED1LED8闪烁。 三 设计作用与目的1)了解单片机的基本原理及相关的简单应用。2)掌握用单片机设计系统的一般步骤。3)了解LE
3、D数码管的基本知识和驱动方法。4)掌握单片机系统各个组成部分的作用以及分布位置。5)学会运用单片机的硬件资源。 四 所用设备及软件 AT89C51及其他小工具 Proteus 五 系统设计方案 1 系统总体设计 软件方面:通过汇编语言编程实现不同要求的状态,由延时程序实现1秒的延时时间。 硬件方面:彩灯启动与停止由P1.6和P1.7口进行控制,彩灯的显示状态由AT89C51的P2口输出显示。芯片的控制由AT89C51的外接晶振和复位电路进行控制。 所谓接口是CPU与外界的连接部件,以实现CPU与外部设备的耦合和匹配。本课题只要求外接晶振电路、复位电路、控制电路、显示接口电路。根据总体设计要求,
4、确定系统功能接口,设计出系统的电路原理图(如图3-1所示)。显示设备为8个LED灯,采用共阳极接法。利用89C51的P2口进行显示输出和P1.6和P1.7进行启动和停止控制。五彩灯分为 2部分,即彩灯控制器(主控模块)和显示模块(受控模块)。整个系统工作由软件程序控制运行,根据需要,用户可以在 LED 彩灯工作时通过主控模块上的按键来控制LED彩灯的不同的点亮模式。上电后系统经过初始化,直接进入一号功能键模式。再等待按键输入控制信号控制中断的来临并扫描按键进入中断子服务程序实现1键、2键、3键、4键和5键的各种功能。LED 彩灯控制器按照程序设定好的按下不同按键实现不同的5个亮灯花样模式并显示
5、按下的是几号功能键。七段码 LED 显示器用来显示当前是几号键已经按下,这两个功能都是通过查询而进入不同的中断子程序。 图1 系统电路原理图 2 系统工作原理 此次使设计一个能控制八路彩灯的控制器,其中彩灯用发光二极管模拟。由P1.6和P1.7口控制电路启动与停止,根据彩灯的亮灭要求,利用数据指针查表,将查到的内容送给P2口进行显示。若查到的内容为跳出代码就重新开始循环 AT89C51外形及引脚排列如图所示: 图2 AT89C51引脚图管脚说明: Vcc:+5V电源输入端。Vss:电源接地端。XTAL1:片内放大器输入端。XTAL2:片内放大器输出端。RST:复位输入。当振荡器复位器件时,要保
6、持RST脚两个机器周期的高电平时间。 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口:P
7、2口为一个内部上拉电阻的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”后,它们被内部上
8、拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效
9、。 PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次PSEN有效。但在访问外部数据存储器时,这两次有效的PSEN信号将不出现。 EA/VPP:当EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,EA将内部锁定为RESET;当EA端保持高电平时,此间内部程序存储器。 XTAL1和XTAL2:反向振荡放大器的输入及内部时钟工作电路的输入。六 系统硬件设计 1 单片机最小系统 1.1 外接晶振电路及延时电路 每个单片机系统里都有晶振,他结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执
10、行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。外接晶振电路是向AT89C51芯片提供基准频率。外接晶振及延时电路图如下: 图3 外接晶振电路 图4 延时电路2 单元电路设计 2.1 控制电路 利用单片机芯片AT89C51的P1.6和P1.7口进行彩灯的启动和停止这两个状态的控制,如果按下P1.6的开关按钮彩灯就启动,当按下P1.7的按钮时彩灯就立即停止(全部熄灭)。控制电路图如下: 图5 控制电路图 2.2 显示电路八个彩灯的显示依靠P2口来控制进行亮或灭显示,采用共阳极接
11、法,其中在线路中加限流电阻对芯片的保护。其显示电路图如下: 图6 显示电路 2.3 系统硬件原理电路图 将AT89C51芯片、外接晶振电路、复位电路、控制电路和显示电路等资料汇集起来,熟悉芯片个引脚的功能及连接方法,绘制如下系统硬件原理电路图: 图7 系统硬件原理图七 系统软件设计 开始堆栈初始化给P1初始化复位程序中所有的标志位updown、startend、yuan、quan、zuoyi、给流动灯复初值调用键盘检测程序F0为1?调用键盘处理程序调用显示程序YN 表一 主程序流程图void main() P0=0xc0; if(k1=0) P0= 0xf9;P2=0x00; if(k2=0)
12、 P0= 0xa4; P2=0x01; delay(500); P2=0x02; delay(500); P2=0x04; delay(500); P2=0x08; delay(500); P2=0x10; delay(500); P2=0x20; delay(500); P2=0x40; delay(500); P2=0x80; delay(500); if(k3=0) P0=0xb0; P2=0x01; delay(500); P2=0x03;delay(500); P2=0x07;delay(500); P2=0x0f;delay(500); P2=0x1F;delay(500); P2
13、=0x3F;delay(500); P2=0x7F; delay(500); P2=0xFF;delay(1000); if(k4=0) P0=0x99; P2=0x55; delay(500); P2=0xaa; delay(500); if(k5=0) P0=0x92; P2=0xff; delay(500); P2=0x00; delay(500); 功能说明:图1主程序流程图,编写汇编主程序,开始给堆栈初始化,把P1复位也就让彩灯一开始处于灭的状态,把所有标志位复位,否则下次运行时容易出错,。给流动代码复初值,然后调用键盘程序看是否有键按下没有就跳转显示程序返回,F0为则调用功能键处理
14、程序然后在调用显示程序返回循环。2 子程序设计开始给R7复值D1: 给R6复值R6J减1到0?R7减1到0?返回NYYN 表2 延时子程序流程图 void delay(unsigned int i)/延时子程序unsigned int j;while(i-) for(j=0;j115;j+); 八 实验调试结果 图8 未按键之前的仿真图 刚开始时所有LED灯全部亮,数码管显示0. 图9 按1号键仿真图 1号键按下后,产生中断,硬件自身识别外部中断0或1,并扫描键盘进入相应的中断子程序。此时产生外部中断并扫描键盘进入子程序实现1号键功能,LED彩灯为全灭,LED数码管显示1,此后一直循环此功能直
15、到下一个中断产生才结束。 图10 按2号键仿真图 关闭1号键,2号键按下后,产生中断,硬件自身识别INTT0或INTT1并扫描键盘进入相应的中断子程序。此时产生INTT0中断并扫描键盘进入子程序实现2号键功能,LED1-LED8流动点亮,LED数码管显示2,此后一直循环此功能直到下一个中断产生才结束。 图11 按3号键仿真图关闭2号键,3号键按下后,产生中断,硬件自身识别INTT0或INTT1并扫描键盘进入相应的中断子程序。此时产生INTT0中断并扫描键盘进入子程序实现3号键功能,LED1-LED8依次点亮,LED数码管显示3,此后一直循环此功能直到下一个中断产生才结束。 图12 按4号键仿真
16、图 关闭2号键,4号键按下后,产生中断,硬件自身识别INTT0或INTT1并扫描键盘进入相应的中断子程序。此时产生INTT0中断并扫描键盘进入子程序实现4号键功能,LED1、LED3、LED5、LED7和LED2、LED4、LED6、LED8轮流点亮,LED数码管显示4,此后一直循环此功能直到下一个中断产生才结束。 图13 按5号键仿真图 5号键按下后,产生中断,硬件自身识别INTT0或INTT1并扫描键盘进入相应的中断子程序。此时产生INTT0中断并扫描键盘进入子程序,LED数码管显示键号5,等上一次显示周期完毕后实现4号键功能,LED1LED8闪烁,此后一直循环此功能直到下一个中断产生才结
17、束。 九 设计中的问题及解决方法 接到老师发的课程设计后我按着书和自己的思路编写程序,编写后进行软件仿真调试发现当我按下2号键时没有出现后面的LED灯依次点亮,出现了前面的灯点亮后面的灯就灭了,最后我在程序中添加了delay(500)后,在编译运行仿真不会出现刚刚的情况经过调试我的仿真结果基本符合设计要求。 十 设计心得 回顾此次单片机课程设计,我仍感慨颇多,的确,从选题到定稿,从理论到实践,在接近四星期的日子里,可以说得是苦多于甜,但是学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了只有把所学的理论知识与实践相结合起来,才能提高自己的实际动手能力和独立思考的能力。在设计的过程
18、中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,比如说不懂一些元器件的使用方法,对单片机结构掌握得不好通过这次课程设计之后,一定把以前所学过的知识重新温故。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在梅英老师的指导下,终于迎刃而解。俗话说“好的开始是成功的一半”。说起课程设计,我认为最重要的就是做好设计的预习,认真的研究老师给的题目,选一个自己有兴趣的题目。其次,老师对实验的讲解要一丝不苟的去听去想,因为只有都明白了,做起设计就会事半功倍,如果没弄明白,就迷迷糊糊的去选题目做设计,到头来一点收获也没有。最后,要
19、重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法。 在这次难得的课程设计过程中我锻炼了自己的思考能力和动手能力。通过题目选择和设计电路的过程中,加强了我思考问题的完整性.十一 参考文献 何立民.单片机应用技术选编,北京:北京航空大学出版社,1998 张毅刚.新编51单片机应用设计(第三版),哈尔滨:哈尔滨工业大学出版社,2008 陈堂敏.刘焕平主编.单片机原理与应用,北京:北京理工大学出版社,2007 十二 程序清单 #includesbit k1=P10;sbit k2=P11;sbit k3=P12;sbit k4=P13;sbit k5=P14;unsigned char i
20、;void delay(unsigned int i)/延时子程序unsigned int j;while(i-)for(j=0;j115;j+); void main() P0=0xc0; if(k1=0) P0= 0xf9;P2=0x00; if(k2=0) P0= 0xa4; P2=0x01; delay(500); P2=0x02; delay(500); P2=0x04; delay(500); P2=0x08; delay(500); P2=0x10; delay(500); P2=0x20; delay(500); P2=0x40; delay(500); P2=0x80; de
21、lay(500); if(k3=0) P0=0xb0; P2=0x01; delay(500); P2=0x03;delay(500); P2=0x07;delay(500); P2=0x0f;delay(500); P2=0x1F;delay(500); P2=0x3F;delay(500); P2=0x7F;delay(500); P2=0xFF;delay(1000); if(k4=0) P0=0x99; P2=0x55; delay(500); P2=0xaa; delay(500);if(k5=0) P0=0x92; P2=0xff; delay(500); P2=0x00; delay(500);