《单片机课程设计:彩灯控制器的设计(24页).doc》由会员分享,可在线阅读,更多相关《单片机课程设计:彩灯控制器的设计(24页).doc(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、- 黄河科技学院课程设计任务书 工 学院 机械 系 机械设计制造及其自动化 专业 09 级 1 班学号 姓名 朱施泽 指导教师 郭晓君 题目: 彩灯控制器的设计 课程: 单片机课程设计 课程设计时间 2012年 12月21 日 至2012年1 月3日 共 2 周课程设计工作内容与基本要求(设计要求、设计任务、工作计划、所需相关资料)(纸张不够可加页)1设计要求利用AT89C51单片机作为微控制器,用16盏以上的LED小灯,实现至少4种彩灯灯光效果(不含全部点亮,全部熄灭);可以用输入按钮在几种灯光效果间切换;可以通过按钮暂停彩灯效果,使小灯全亮,再次按下相同按钮后继续之前的效果。2. 设计任务
2、与要求2.1系统硬件电路设计根据该系统设计的功能要求选择所用元器件,设计硬件电路。要求用Proteus绘制整个系统电路原理图。2.2软件设计根据该系统要求的功能进行软件设计,绘制整个系统的软件流程图;根据流程图编写程序并汇编调试通过;列出软件清单,软件清单要求逐条加以注释。2.3 Proteus仿真用Proteus对系统进行仿真并进行软硬件调试。2.4 编写设计说明书内容包括任务书、设计方案分析、硬件部分设计、软件部分设计、调试结果整理分析、设计调试的心得体会等,字数不少于4000字;硬件部分设计要绘制整个系统电路原理图,对各部分电路设计原理做出说明;软件设计部分要绘制整个系统及各部分的软件流
3、程图,列出程序清单,逐条加以注释,并在各功能块前加程序功能注释。3工作计划 序号设计内容所用时间1布置任务及调研天3制作与调试天4撰写设计报告书2天合 计14天4主要参考资料单片机课程设计指导书 皮大能 北京理工大学出版社2010.78051单片机实践与应用 吴金戎 清华大学出版社2003.8单片机技术基础教程与实践 夏路易 电子工业出版社2008.1MCS-51单片机原理接口及应用王质朴 北京理工大学出版社2009.11 基于Proteus的单片机系统设计与仿真实例 蒋辉平 机械工业出版社 2009.7 指导老师签字: 日 期: -第 23 页- 目 录1 系统硬件设计41.1 电路设计41
4、.2 主要元器件介绍51.2.1 AT89c51单片机芯片介绍51.2.2 主要特性52 系统软件设计72.1 综述72.2 主程序及流程图72.2.1 主程序72.3 子程序的编程思路82.3.1延迟子程序流程图93 系统调试与仿真分析113.1 软件调试113.1.1 单片机C语言113.1.2 Keil uVision2113.1.3 Proteus123.2 软件仿真结果及分析133.2.1闪光效果一:单灯向里移动133.2.2闪光效果二:流水左移143.2.3闪光效果三:3灯走马右移153.2.4闪光效果三:红色流水内外移动164 致谢175 参考文献18附录 程序代码181 系统硬
5、件设计整个系统以AT-89C51单片机作为主控核心,与发光二极管LED等较少的辅助硬件电路相结合,利用软件实现对LED彩灯进行控制。本系统具有体积小、硬件少、电路结构简单及容易操作等优点。1.1 电路设计彩虹灯控制器电路见【图1】。其主要设计器件有AT89C51,复位电路,时钟电路,5个按钮(其中一个为检测按钮)。通过软件设计,使单片机P0和P1作为LED驱动信号输出口,4个外部按钮作为按钮输入口。图1 彩虹灯控制器电路图1.2 主要元器件介绍1.2.1 AT89c51单片机芯片介绍AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable an
6、d Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。1.2.2 主要特性与MCS-51 兼容 4K字节可编程闪烁存储器 寿命:1000写/擦循环 数据保留时间:10年全静态工作:0Hz-24Hz三级程序存储器锁定128*8位内部RAM
7、32可编程I/O线两个16位定时器/计数器5个中断源 可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路;1.2.3引脚定义及功能见【图2】。图2 AT89C51引脚图(1) 输入输出引脚(P0、P1和P2端口引脚)P0P3是89C51与外界联系的4个8位双向并行I/O口。本设计中P0和P1口作为LED驱动信号输出口,P2口与4个按钮连接作为按钮输入口,控制4中彩虹灯效果。(2) AT89C51单片机的基本结构见【图3】图3 AT89C51基本结构2 系统软件设计2.1 综述本次的任务是设计一个基于单片机的LED彩灯控制器,需要循环运行四种以上预设的彩灯闪烁方案,这里的各种的方案还有显示
8、方式都是由单片机内部的程序控制。在这里我将16个发光二极管分别接在P0和P1口,通过程序控制这两个端口的电平高低,将16个发光二极管的负极接P0和P1口,正极接外部高电平,即P0和P1口的相应端口为低电平时LED就能被点亮。再通过程序循环的让各个端口以不同的方式点亮来达到各种花样的效果,并且当中要有一定的延时,延时时间小于人眼视觉暂留时间,否则人眼看上去每个灯都是亮的也就没有实际效果。设计的LED彩灯系统分为两部分,即AT89C51主控模块和发光二极管LED受控模块。整个系统工作由软件程序控制运行,同时根据不同的需要,用户可以在LED彩灯工作时通过主控模块上的按钮来实现4种彩灯灯光效果(不含全
9、部点亮,全部熄灭)。模块功能:该部分主要涉及功能的实现方式,即程序编写。程序要实现的功能包括读按键,通过对读入按键的值控制LED点亮方式。键盘有5个按键,其中K1、K2、K3、K4控制LED点亮模式。2.2 主程序及流程图2.2.1 主程序AT89C51通过编写程序应完成以下功能:通过P0口和P1控制发光二极管LED的亮与灭,从而实现多种闪烁方案; 用16 盏以上的LED小灯,实现至少4种彩灯灯光效果(不含全部点亮,全部熄灭)。用输入按钮在几种灯光效果间转换。按照上述要求即可写出主程序代码并绘制出主程序流程图。2.2.2 主程序流程图 开始 扫描按键 按钮一 否 按钮二 是 否按钮三 效果一
10、是 否 效果二 按钮四 是 效果三 否 是 效果四2.3 子程序的编程思路虽然大致的流程图已经绘制完毕,但编程过程中会遇到更加具体的问题,需要编制一些子程序来解决,以下是一些主要子程序的流程图绘制思路。2.3.1延迟子程序流程图数码管的显示必须有足够长的时间长到肉眼能够察觉到,因此在点亮数码管时要给 开始予其一个适当的延迟。触发时间i0 否 调用 是 计时 j 125 否 是 输出信号0 一个机器周期包括12个时钟周期。单片机AT89C51工作于12M晶振,它的时钟周期是1/12(微秒)。它的一个机器周期是12*(1/12)也就是1微秒。一共执行1000次,正好1000微秒,也就是1毫秒。2.
11、3.2按键扫描子程序 按键扫描子程序用来检测并识别外部输入按钮的输入信号。void KeyScan()if(P2=0xf7) ys1ms(100);if(P2=0xf7)flag=0xf7;if(P2=0xfb)ys1ms(100);if(P2=0xfb)flag=0xfb;if(P2=0xfd)ys1ms(100);if(P2=0xfd)flag=0xfd;if(P2=0xfe)ys1ms(100);if(P2=0xfe)flag=0xfe;其中的状态标志分别为:0xfe为按键1标志 ,0xfd为按键2标志 ,0xfb为按键3标志,0xf7为按键4标。3 系统调试与仿真分析3.1 软件调试本
12、次所有软体程序均采用C51语言编写,程序写完后要对其编译,在Proteus软件里实现硬件电路仿真。下面分别简单介绍单片机C语言和这两款软件。3.1.1 单片机C语言单片机C语言程序设计不同于通用计算机应用程序设计,它必须针对具体的微控制器及外围电路来完成,为了便于学习单片机应用程序设计和系统开发,很多公司退出了单片机实验箱、仿真器和开发板等,这些硬件设备可用于验证单片机程序,开发和调试单片机应用系统。开发8051单片机系统时,使用C语言会使开发周期大为缩短,开发效率大幅提高,程序可读性好且易于移植,所以使用C语言开发单片机系统已经成为必然趋势。C语言在单片机系统开发中的优势: 用C语言编写的程
13、序可读性强; 在不了解单片机指令系统而仅熟悉8051单片机存储结构时就可以开发单片机程序; 寄存器分配和不同存储器寻址及数据类型等细节可由编译器管理; 程序可分为多个不同的函数,这使程序设计结构化; 函数库丰富,数据处理能力强; 程序编写及调试时间大大缩短,开发效率远高于汇编语言; C语言具有模块化编程技术,已编写好的通用程序模块很容易植入新程序,这进一步提高了程序开发效率。3.1.2 Keil uVision2C51单片机支持HEX文件,我采用的编译器是Keil uVision2软件,该软件是美国Keil Software 公司开发的,关于8051系列MCU的开发工具,是目前世界上最好的51
14、单片机开发工具之一。软件本身支持数百种51系列单片机芯片,可以用来编译C源码,汇编源程序以及两者的混合编程代码,连接重定位目标文件和库文件,创建HEX文件,调试目标程序等,是一种集成化的文件管理编译环境。使用步骤如下: 建立一个项目,启动Keil,单击“Project菜单/New”选项,从弹出的窗口中选择要保存的路径,并输入项目文件名“彩灯.uv2”,然后保存。这时会弹出一个选择CPU型号的对话框,根据所使用的单片机来选择,我用的单片机是AT89C51。 创建程序文件,单击“File菜单/New”选项,输入C51语言源程序,单击“File菜单/Save”并输入程序文件名“彩灯.C”,保存。 程
15、序文件添加到项目中,右键点击“Target 1”前面的“+”,展开里面的内容“Source Group 1”,右键单击“Source Group 1”弹出一个右键菜单,单击“Add File to Groups Source Group 1”,从弹出的窗口中选择之前保存的文件“彩灯.C”添加到项目中去。 设置当前项目的目标选项,右键单击“Target 1”,从弹出的右键菜单中单击“Option for Target”选项,从弹出的“Options”窗口中选择“Target”标签栏,在“Create HEX File”前面打钩。 运行编译,右键单击“Target 1”,从弹出的右键菜单中单击“B
16、uild target”选项,此时若源程序没有语法错误,Keil就会生成HEX文件,并自动保存在之前设置的路径里。3.1.3 ProteusProteus是英国Labenter electronics公司开发的电路分析与实物仿真软件,是目前最好的模拟单片机外围器件的工具,它可以仿真、分析各种模拟电路与集成电路,软件提供了大量模拟与数字元器件及外部设备,各种虚拟仪表(如电压表、电流表、示波器、逻辑分析仪、信号发生器等),特别是它具有对单片机及其外围电路组成的综合系统的交互仿真功能。目前,Proteus仿真系统支持的主流单片机有ARM7(LPC21xx)、8051/52系列、AVR系列、PIC10
17、/12/16/18系列、HC11系列等,它支持的第三方软件开发、编译和调试环境有Keil uVision2/3、MPLAB等18。Proteus主要由ISIS和ARES两部分组成,ISIS的主要功能是原理图设计及电路原理图的交互仿真,ARES主要用于印制电路板的设计。ISIS提供的Proteus VSM(Virtual System Modelling)实现了混合式的SPICE电路仿真,它将虚拟仪器、高级图表应用、单片机仿真、第三方程序开发与调试环境有机结合,在搭建硬件模型之前即可在PC上完成原理图设计、电路分析与仿真及单片机程序实时仿真、测试及验证。Proteus操作非常简单,启动“ISIS
18、.exe”。在设计原理图时,根据当前电路复杂程度和特定要求,选择恰当的模块进行设计,打开模块式需要单击“文件/新建设计”(File/New Design)菜单,打开“创建新设计”(Create New Design)对话框,然后选择相应模块。 创建空白文件后,先将DSN文件保存到指定位置,接下来就可以开始在图纸中添加元件了,单击模式工具上的元件模式(Component Mode)图标,对象选择窗口上会出设备(Device),这时单击“P”按钮,打开元件选择窗口,在元件库选择硬件电路所需要的元器,合理摆放位置,然后按要求连接好电路图。3.2 软件仿真结果及分析 完成单片机系统仿真电路图设计后,即
19、可开始仿真运行单片机绑定的程序文件,双击单片机,打开单片机属性窗口(也可以先在单片机上单击右键,再单击左键,或者选中单片机后按下(Ctrl+E组合键),在“Program Files”项中选择对应的HEX文件。在仿真电路和程序都没有问题时,直接单击Proteus主窗口下的“运行”(Play)按钮,即可仿真运行单片机系统, 在运行过程中如果希望观察内存、24C0X、温度寄存器、时钟芯片等内部数据可在运行时单击“单步”(Step)或“暂停”(Pause)按钮,然后再“调试”(Debug)菜单中打开相应设备。3.2.1闪光效果一:单灯向里移动 即按键1彩虹灯光效果:上下两排各8个led二极管自两端向
20、里依次点亮再返回,单次两端各亮两盏,以此循环。可以用输入按钮在灯光效果间切换。3.2.2闪光效果二:流水左移即按键2彩虹灯光效果:上下两排各8个led二极管自两端单向挨个点亮直至全明,点亮后不熄灭,最后回到初始状态,以此循环。可以用输入按钮在灯光效果间切换。3.2.3闪光效果三:3灯走马右移即按键3彩虹灯光效果:上下两排各8个led二极管自左端点亮右移,上下两排最多各点亮三盏,以此循环。可以用输入按钮在灯光效果间切换。 3.2.4闪光效果三:红色流水内外移动 即按键4彩虹灯光效果:上下两排各8个led二极管自两端挨个点亮向内移动,最终全部点亮,出现渐亮效果;接着上下两排二极管自内侧挨个点亮向外
21、移动,最终全部点亮并出现渐暗效果,以此循环。可以用输入按钮在灯光效果间切换。4 致谢在这里首先要感谢我的导师郭晓君老师。郭老师平日里工作繁重,日理万机,但从协调选题,到确定最终任务书,再到最后的程序调试,我无时无刻不感受着郭晓君老师细致而无私的关怀和帮助。本人的课程设计“彩灯控制器的设计”是此次众多选题中较为棘手的一个,鄙人并不扎实的专业知识更是为之雪上加霜。但是面对如此低级甚至有些重复的问题,郭老师却诲人不倦,耐心、认真地为我一一解答。郭老师高超的专业素养,严谨的治学态度和甘为人师的奉献精神深深地影响了我,也并将继续积极地影响我今后的工作和学习生活。郭老师,谢谢您!其次我还想感谢和我一起肩并
22、肩奋斗在此次单片机课程设计第一线的09机电的各位同学们。是你们陪我一起努力,给我鼓劲儿,才使我能在研究生考试后有限的时间里快速地投入,高效地完成,并最终保证了整个设计任务按时按量顺利地完成。最后,通过此次课程设计,我对“厚积薄发”有了更深刻的理解做学问是一个过程而不是一个结果,关键不是出成绩的某一下,而是平日里积累的点点滴滴,分分秒秒。因此,我要感谢大学四年来关心和教育过我的领导们、老师们、同学们,是你们为我指明了做人的方向,夯实了专业的基础,分享了绚丽而多彩的青春!祝福你们!祝你们身体健康,生活愉快,工作顺利,新年吉祥!5 参考文献1 吴金戎 8051单片机实践与应用M 北京:清华大学出版社
23、, 2003.8 2 王质朴 MCS-51单片机原理接口及应用M 北京:北京理工大学出版社,2009.113 皮大能 单片机课程设计指导书M 北京:北京理工大学出版社,2010.74 夏路易 单片机技术基础教程与实践M 北京:电子工业出版社, 2008.15 蒋辉平 基于Proteus的单片机系统设计与仿真实例M 北京:机械工业出版社, 2009.7附录 程序代码#include /包含单片机寄存器的头文件#include unsigned char flag=0xff;/状态标志void ys1ms(unsigned int i);void KeyScan();rzy();rlszy();r
24、sdzmyy();rlsnwyd();rjl(); rja(); zkb(unsigned char d);/*函数功能:主函数*/void main(void)while(1)KeyScan();switch(flag) case 0xfe:rzy();break;/扫描状态标志,为1时,第1种效果 case 0xfd: rlszy(); break;/扫描状态标志,为2时,第2种效果 case 0xfb:rsdzmyy(); break;/扫描状态标志,为3时,第3种效果 case 0xf7:rlsnwyd();break; /扫描状态标志,为4时,第4种效果 / default:P1=0
25、x00; /* 延时程序*/void ys1ms(unsigned int i) /延时程序,i是形式参数,i为1时 延时约1MSunsigned int j;for(;i0;i-) /变量i由实际参数传入一个值,因此i不能赋初值 for(j=0;j125;j+) /j由0自增到125 所用的时间大约是1MS ; /* 按键扫描 状态标志0xfe按键1标志 0xfd按键2标志 0xfb按键3标志 0xf7按键4标志*/void KeyScan()if(P2=0xf7) ys1ms(100);if(P2=0xf7)flag=0xf7;if(P2=0xfb)ys1ms(100);if(P2=0xf
26、b)flag=0xfb;if(P2=0xfd)ys1ms(100);if(P2=0xfd)flag=0xfd;if(P2=0xfe)ys1ms(100);if(P2=0xfe)flag=0xfe; /* 按键1效果程序:单灯向里移动*/rzy() P0=0x7e;/01111110 P1=0x7e; ys1ms(90); P0=0xbd;/10111101 P1=0xbd; ys1ms(90); P0=0xdb;/11011011 P1=0xdb; ys1ms(90); P0=0xe7;/11100111 P1=0xe7; ys1ms(90); P0=0xff; P1=0xff; ys1ms(
27、300); P0=0xe7; P1=0xe7; ys1ms(90); P0=0xdb; P1=0xdb; ys1ms(90); P0=0xbd; P1=0xbd; ys1ms(90); P0=0x7e; P1=0x7e; ys1ms(90); P0=0xff; P1=0xff; /* 按键2效果程序:流水左移函数*/ rlszy()unsigned char a,b,i,led,led1;/声明无字符整形变量a,i,led,led1 led=0xfe; /左移初始值定位led1=0x7f;P0=led; /输出P1=led1;ys1ms(120); /延时for(i=1;i8;i+) /设置移
28、动7次a=ledi; P1=b;ys1ms(150); /*按键3效果程序:3灯走马右移函*/rsdzmyy() P0=0x1f;/00011111 P1=0xff; ys1ms(80); P0=0x8f; P1=0xfe; ys1ms(80); P0=0xc7; P1=0xfc; ys1ms(80); P0=0xe3; P1=0xf8; ys1ms(80); P0=0xf1; P1=0xf1; ys1ms(80); P0=0xf8; P1=0xe3; ys1ms(80); P0=0xfc; P1=0xc7; ys1ms(80); P0=0xfe; P1=0x8f; ys1ms(80); P0
29、=0xff; P1=0x1f; ys1ms(80);/*按键4效果程序:红色流水内外移动函数(灯光渐暗渐明)*/rlsnwyd() P0=0xe7; P1=0xe7; ys1ms(90); P0=0xc3; P1=0xc3; ys1ms(90); P0=0x81; P1=0x81; ys1ms(90); P0=0x00; P1=0x00; rjl(); ys1ms(500); P0=0x7e; P1=0x7e; ys1ms(90); P0=0x3c; P1=0x3c; ys1ms(90); P0=0x18; P1=0x18; ys1ms(90); P0=0x00; P1=0x00; rja()
30、;/*/rjl() /渐亮函数 unsigned char a, b;/a控制延时长度b控制循环周期 P0 = 0xff;P1=0xff; a = 0; for (b=250; b0; b-) /循环周期设置 a+; zkb (a); /延时长度随a而改变 P0 = 0xff;P1 = 0xff; a = a; /a值取反,决定灯灭时的占空比 zkb (a); P0 = 0x00;P1 =0x00; a = a; /a值取反使a回到原值继续循环 /*/rja() /渐暗函数unsigned char a, b;/a控制延时长度b控制循环周期 P0 = 0x00; /亮起LED P1=0x00;a = 0; for (b=250; b0; b-) a+; zkb (a); P0 = 0x00;P1 = 0x00; a = a; zkb (a); P0 = 0xff; P1=0xff; a = a; /*/zkb(unsigned char d) /占空比函数,由d决定延时长度 unsigned char i; while( -d != 0) for(i = 0; i 1; i+); /占空比时间设置 /*/