1、黄河科技学院单片机课程设计 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工作计划 黄河科技学院单片机课程设计 2序号 设计内容 所用时间1 布置任务及调研 天3 制作与调试 天4 撰写设计报告书 2天合 计 14天4主要参考资料单片机课程设计指导书 皮大能 北京理工大学出版社 2010.78051 单片机实践与应用 吴金戎 清华大学出版社 2003.8单片机技术基础教程与实践 夏路易 电子工业出版社 2008.1MCS-51 单片机原理接口及应用 王质朴 北京理工大学出版社 2009.11基于 Proteus 的单片机系统设
4、计与仿真实例 蒋辉平 机械工业出版社 2009.7指导老师签字:日 期:黄河科技学院单片机课程设计 3目 录1 系统硬件设计 .41.1 电路设计 41.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 uVision2.113.1.3 Proteus.123.2 软件仿真结果及分析 133.
5、2.1闪光效果一:单灯向里移动 133.2.2闪光效果二:流水左移 143.2.3闪光效果三:3 灯走马右移 .153.2.4闪光效果三:红色流水内外移动 164 致谢 .175 参考文献 .18附录 程序代码 .18黄河科技学院单片机课程设计 41 系统硬件设计整个系统以 AT-89C51 单片机作为主控核心,与发光二极管 LED 等较少的辅助硬件电路相结合,利用软件实现对 LED 彩灯进行控制。本系统具有体积小、硬件少、电路结构简单及容易操作等优点。1.1 电路设计彩虹灯控制器电路见【图 1】 。其主要设计器件有 AT89C51,复位电路,时钟电路,5个按钮(其中一个为检测按钮) 。通过软
6、件设计,使单片机 P0 和 P1 作为 LED 驱动信号输出口,4 个外部按钮作为按钮输入口。图 1 彩虹灯控制器电路图黄河科技学院单片机课程设计 51.2 主要元器件介绍1.2.1 AT89c51 单片机芯片介绍AT89C51 是一种带 4K 字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能 CMOS8 位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除 100 次。该器件采用 ATMEL 高密度非易失存储器制造技术制造,与工业标准的 MCS-51 指令集和输出管脚相兼容。
7、由于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片中,ATMEL 的 AT89C51 是一种高效微控制器。AT89C 单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。1.2.2 主要特性与 MCS-51 兼容 4K 字节可编程闪烁存储器 寿命:1000 写/擦循环数据保留时间:10 年全静态工作:0Hz-24Hz三级程序存储器锁定128*8 位内部 RAM32 可编程 I/O 线两个 16 位定时器/计数器5 个中断源 可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路;1.2.3引脚定义及功能见【图 2】 。黄河科技学院单片机课程设计 6图 2 AT89C51引脚图(1
8、) 输入输出引脚(P0、P1 和 P2 端口引脚)P0P3 是 89C51 与外界联系的 4 个 8 位双向并行 I/O 口。本设计中 P0 和 P1 口作为 LED 驱动信号输出口,P2 口与 4 个按钮连接作为按钮输入口,控制 4 中彩虹灯效果。(2) AT89C51 单片机的基本结构见【图 3】OSC89C51OS 4KB EPROM256B RAM/SFR216/64KB I/O 黄河科技学院单片机课程设计 7图 3 AT89C51基本结构2 系统软件设计2.1 综述本次的任务是设计一个基于单片机的 LED 彩灯控制器,需要循环运行四种以上预设的彩灯闪烁方案,这里的各种的方案还有显示方
9、式都是由单片机内部的程序控制。在这里我将 16 个发光二极管分别接在 P0 和 P1 口,通过程序控制这两个端口的电平高低,将16 个发光二极管的负极接 P0 和 P1 口,正极接外部高电平,即 P0 和 P1 口的相应端口为低电平时 LED 就能被点亮。再通过程序循环的让各个端口以不同的方式点亮来达到各种花样的效果,并且当中要有一定的延时,延时时间小于人眼视觉暂留时间,否则人眼看上去每个灯都是亮的也就没有实际效果。设计的 LED 彩灯系统分为两部分,即 AT89C51 主控模块和发光二极管 LED 受控模块。整个系统工作由软件程序控制运行,同时根据不同的需要,用户可以在 LED 彩灯工作时通
10、过主控模块上的按钮来实现 4 种彩灯灯光效果(不含全部点亮,全部熄灭) 。模块功能:该部分主要涉及功能的实现方式,即程序编写。程序要实现的功能包括读按键,通过对读入按键的值控制 LED 点亮方式。键盘有 5 个按键,其中K1、K2、K3、K4 控制 LED 点亮模式。2.2 主程序及流程图2.2.1 主程序AT89C51 通过编写程序应完成以下功能:通过 P0 口和 P1 控制发光二极管 LED 的亮与灭,从而实现多种闪烁方案; 用 16 盏以上的 LED 小灯,实现至少 4 种彩灯灯光效果(不含全部点亮,全部熄灭) 。用输入按钮在几种灯光效果间转换。按照上述要求即可写出主程序代码并绘制出主程
11、序流程图。黄河科技学院单片机课程设计 8开始扫描按键2.2.2 主程序流程图否 是 否是 否是 否是 2.3 子程序的编程思路虽然大致的流程图已经绘制完毕,但编程过程中会遇到更加具体的问题,需要编制一些子程序来解决,以下是一些主要子程序的流程图绘制思路。按钮一效果一按钮二效果二按钮三效果三按钮四效果四黄河科技学院单片机课程设计 92.3.1延迟子程序流程图数码管的显示必须有足够长的时间长到肉眼能够察觉到,因此在点亮数码管时要给予其一个适当的延迟。否 是否是 一个机器周期包括 12 个时钟周期。单片机 AT89C51 工作于 12M 晶振,它的时钟周期是 1/12(微秒) 。它的一个机器周期是
12、12*(1/12)也就是 1 微秒。一共执行 1000 次,正好 1000 微秒,也就是 1 毫秒。2.3.2 按键扫描子程序按键扫描子程序用来检测并识别外部输入按钮的输入信号。void KeyScan()开始触发时间 i0计时j /包含单片机寄存器的头文件#include unsigned char flag=0xff;/状态标志void ys1ms(unsigned int i);void KeyScan();rzy();rlszy();rsdzmyy();rlsnwyd();rjl(); rja(); zkb(unsigned char d);/*函数功能:主函数*/void main(
13、void)while(1)黄河科技学院单片机课程设计 19KeyScan();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=0x00; /*延时程序*/void ys1ms(unsigned int i) /延时程序,i 是
14、形式参数,i 为 1 时 延时约 1MSunsigned int j;for(;i0;i-) /变量 i 由实际参数传入一个值,因此 i 不能赋初值for(j=0;ji;P1=b;ys1ms(150); 黄河科技学院单片机课程设计 22/*按键 3 效果程序:3 灯走马右移函*/rsdzmyy() P0=0x1f;/00011111P1=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=
15、0xe3;ys1ms(80);P0=0xfc;P1=0xc7;ys1ms(80);P0=0xfe;P1=0x8f;ys1ms(80);P0=0xff;P1=0x1f;ys1ms(80);/*按键 4 效果程序:红色流水内外移动函数(灯光渐暗渐明)*/rlsnwyd() P0=0xe7;黄河科技学院单片机课程设计 23P1=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=0
16、x3c;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 值取反,决定灯灭时的占空比 黄河科技学院单片机课程设计 24zkb (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+); /占空比时间设置 /*/