四花样彩灯控制器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.设计课题的任务与要求
(1)设计题目:四花样彩灯控制器
(2)基本要求:设计一四花样自动切换的彩灯控制器,要求实现,
1)彩灯一亮一灭,从左向右移动
2)彩灯两亮两灭,从左向右移动
3)四亮四灭,从左向右移动
4)从1~8从左到右逐次点亮,然后逐次熄灭
5)四种花样自动变换。
主要参考元器555,74LS93,74LS74,74LS153,74LS164
二.设计背景
彩灯控制器有着非常广泛的运用,如:LED彩灯,音乐彩灯控制器,二维彩灯控制器等等。随着人们生活环境的不断改善和美化,在许多场合可以看到彩色霓虹灯。LED彩灯由于其丰富的灯光色彩,低廉的造价以及控制简单等特点而得到了广泛的应用,城市景观、风景名胜、道路桥梁、建筑轮廓、娱乐场所、户外广告、室内装饰等美化、亮化工程,用彩灯来装饰街道和城市建筑物已经成为一种时尚。
二维彩灯控制器可控制五路彩灯逐行递增点亮,再逐行递减熄灭。若将一定的彩色灯组合联接,就能营造出平面上色彩变化的场景,这比通常控制一条线上的色彩流动更加丰富绚丽。控制器采用数字集成块,外围元器件少、电路结构简单,只要元器件完好、装接无误,装后无须调试即可一举成功。
音乐彩灯控制器是专用于卡拉ok厅KTV包房的彩灯控制设备,其最大优点是不与电视音响等设备有任何连接,本设备通过检测包房里的环境音频信号强弱来控制通过彩灯的电流大小即亮暗程度)来烘托娱乐的兴趣的目的,
也就是随着声音的大小而使彩灯闪烁,歌声和彩灯一起跳动,从而让唱歌人激情高涨,留连忘返。
本次实验主要研究的是四花样彩灯控制器,应用的是数字逻辑电路的有关知识,是进行复杂设计的基础,对进行复杂彩灯设计具有指导意义。
三.设计原理
(1)系统组成框图
图1 设计总图
图2 AT89C51
本设计是以单片机AT89C51为核心控制8个发光二极管5种闪烁方式的变换。硬件电路如图所示,八个发光二极管D1-D8分别接在单片机的P2.0-P2.7接口上,当给P2.0口输出“0”时,发光二极管点亮,输出“1”时,发光二极管熄灭。可以运用输出端口指令MOV P0,A或MOV P0,#DATA,只要给累加器值或常数值,同理,接在P2.1~P2.7口的其他7个LED的点亮和熄灭的方法同LED1。因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED便会一亮一暗的成流水灯了。在此我们还应注意一点,由于人眼的视觉暂留以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到闪烁效果。
AT89S52具有以下标准功能:8k字Flash,256字节RAM,32位I/O口线,看门狗定时器,3个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位止。在AT89S52芯片内部有一个高增益反相放大器,用于构成振荡器。反相放大器的输入端为引脚XTAL1,输出端为引脚XTAL,在芯片的外部通过这两个引脚跨接晶体振荡器和微调电容C1、C2形成反馈电路,可构成稳定的自激振荡器,振荡频率为.2~12MHz 。若晶体振荡器频率高,则系统的时钟频率也高,单片机的运行速度也就快。(3)按键模块
采用如下所示电路来实现控制花样彩灯的复位,按下开关,单片机复位,花样彩灯按模式一闪烁。
图3 复位电路
(4)显示模块
LED显示电路由单片机89C51的P0口,P1口和P2口与发光二极管相连,低电平二极管发光。LED显示电路如图2所示。
图4 LED显示电路
(5)程序设计
#include
#include
#include
char table;
char table2[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};
void delay( int c)
{
int i,j;
for(i=0;i<=c;i++)
for(j=0;j<=500;j++);
}
void huayang1()
{
int i;
table=0xfe;
for(i=0;i<8;i++)
{
P0=table;
delay(200);
table=_crol_(table,1); P0=table;
}
}
void huayang2()
{
int i=0;
table=0xfc;
for(i=0;i<4;i++)
{
P0=table;
delay(200);
table=_crol_(table,2); P0=table;
}
}
void huayang3()
{
int i=0;
table=0xf0;
for(i=0;i<5;i++)
{
P0=table;
delay(200);
table=_crol_(table,1);
P0=table;
}
}
void huayang4()
{
int i=0;
table=0xfe;
for(i=0;i<7;i++) {
P0=table;
delay(200);
table<<=1;
P0=table;
}
delay(200);
for(i=0;i<8;i++)
{
P0=table2[i];
delay(200);
}
delay(200);
}
void main()
{ /*int i,a;
for(i=0;i<100;i++) {
a=rand()%4;
switch (a)
{