心形流水灯课程设计.docx
- 文档编号:4040175
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:27
- 大小:143.12KB
心形流水灯课程设计.docx
《心形流水灯课程设计.docx》由会员分享,可在线阅读,更多相关《心形流水灯课程设计.docx(27页珍藏版)》请在冰豆网上搜索。
心形流水灯课程设计
心形流水灯设计
摘要
本课题是利用STC89C52设计了一个心形流水灯电路,该电路可以实现32个LED灯循环闪亮、依次熄灭、对角闪亮、对角熄灭、间隔闪亮、间隔熄灭等多种功能。
该电路主要由单片机芯片STC89C52、电源电路、时钟电路、复位电路和显示电路组成。
利用Keil软件编写C语言程序,并生成目标代码Hex文件。
使用Proteus软件设计仿真电路,并调入已编译好的目标代码,即可在仿真图中看到模拟实物的运行状态和过程。
使用AltiumDesigner软件对电路进行原理图设计和PCB设计,并对该电路行安装和调试,调试结果可以实现流水灯的多种亮灭循环的功能。
关键词:
AT89C52,复位电路,时钟电路,发光二极管
1绪论
1.1课题描述
随着现代科学技术的持续进步和发展以及人们生活水平的不断提高,以大规模、超大规模集成电路为首的电子工艺技术的使用也越来越广泛,结合单片机技术设计的电子电路也层出不穷。
LED彩灯由于其丰富的灯光色彩、低廉的造价以及控制简单等特点而得到了广泛的应用,用彩灯来装饰街道和城市建筑物已经成为一种时尚。
利用控制电路可使彩灯按一定的规律不断的改变状态,不仅可以获得良好的观赏效果,而且可以省电。
彩灯的运用已经遍布于人们的生活中,从歌舞厅到卡拉OK包房,从节日的祝贺到日常生活中的点缀,这些不仅说明了我们对生活的要求有了质的飞跃,也说明科技在现实生活中的运用有了较大的发展。
在这一设计中我们将运用单片机技术,与单片机芯片STC89C52的功能,对心形流水灯系统进行设计,来实现流水灯的多种亮与灭的循环,给人带来美感[1]。
1.2基本工作原理及框图
本课程设计的XX系统原理如图1所示。
图1基本工作原理框图
2相关芯片及硬件电路设计
2.1AT89C52芯片
。
图2AT89C52引脚图
2.1.1AT89C52的功能特性
STC89C52是STC公司生产的一种低功耗、高性能的微控制器,具有8K的系统可编程Flash存储器,其具有传统51单片机不具备的功能,在经典的MCS-51内核上做了很多的改进,使得STC89C52在处理嵌入式控制应用系统时更加高效、灵活。
STC89C52具有以下标准功能:
4个外部中断、全双工串行口、一个7向量4级中断结构、3个16位定时器/计数器、8K字节Flash、512字节RAM(随机存储器)、看门狗定时器,其12周期和6周期可以任意选择,其工作电压在3V~5.5V之间,工作频率在0~40MHZ,实际工作频率可达48MHZ[2]。
其管脚的封装图如图2所示。
2.1.2AT89C52的主要性能参数
AT89C52主要性能参数如下:
●与MC-51产品指令系统完全兼容
●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所示。
图3时钟电路图
2.3复位电路
单片机RST接口为复位信号输入端,高电平有效。
在该引脚上加上持续时间大于两个机器周期的高电平,就可以使单片机复位。
在单片机正常工作时,此引脚应为小于或等于0.5V的低电平。
复位电路接单片机RST端口,在RST输入端出现高电平时实现复位和初始化[4]。
复位电路如4所示。
图4复位电路
2.4显示电路
单片机的P0口为8位的漏极开路的双向I/O口,当P0口作为普通的I/O口使用时,需要上拉电阻,这时为准双向口。
P1、P2、P3都为8位的准双向口,具有内部上拉电阻。
图5为显示电路,单片机I/O口一对一直接控制LED灯,显示电路中的32个电阻既为上拉电阻,也起到电路分
压作用,防止烧坏元器件[5]。
显示电路如图5所示
图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程序设计流程图
3.2程序设计
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
ucharcodetable[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};//逐个点亮0~7
ucharcodetable1[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//逐个点亮7~0
ucharcodetable2[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//逐个灭0~7
ucharcodetable3[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//逐个灭7~0
voiddelay(uintt);//延时
voidzg(uintt,uchara);//两边逐个亮
voidqs(uintt,uchara);//全部闪烁
voidzgxh(uintt,uchara);//逆时针逐个点亮
//voidzgxh1(uintt,uchara);//顺时针逐个点亮
voiddjs(uintt,uchara);//对角闪
voidlbzgm(uintt,uchara);//两边逐个灭
//voidsszgm(uintt,uchara);//顺时针逐个灭
voidnszgm(uintt,uchara);//逆时针逐个灭
voidsztl(uintt,uchara);//顺时逐个同步亮
voidnztl(uintt,uchara);//逆时逐个同步亮
voidsztm(uintt,uchara);//顺时逐个同步灭
voidnztm(uintt,uchara);//逆时逐个同步灭
voidhwzjl(uintt,uchara);//横往中间亮
voidhwzjm(uintt,uchara);//横往中间灭
//voidswzjl(uintt,uchara);//竖往中间亮
//voidswzjm(uintt,uchara);//竖往中间灭
voidnzdl(uintt,uchara);//逆时逐段亮
voidnzdgl(uintt,uchara);//逆时逐段一个点亮
voidjgs(uintt,uchara);//间隔闪
voidzg(uintt,uchara)//两边逐个亮
{
uchari,j;
for(j=0;j { P0=P1=P2=P3=0xff; P0=0x7f;delay(t); for(i=0;i<7;i++) { P0=table1[i+1]; P2=table1[i]; delay(t); } P2=0x00;P1=0xfe; delay(t); for(i=0;i<7;i++) { P1=table[i+1]; P3=table1[i]; delay(t); } P3=0x00;delay(t); } } voidqs(uintt,uchara)//全部闪烁 { ucharj; for(j=0;j { P0=P1=P2=P3=0xff; delay(t); P0=P1=P2=P3=0x00; delay(t); } } voidzgxh(uintt,uchara)//逆时针逐个点亮 { uchari,j; for(j=0;j { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=table1[i]; delay(t); } for(i=0;i<8;i++) { P1=table[i]; delay(t); } for(i=0;i<8;i++) { P3=table[i]; delay(t); } for(i=0;i<8;i++) { P2=table[i]; delay(t); } } } voidnszgm(uintt,uchara)//逆时针逐个灭 { uchari,j; for(j=0;j { P0=P1=P2=P3=0x00; for(i=0;i<8;i++) { P0=table3[i];delay(t); } for(i=0;i<8;i++) { P1=table2[i];delay(t); } for(i=0;i<8;i++) { P3=table2[i];delay(t); } for(i=0;i<8;i++) { P2=table2[i];delay(t); } } } voidzgxh1(uintt,uchara)//顺时针逐个点亮 { uchari,j; for(j=0;j { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P2=table1[i]; delay(t); } for(i=0;i<8;i++) { P3=table1[i]; delay(t); } for(i=0;i<8;i++) { P1=table1[i]; delay(t); } for(i=0;i<8;i++) { P0=table[i]; delay(t); } } } voidsszgm(uintt,uchara)//顺时针逐个灭 { uchari,j; for(j=0;j { P0=P1=P2=P3=0x00; for(i=0;i<8;i++) { P2=table3[i];delay(t); } for(i=0;i<8;i++) { P3=table3[i];delay(t); } for(i=0;i<8;i++) { P1=table3[i];delay(t); } for(i=0;i<8;i++) { P0=table2[i];delay(t); } } } voiddjs(uintt,uchara)//对角闪 { ucharj; for(j=0;j { P0=P1=P2=P3=0xff; P0=P3=0x00; delay(t); P0=P1=P2=P3=0xff; P1=P2=0x00; delay(t); } } voidlbzgm(uintt,uchara)//两边逐个灭 { uchari,j; for(j=0;j { P0=P2=0x00; P3=0x01;delay(t); for(i=7;i>1;i--) { P1=table[i-1];P3=table1[i-2]; delay(t); } P1=0xfe;P3=0xff;delay(t); P1=0xff;P2=0x01;delay(t); for(i=7;i>1;i--) { P0=table1[i-1]; P2=table1[i-2]; delay(t); } P0=0x7f;P2=0xff;delay(t); P0=0xff;delay(t); } } voidsztl(uintt,uchara)//顺时逐个同步亮 { uchari,j; for(j=0;j { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=table[i]; P1=P2=P3=table1[i]; delay(t); } } } voidnztl(uintt,uchara)//逆时逐个同步亮 { uchari,j; for(j=0;j { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=table1[i]; P1=P2=P3=table[i]; delay(t); } } } voidsztm(uintt,uchara)//顺时逐个同步灭 { uchari,j; for(j=0;j { P0=P1=P2=P3=0x00; for(i=0;i<8;i++) { P0=table2[i]; P1=P2=P3=table3[i]; delay(t); } } } voidnztm(uintt,uchara)//逆时逐个同步灭 { uchari,j; for(j=0;j { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=table3[i]; P1=P2=P3=table2[i]; delay(t); } } } voidhwzjl(uintt,uchara)//横往中间亮 { uchari,j; for(j=0;j { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=P2=P1=table1[i]; P3=table[i];delay(t); } } } voidhwzjm(uintt,uchara)//横往中间灭 { uchari,j; for(j=0;j { P0=P1=P2=P3=0x00; for(i=0;i<8;i++) { P0=P2=P1=table3[i]; P3=table2[i];delay(t); } } } voidswzjl(uintt,uchara)//竖往中间亮 { uchari,j; for(j=0;j { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=P2=P1=table[i]; P3=table1[i];delay(t); } } } voidswzjm(uintt,uchara)//竖往中间灭 { uchari,j; for(j=0;j { P0=P1=P2=P3=0x00; for(i=0;i<8;i++) { P0=P2=P1=table2[i]; P3=table3[i];delay(t); } } } voidnzdl(uintt,uchara)//逆时逐段亮 { uchari,j; for(j=0;j { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=table1[i]; delay(t); } P0=0xff; for(i=0;i<8;i++) { P1=table[i]; delay(t); } P1=0xff; for(i=0;i<8;i++) { P3=table[i]; delay(t); } P3=0xff; for(i=0;i<8;i++) { P2=table[i]; delay(t); } P2=0xff; } } voidnzdgl(uintt,uchara)//逆时逐段一个点亮 { uchari,j,k,l;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 流水 课程设计