心形流水灯课程设计.doc_第1页
心形流水灯课程设计.doc_第2页
心形流水灯课程设计.doc_第3页
全文预览已结束

下载本文档

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

文档简介

_ 精品资料 心形流水灯设计 摘 要 本课题是利用 STC89C52 设计了一个心形流水灯电路,该电路可以实现 32 个 LED 灯循环闪亮、依次熄灭、对角闪亮、对角熄灭、间隔闪亮、间隔熄灭等多种功能。该电路 主要由单片机芯片 STC89C52、电源电路、时钟电路、复位电路和显示电路组成。利用 Keil 软件编写 C 语言程序,并生成目标代码 Hex 文件。使用 Proteus 软件设计仿真电路, 并调入已编译好的目标代码,即可在仿真图中看到模拟实物的运行状态和过程。使用 Altium Designer 软件对电路进行原理图设计和 PCB 设计,并对该电路行安装和调试,调 试结果可以实现流水灯的多种亮灭循环的功能。 关键词:AT89C52,复位电路,时钟电路,发光二极管 _ 精品资料 目 录 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 课题描述 随着现代科学技术的持续进步和发展以及人们生活水平的不断提高,以大规模、超 大规模集成电路为首的电子工艺技术的使用也越来越广泛,结合单片机技术设计的电子 电路也层出不穷。 LED 彩灯由于其丰富的灯光色彩、低廉的造价以及控制简单等特点 而得到了广泛的应用,用彩灯来装饰街道和城市建筑物已经成为一种时尚。利用控制电 路可使彩灯按一定的规律不断的改变状态,不仅可以获得良好的观赏效果,而且可以省 电。 彩灯的运用已经遍布于人们的生活中,从歌舞厅到卡拉 OK 包房,从节日的祝贺到 日常生活中的点缀,这些不仅说明了我们对生活的要求有了质的飞跃,也说明科技在现 实生活中的运用有了较大的发展。在这一设计中我们将运用单片机技术,与单片机芯片 STC89C52 的功能,对心形流水灯系统进行设计,来实现流水灯的多种亮与灭的循环,给 人带来美感1。 1.2 基本工作原理及框图 本课程设计的 XX 系统原理如图 1 所示。 电源电路 显示电路 AT89C52 时钟电路 _ 精品资料 图 1 基本工作原理框图 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 的主要性能参数 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 所示。 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 口一对一直接 控制 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 电路原理图 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 口控制的 8 个 LED 灯全部点亮,当高电平变为低电平时,LED 灯熄灭。P1、P2、P3 口控制的 LED 灯闪亮和 熄灭原理同 P0 口一样,所以就可以看到 LED 灯的流水效果了6。程序流程图如图 7 所 示, 低电平 高电平 图 7 程序设计流程图 开始 读取 I/O 口状态 判断 I/O 口状态 LED 灯熄灭 结束 LED 灯点亮 延时 灯流动运行 _ 精品资料 3.2 程序设计 #include #include #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; 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); 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; 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)/逆时逐个同步亮 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+) 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; 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); 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; 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); 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+) 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 电路仿真图 _ 精品资料 总 结 在设计电路图的过程中,经过了多次分析和仿真验证,并结合所给的器件清单最后 确定了需要哪些器件来实现电路的功能,并且保证了所需要的元器件在给出的清单范围 内。经过 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

提交评论