基于AT89C51单片机的花样彩灯.docx
- 文档编号:6853368
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:17
- 大小:247.08KB
基于AT89C51单片机的花样彩灯.docx
《基于AT89C51单片机的花样彩灯.docx》由会员分享,可在线阅读,更多相关《基于AT89C51单片机的花样彩灯.docx(17页珍藏版)》请在冰豆网上搜索。
基于AT89C51单片机的花样彩灯
4.2仿真软件简介.......................................................8
参考文献.................................................................13
附录程序代码............................................................14
摘要:
随着电子技术的迅速发展,单片机得到了越来越多的应用。
本设计用单片机8951结合LED制作了一种新型的LED彩灯控制系统的设计方法,以AT-89C51单片机作为主控核心,与按键、显示器等较少的辅助硬件电路相结合,利用软件实现对LED彩灯进行控制。
本系统具有体积小、硬件少、电路结构简单与容易操作等优点。
关键字:
LED彩灯;AT89C51单片机;彩灯控制器;模块设计
系统设计
2.1设计任务与要求
2.1.1设计任务
(1)设计一个基于单片机的花样彩灯;
(2)在设计过程中,选择1~2个单元电路使用仿真软件(例如Proteus等)进行仿真调试;
(3)用计算机绘制所有的电路图。
2.1.2设计要求
(1)设计一个花样彩灯。
(2)彩灯至少有7种工作模式。
(3)当按下按键后,模式可以复位。
2.2方案的选择与论证
2.2.1总体设计方案
方案一:
采用各类数字电路来组成键盘控制系统,进行信号处理,如选用CPLD等可编程逻辑器件。
本方案电路复杂,灵活性不高,效率低,不利于系统的扩展,对信号处理比较困难。
方案二:
过单片机控制二极管的闪烁,通过中断来改变模式同时串行输出数码管。
P0,P1口接16个二极管,P3口接扩展板的数码显示接口。
该方案简单,易于设计和控制。
3系统硬件设计
按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统与典型系统等。
AT-89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS8位单片机,具有丰富的部资源:
4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作围和0~24MHz工作频率,使用AT-89C51单片机时无须外扩存储器。
因此,本彩灯控制系统实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。
其具体硬件组成如图1所示。
图1彩灯硬件原理图
从图1中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要让接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。
因此,要实现彩灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做彩灯了。
在此我们还应注意一点,由于人眼的视觉暂留效应以与单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“彩灯”效果了。
3.1控制器模块
本系统控制器芯片采用AT89C51单片机,其管脚图如图3所示。
D8-D6:
数据输入线。
RESET:
复位端口。
T0,T1:
计数器端口外部计数脉冲输入线。
XTAL1,XTAL2:
时钟电路。
VCC:
供电电压。
GND:
接地。
图389C51功能说明图
AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89C51具有以下特性:
与MCS-51兼容,4K字节可编程闪烁存储器,寿命:
1000写/擦循环,数据保留时间:
10年,全静态工作:
0Hz-24MHz,三级程序存储器锁定,128×8位部RAM,32可编程I/O线,两个16位定时器/计数器,5个中断源,可编程串行通道,低功耗的闲置和掉电模式、片振荡器和时钟电路。
3.2按键模块
采用如下所示电路来实现控制花样彩灯的复位,按下开关,单片机复位,花样彩灯按模式一闪烁。
图
电源电路有三端稳压器7805和电容组成,外部电池供电,BAT接7V左右的电压,稳压输出5V的电压。
电源电路如图4所示。
图4.电源电路
3.4LED显示模块
LED显示电路由单片机89C51的P0口,P1口和P2口与发光二极管相连,低电平二极管发光。
LED显示电路如图2所示。
图2.LED显示电路
3.5硬件元件清单
系统元器件清单见表2。
表2系统元器件清单
器件
数量
器件
数量
AT89C51
1
晶振器
1
LED
8
排阻(4.7k)
8
电容(30pF)
2
电阻(100k)
1
电容(10uF)
1
开关
1
4软件设计与仿真
本系统程序包括主程序、键盘扫描子程序、发送键码子程序、发送数据子程序、接收命令子程序等。
主程序用于系统初始化,子程序调度等。
键盘扫描子程序用于扫描键盘状态,将被按键的位置号存入缓冲器中。
发送键码子程序用于将缓冲区键的接通码或断开码发送给单片机接口。
发送数据子程序用于将数据发给单片机接口。
接收命令子程序用于接收单片机接口发来的键盘命令。
4.1主程序设计
程序流程图:
中断程序:
主程序:
4.2仿真软件简介
Proteus是英国Labcenter公司开发的电路分析与实物仿真软件。
它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:
(1)实现了单片机仿真和SPICE电路仿真相结合。
具有模拟电路仿真、数字电路仿真、单片机与其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
(2)支持主流单片机系统的仿真。
目前支持的单片机类型有:
ARM7(LPC21xx)、8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以与多种外围芯片。
(3)提供软件调试功能。
在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2、MPLAB等软件。
(4)具有强大的原理图绘制功能。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。
Proteus7.5是目前最好的模拟单片机外围器件的工具,可以仿真51系列、AVR、PIC等常用的MCU与其外围电路(如LCD、RAM、ROM、键盘、马达、LED、AD/DA、部分SPI器件、部分IIC器件等)。
软件编译采用KEILC51软件,KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
用过汇编语言后再使用C来开发,体会更加深刻。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
4.3仿真结果
先按复位键,系统初始化,然后8个LED开始按照要求闪烁,分别按下列模块点亮:
模块1:
循环单向闪烁,只有一个灯亮
模块2:
循环单向闪烁,只有两个灯亮
模块3:
循环往复闪烁,只有一个灯亮
模块4:
全亮全灭
模块5:
顺次点亮或者熄灭,多个灯亮
模块6:
顺次点亮或者熄灭,多个灯亮,一次点亮两个
模块7:
双端对称往返闪烁
4.4系统调试
在调试过程中主要是对程序的修改,特别是延时子程序。
开始延时较短时,当按下开关时,LED开始闪烁。
如果延时较长则LED闪烁更慢。
通过修改程序,将延时调到适中,系统正常工作。
4.5误差分析
设定预设值后,记录模式一的数据,每次送出的数据是不同,具体的数据如下表1所示
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
说明
L8
L7
L6
L5
L4
L3
L2
L1
1
1
1
1
1
1
1
0
L1亮
1
1
1
1
1
1
0
1
L2亮
1
1
1
1
1
0
1
1
L3亮
1
1
1
1
0
1
1
1
L4亮
1
1
1
0
1
1
1
1
L5亮
1
1
0
1
1
1
1
1
L6亮
1
0
1
1
1
1
1
1
L7亮
0
1
1
1
1
1
1
1
L8亮
后面几种模式的实验结果基本和理论值一样,没什么误差。
结束语
该设计是以AT-89C51单片机为主控芯片,与发光二极管、晶振电路、复位电路和电源电路组成,通过程序控制彩灯流水花样。
本文所给程序实现的功能比较简单,旨在抛砖引玉,可以在此基础上扩展成更复杂的彩灯控制,比如键盘控制流水花样、控制流水灯显示数字或图案等等。
通过花样彩灯的制作,给我最大的体会是对一个程序整体的把握和控制,只有将子程序有效的结合起来,才能完成设计的目的。
另外,在程序的调试过程中,我也遇到了很多意想不到的困难,在老师的帮助和自己的不懈努力下,我对伟福这款仿真软件有了更深的认识,将困难一一克服,使程序编译成功,仿真实现。
参考文献
[1]吴金戎.8051单片机实践与应用[M].:
清华大学,2003.8
[2]王质朴.MCS-51单片机原理接口与应用[M]:
理工大学,2009.11
[3]皮大能.单片机课程设计指导书[M].:
理工大学,2010.7
[4]夏路易.单片机技术基础教程与实践[M].:
电子工业,2008.1
[5]辉平.基于Proteus的单片机系统设计与仿真实例[M].:
机械工业,2009.7
附录:
程序清单
#include
#defineuintunsignedint
voiddelay(uint);
main()
{
uintfre=0x04;
uintfre1,fre2;
uintcomp1=0xfe,comp2=0x80;
while
(1)
{
/*-------------------------------------------------------------
模块一:
循环单向闪烁,只有一个灯亮
执行3次,转入下一种闪烁
------------------------------------------------------------*/
P1=0xfe;
while(1!
=fre--)
{
fre1=0x08;
while(1!
=fre1--)
{
delay(30000);
P1<<=1;
P1|=0x01;
if(P1==0x7f)
{
delay(30000);
P1=0xfe;
}
}
}
/*-------------------------------------------------------------
模块2:
循环单向闪烁,只有两个灯亮
3次,转入下一种闪烁执行
-------------------------------------------------------------*/
P1=0xfc;
while(3!
=fre++)
{
fre2=0x04;
while(1!
=fre2--)
{
delay(30000);
P1<<=2;
P1|=0x03;
if(P1==0x3f)
{
delay(30000);
P1=0xfc;
}
}
}
/*-------------------------------------------------------------
模块3:
循环往复闪烁,只有一个灯亮
执行3次,转入下一种闪烁
-------------------------------------------------------------*/
P1=0xfe;
fre1=0x04;
while(1!
=fre1--)
{
while(P1!
=0x7f)
{
delay(30000);
P1<<=1;
P1|=0x01;
}
while(P1!
=0xfe)
{
delay(30000);
P1>>=1;
P1|=0x80;
}
}
/*-------------------------------------------------------------
模块4:
全亮全灭
执行3次,转入下一模块
-------------------------------------------------------------*/
while(3!
=fre1++)
{
delay(30000);
P1=0x00;
delay(30000);
P1=0xff;
}
/*-------------------------------------------------------------
模块5:
顺次点亮或者熄灭,
多个灯亮,执行3次,转入下一模块
-------------------------------------------------------------*/
while(1!
=fre1--)
{
P1=0xfe;
while(P1!
=0x00)
{
delay(30000);
P1<<=1;
}
delay(30000);
P1=0x80;
while(P1!
=0xff)
{
delay(30000);
P1>>=1;
P1|=0x80;
}
}
/*-------------------------------------------------------------
模块6:
顺次点亮或者熄灭,多个灯亮,
一次点亮两个,执行3次,转入下一模块
-------------------------------------------------------------*/
while(3!
=fre1++)
{
P1=0xfc;
while(P1!
=0x00)
{
delay(30000);
P1<<=2;
}
delay(30000);
P1=0xc0;
while(P1!
=0xff)
{
delay(30000);
P1>>=2;
P1|=0xc0;
}
delay(30000);
}
/*-------------------------------------------------------------
模块7:
双端对称往返闪烁
执行3次,进行下一轮循环
-------------------------------------------------------------*/
P1=0x7e;
delay(30000);
while(1!
=fre1--)
{
fre2=0x00;
while(6!
=fre2++)
{
P1=0xff;
comp1<<=1;
comp1|=0x01;
comp2>>=1;
P1&=comp1;
P1^=comp2;
delay(3000000);
if(P1==0xe7)
{
comp1<<=1;
comp1|=0x01;
comp2>>=1;
}
if(comp2==0x01)
{
comp1=0xfe;
comp2=0x80;
}
}
}
}
}
voiddelay(uintt)
{
while(cnt--);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 AT89C51 单片机 花样 彩灯