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