心形流水灯课程设计.doc_第1页
心形流水灯课程设计.doc_第2页
心形流水灯课程设计.doc_第3页
心形流水灯课程设计.doc_第4页
心形流水灯课程设计.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计说明书 第 I 页 心形流水灯设计 摘 要 本课题是利用 STC89C52 设计了一个心形流水灯电路,该电路可以实现 32 个 LED 灯循环闪亮、依次熄灭、对角闪亮、对角熄灭、间隔闪亮、间隔熄灭等多种功能。该 电路主要由单片机芯片 STC89C52、电源电路、时钟电路、复位电路和显示电路组成。 利用 Keil 软件编写 C 语言程序,并生成目标代码 Hex 文件。使用 Proteus 软件设计仿 真电路,并调入已编译好的目标代码,即可在仿真图中看到模拟实物的运行状态和过 程。使用 Altium Designer 软件对电路进行原理图设计和 PCB 设计,并对该电路行安装 和调试,调试结果可以实现流水灯的多种亮灭循环的功能。 关键词:AT89C52,复位电路,时钟电路,发光二极管 课程设计说明书 第 II 页 目 录 1 绪论.1 1.1 课题描述.1 1.2 基本工作原理及框图.1 2 相关芯片及硬件电路设计.2 2.1 AT89C52 芯片.2 2.1.1 AT89C52 的功能特性 .2 2.1.2 AT89C52 的主要性能参数 .2 2.2 时钟电路.3 2.3 复位电路.4 2.4 显示电路.4 2.6 总原理图设计.5 3 系统软件设计.6 3.1 程序主要流程.6 3.2 程序设计.7 3.4 电路功能仿真.20 总 结.21 致 谢.22 参考文献.23 课程设计说明书 第1页 1 绪论 1.1 课题描述 随着现代科学技术的持续进步和发展以及人们生活水平的不断提高,以大规模、 超大规模集成电路为首的电子工艺技术的使用也越来越广泛,结合单片机技术设计的 电子电路也层出不穷。 LED 彩灯由于其丰富的灯光色彩、低廉的造价以及控制简单等 特点而得到了广泛的应用,用彩灯来装饰街道和城市建筑物已经成为一种时尚。利用 控制电路可使彩灯按一定的规律不断的改变状态,不仅可以获得良好的观赏效果,而 且可以省电。 彩灯的运用已经遍布于人们的生活中,从歌舞厅到卡拉 OK 包房,从节日的祝贺 到日常生活中的点缀,这些不仅说明了我们对生活的要求有了质的飞跃,也说明科技 在现实生活中的运用有了较大的发展。在这一设计中我们将运用单片机技术,与单片 机芯片 STC89C52 的功能,对心形流水灯系统进行设计,来实现流水灯的多种亮与灭 的循环,给人带来美感1。 1.2 基本工作原理及框图 本课程设计的 XX 系统原理如图 1 所示。 图 1 基本工作原理框图 电源电路 显示电路 AT89C52 时钟电路 复位电路 课程设计说明书 第2页 2 相关芯片及硬件电路设计 2.1 AT89C52 芯片 。 图 2 AT89C52 引脚图 2.1.1 AT89C52 的功能特性 STC89C52 是 STC 公司生产的一种低功耗、高性能的微控制器,具有 8K 的系统 可编程 Flash 存储器,其具有传统 51 单片机不具备的功能,在经典的 MCS-51 内核上 做了很多的改进,使得 STC89C52 在处理嵌入式控制应用系统时更加高效、灵活。 STC89C52 具有以下标准功能:4 个外部中断、全双工串行口、一个 7 向量 4 级中断结 构、3 个 16 位定时器/计数器、8K 字节 Flash、512 字节 RAM(随机存储器) 、看门狗 定时器,其 12 周期和 6 周期可以任意选择,其工作电压在 3V5.5V 之间,工作频率在 040MHZ,实际工作频率可达 48MHZ2。其管脚的封装图如图 2 所示。 2.1.2 AT89C52 的主要性能参数 课程设计说明书 第3页 AT89C52 主要性能参数如下: 与 MC51 产品指令系统完全兼容 VCC(38 脚):芯片电源,接+5V GND(16 脚):接地端 XTAL1(15 脚):片内振荡器反相放大器和时钟发生器电路的输入端。当使 用片内振荡器时,该引脚连接外部石英晶体和微调电容;当采用外接时钟源时,该引 脚接外部时钟振荡器的信号 XTAL2(14 脚):片内振荡器反相放大器的输出端。当使用片内振荡器时, 该引脚连接外部石英晶体和微调电容;当采用外部时钟源时,该引脚悬空 ALE(27 脚):用来锁存 P0 口送出的低 8 位地址 PSEN(26 脚:外部 ROM 读选通信号 RST(4 脚):复位信号输入端 EA/Vpp(29 脚):内外 ROM 选择/片内 EPROM 编程电源 P0 口:8 位,漏极开路的双向 I/O 口 P1 口:8 位,准双向 I/O 口,具有内部上拉电阻 P2 口:8 位,准双向 I/O 口,具有内部上拉电阻 P3 口:8 位,准双向 I/O 口,具有内部上拉电阻 2.2 时钟电路 单片机内有一个由反相放大器所构成的振荡电路,XTAL1 和 XTAL2 分别为振荡 电路的输入端和输出端。在 XTAL1 和 XTAL2 引脚上外接石英晶体和微调电容构成并 联振荡回路。晶振频率设置为 11.0592MHZ,作用是产生时钟信号。单片机晶振提供的 时钟频率越高,那么单片机运行速度就越快,单片接的一切指令的执行都是建立在单 片机晶振提供的时钟频率。电容值为 30pF,可以起到频率微调作用3。时钟电路如图 3 所示。 课程设计说明书 第4页 XTAL1 30pF C4 30pF C5 GND XTAL1XTAL2 图 3 时钟电路图 2.3 复位电路 单片机 RST 接口为复位信号输入端,高电平有效。在该引脚上加上持续时间大于 两个机器周期的高电平,就可以使单片机复位。在单片机正常工作时,此引脚应为小 于或等于 0.5V 的低电平。复位电路接单片机 RST 端口,在 RST 输入端出现高电平时实 现复位和初始化4。复位电路如 4 所示。 R20 0.1uF C3 GND VCC REST 图 4 复位电路 2.4 显示电路 单片机的 P0 口为 8 位的漏极开路的双向 I/O 口,当 P0 口作为普通的 I/O 口使用时,需要上拉电阻,这时为准双向口。P1 、P2、 P3 都为 8 位的准双向口,具有内部上拉电阻。图 5 为显示电路,单片机 I/O 口一对 课程设计说明书 第5页 一直接控制 LED 灯,显示电路中的 32 个电阻既为上拉电阻,也起到电路 分 压作用,防止烧坏元器件5。显示电路如图 5 所示 R1 LED1VCC R3 LED3 R5 LED5 R7 LED7 R9 LED9 R11 LED11 R14 LED13 R16 LED15 R2 LED2VCC R4 LED4 R6 LED6 R8 LED8 R10 LED10 R12 LED12 R15 LED14 R17 LED16 LED1 LED2 LED3 LED4 LED5 LED6 LED7 LED8 LED17 LED18 LED19 LED20 LED21 LED22 LED23 LED24 R21 LED17VCC R23 LED19 R25 LED21 R27 LED23 R29 LED25 R31 LED27 R33 LED29 R35 LED31 R22 LED18VCC R24 LED20 R26 LED22 R28 LED24 R30 LED26 R32 LED28 R34 LED30 R36 LED32 LED9 LED10 LED11 LED12 LED13 LED14 LED15 LED16 LED25 LED26 LED27 LED28 LED29 LED30 LED31 LED32 图 5 显示电路图 2.6 总原理图设计 课程设计说明书 第6页 总结时钟电路、复位电路、以及显示电路,把其放入一个电路。得到总体的电路。 总体电路如图 6 所示。 图 6 电路原理图 3 系统软件设计 3.1 程序主要流程 单片机的应用系统由硬件和软件组成,在硬件原理图搭建完成上电之后,暂时还 不能看到流水灯循环点亮的现象,还需要编写程序控制单片机管脚电平的高低变化, 来实现 LED 灯的各种亮灭功能。 先将 P0、P1、P2、P3 全部置 1,即通入高电平,用 16 进制表示为 0XFFH,则 32 个 LED 灯全部处于熄灭状态。然后给 P0 口赋值 0X7FH,即只有 P0.0 处于低电平时, LED1 灯点亮。使用延时函数 delay,并设置延时时间为 2 秒,延时时间一到 P0 口的值 就变为 0X3FH,即 P0.0 和 P0.1 都为高电平,LED2 也开始点亮,如此循环 P0 口控制的 课程设计说明书 第7页 8 个 LED 灯全部点亮,当高电平变为低电平时,LED 灯熄灭。P1、P2、P3 口控制的 LED 灯闪亮和熄灭原理同 P0 口一样,所以就可以看到 LED 灯的流水效果了6。程序 流程图如图 7 所示, 低电平 高电平 图 7 程序设计流程图 3.2 程序设计 #include #include 开始 读取 I/O 口状态 判断 I/O 口状态 LED 灯熄灭 结束 LED 灯点亮 延时 灯流动运行 课程设计说明书 第8页 #defineuint unsigned int #defineuchar unsigned char uchar code table=0 xfe,0 xfc,0 xf8,0 xf0,0 xe0,0 xc0,0 x80,0 x00; / 逐个点亮 07 uchar code table1=0 x7f,0 x3f,0 x1f,0 x0f,0 x07,0 x03,0 x01,0 x00; / 逐个点亮 70 uchar code table2=0 x01,0 x03,0 x07,0 x0f,0 x1f,0 x3f,0 x7f,0 xff; / 逐个灭 07 uchar code table3=0 x80,0 xc0,0 xe0,0 xf0,0 xf8,0 xfc,0 xfe,0 xff; / 逐个灭 70 void delay(uint t); /延时 void zg(uint t,uchar a);/两边逐个亮 void qs(uint t,uchar a);/全部闪烁 void zgxh(uint t,uchar a); / 逆时针逐个点亮 /void zgxh1(uint t,uchar a); / 顺时针逐个点亮 void djs(uint t,uchar a); /对角闪 void lbzgm(uint t,uchar a);/两边逐个灭 /void sszgm(uint t,uchar a); / 顺时针逐个灭 void nszgm(uint t,uchar a); / 逆时针逐个灭 void sztl(uint t,uchar a);/顺时逐个同步亮 void nztl(uint t,uchar a);/逆时逐个同步亮 void sztm(uint t,uchar a);/顺时逐个同步灭 void nztm(uint t,uchar a);/逆时逐个同步灭 void hwzjl(uint t,uchar a); /横往中间亮 void hwzjm(uint t,uchar a); /横往中间灭 /void swzjl(uint t,uchar a); /竖往中间亮 /void swzjm(uint t,uchar a); /竖往中间灭 void nzdl(uint t,uchar a); /逆时逐段亮 void nzdgl(uint t,uchar a); /逆时逐段一个点亮 void jgs(uint t,uchar a); /间隔闪 void zg(uint t,uchar a)/两边逐个亮 uchar i,j; for(j=0;ja;j+) P0=P1=P2=P3=0 xff; P0=0 x7f;delay(t); for(i=0;i7;i+) P0=table1i+1; P2=table1i; delay(t); P2=0 x00;P1=0 xfe; delay(t); for(i=0;i7;i+) P1=tablei+1; 课程设计说明书 第9页 P3=table1i; delay(t); P3=0 x00;delay(t); void qs(uint t,uchar a) /全部闪烁 uchar j; for(j=0;ja;j+) P0=P1=P2=P3=0 xff; delay(t); P0=P1=P2=P3=0 x00; delay(t); void zgxh(uint t,uchar a) / 逆时针逐个点亮 uchar i,j; for (j=0;ja;j+) P0=P1=P2=P3=0 xff; for (i=0;i8;i+) P0=table1i; delay(t); for(i=0;i8;i+) P1=tablei; delay(t); for(i=0;i8;i+) P3=tablei; delay(t); for(i=0;i8;i+) P2=tablei; delay(t); 课程设计说明书 第10页 void nszgm(uint t,uchar a) / 逆时针逐个灭 uchar i,j; for(j=0;ja;j+) P0=P1=P2=P3=0 x00; for (i=0;i8;i+) P0=table3i;delay(t); for (i=0;i8;i+) P1=table2i;delay(t); for (i=0;i8;i+) P3=table2i;delay(t); for (i=0;i8;i+) P2=table2i;delay(t); void zgxh1(uint t,uchar a) / 顺时针逐个点亮 uchar i,j; for (j=0;ja;j+) P0=P1=P2=P3=0 xff; for (i=0;i8;i+) P2=table1i; delay(t); for(i=0;i8;i+) P3=table1i; delay(t); for(i=0;i8;i+) P1=table1i; 课程设计说明书 第11页 delay(t); for(i=0;i8;i+) P0=tablei; delay(t); void sszgm(uint t,uchar a) / 顺时针逐个灭 uchar i,j; for(j=0;ja;j+) P0=P1=P2=P3=0 x00; for (i=0;i8;i+) P2=table3i;delay(t); for (i=0;i8;i+) P3=table3i;delay(t); for (i=0;i8;i+) P1=table3i;delay(t); for (i=0;i8;i+) P0=table2i;delay(t); void djs(uint t,uchar a) /对角闪 uchar j; for(j=0;j1;i-) P0=table1i-1; P2=table1i-2; delay(t); P0=0 x7f;P2=0 xff;delay(t); P0=0 xff;delay(t); void sztl(uint t,uchar a)/顺时逐个同步亮 uchar i,j; for(j=0;ja;j+) P0=P1=P2=P3=0 xff; for(i=0;i8;i+) P0=tablei; P1=P2=P3=table1i; delay(t); void nztl(uint t,uchar a)/逆时逐个同步亮 课程设计说明书 第13页 uchar i,j; for(j=0;ja;j+) P0=P1=P2=P3=0 xff; for(i=0;i8;i+) P0=table1i; P1=P2=P3=tablei; delay(t); void sztm(uint t,uchar a)/顺时逐个同步灭 uchar i,j; for(j=0;ja;j+) P0=P1=P2=P3=0 x00; for(i=0;i8;i+) P0=table2i; P1=P2=P3=table3i; delay(t); void nztm(uint t,uchar a)/逆时逐个同步灭 uchar i,j; for(j=0;ja;j+) P0=P1=P2=P3=0 xff; for(i=0;i8;i+) P0=table3i; P1=P2=P3=table2i; delay(t); void hwzjl(uint t,uchar a) /横往中间亮 uchar i,j; for (j=0;ja;j+) 课程设计说明书 第14页 P0=P1=P2=P3=0 xff; for(i=0;i8;i+) P0=P2=P1=table1i; P3=tablei;delay(t); void hwzjm(uint t,uchar a) /横往中间灭 uchar i,j; for (j=0;ja;j+) P0=P1=P2=P3=0 x00; for(i=0;i8;i+) P0=P2=P1=table3i; P3=table2i;delay(t); void swzjl(uint t,uchar a) /竖往中间亮 uchar i,j; for (j=0;ja;j+) P0=P1=P2=P3=0 xff; for(i=0;i8;i+) P0=P2=P1=tablei; P3=table1i;delay(t); void swzjm(uint t,uchar a) /竖往中间灭 uchar i,j; for (j=0;ja;j+) P0=P1=P2=P3=0 x00; for(i=0;i8;i+) P0=P2=P1=table2i; 课程设计说明书 第15页 P3=table3i;delay(t); void nzdl(uint t,uchar a) /逆时逐段亮 uchar i,j; for (j=0;ja;j+) P0=P1=P2=P3=0 xff; for(i=0;i8;i+) P0=table1i; delay(t); P0=0 xff; for(i=0;i8;i+) P1=tablei; delay(t); P1=0 xff; for(i=0;i8;i+) P3=tablei; delay(t); P3=0 xff; for(i=0;i8;i+) P2=tablei; delay(t); P2=0 xff; void nzdgl(uint t,uchar a) /逆时逐段一个点亮 uchar i,j,k,l; for (j=0;ja;j+) k=table10; P0=k;l=table0; P1=P2=P3=l;delay(t); 课程设计说明书 第16页 for(i=0;i8;i+) k=_crol_(k,-1); P0=k; l=_crol_(l,1); P1=P2=P3=l; delay(t); void jgs(uint t,uchar a) /间隔闪 uchar j; for (j=0;ja;j+) P0=0 x55;P1=P2=P3=0 xaa; delay(t); P0=0 xaa;P1=P2=P3=0 x55; delay(t); void main() uchar i; while(1) zg(100,1); /两边逐个亮 lbzgm(100,1); /两边逐个灭 jgs(300,10); djs(100,20); /对角闪 P1=P2=P3=0 xff; for(i=0;i3;i+) P0=0 x00;delay(800); P0=0 xff;delay(800); P0=0 x00; for(i=0;i3;i+) P1=0 x00;delay(800); P1=0 xff;delay(800); P1=0 x00; 课程设计说明书 第17页 for(i=0;i3;i+) P3=0 x00;delay(800); P3=0 xff;delay(800); P3=0 x00; for(i=0;i3;i+) P2=0 x00;delay(800); P2=0 xff;delay(800); qs(500,3); for(i=0;i6;i+) zgxh(50,1); nszgm(50,1); djs(100,20); /对角闪 for(i=0;i3;i+) zg(100,1); /两边逐个亮 lbzgm(100,1); /两边逐个灭 qs(200,10);djs(100,50); for(i=0;i5;i+) sztl(200,1); /顺时逐个同步亮 nztm(200,1); nztl(200,1); sztm(200,1); /顺时逐个同步灭 djs(300,10); /对角闪 nzdgl(300,10); /逆时逐段一个点亮 jgs(300,10); /间隔闪 for(i=0;i3;i+) zgxh(100,1); nszgm(100,1); for(i=0;i5;i+) zgxh1(100,1); sszgm(100,1); 课程设计说明书 第18页 nzdl(200,3); /逆时逐段亮 jgs(50,100); /间隔闪 P0=P1=P2=P3=0 xff; for (i=0;i8;i+) P0=table1i; delay(200); for (i=0;i8;i+) P1=tablei; delay(200); for(i=0;i3;i+) P0=P1=0 x00;delay(200); P0=P1=0 xff;delay(200); for (i=0;i8;i+) P2=table1i; delay(200); for (i=0;i8;i+) P3=table1i; delay(200); for(i=0;i3;i+) P2=P3=0 x00;delay(200); P2=P3=0 xff;delay(200); nzdgl(50,40); /逆时逐段一个点亮 for(i=0;i4;i+) zg(100,1);qs(100,10); lbzgm(100,1); djs(50,100); /对角闪 for(i=0;i3;i+) 课程设计说明书 第19页 zgxh(100,1); nszgm(100,1); djs(1000,10); for(i=0;i10;i+) hwzjl(200,1); /横往中间亮 hwzjm(200,1); /横往中间灭 djs(300,10); /对角闪 for(i=0;i10;i+) swzjl(200,1); /竖往中间亮 swzjm(200,1); /竖往中间灭 for(i=0;i5;i+) zgxh(100,1); nszgm(100,1); djs(100,20); /对角闪 zg(300,1); lbzgm(300,1); for(i=0;i0;y-); 3.4 电路功能仿真 在各部分电路设计的基础上,按照总体电路图在 Proteus 上一一进行器件选择,并 连接。将电路连接好后,为各个器件选择合适的参数,然后调入已编译好的目标代码 Hex 文件,启动仿真。根据 LED 灯是否发亮,判断所设计的电路是否可以实现 32 个 LED 灯依次点亮、依次熄灭、对角闪亮、对角熄灭、间隔闪亮、间隔熄灭等多种功能。 刚开始时,LED 灯不亮,仔细检查原来是将 LED 灯接反了,改正之后 LED 灯便可以 正常发光了。电路仿真的结果为 32 个 LED 灯依次发亮、依次熄灭,并可以实现多种 亮灭功能。根据仿真结果可知电路原理及程序无误,可以进行 PCB 设计7。如图 8 所 示。 图 8 电路仿真图 课程设计说明书 第21页 总 结 在设计电路图的过程中,经过了多次分析和仿真验证,并结合所给的器件清单最 后确定了需要哪些器件来实现电路的功能,并且保证了所需要的元器件在给出的清单 范围内。经过 Proteus 软件多次仿真和修改后,在仿真电路图实现设计要求的前提下确 定了最终的原理图。然后在 Altium Designer 中画出来所对应的原理图8,再导入到 PCB 设计的环境中,进行 PCB 设计。在经过小组内多次讨论和听取指导老师的意见后 确定了 PCB 的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论