简易多彩广告灯控制设计资料Word格式文档下载.docx
《简易多彩广告灯控制设计资料Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《简易多彩广告灯控制设计资料Word格式文档下载.docx(26页珍藏版)》请在冰点文库上搜索。
3、设计程序
3.1程序设计框图………………………………………………………………………9
3.2程序及注释…………………………………………………………………………9
4、设计图纸设计原理图附图
4.1设计原理图附图…………………………………………………………………16
4.2设计PCB附图……………………………………………………………………17
5、课程设计总结……………………………………………………………………………19
6、参考文献…………………………………………………………………………………20
1.1原始数据及主要任务
设计并制作出一个以单片机为核心的彩灯闪烁控制系统:
(1)确定总体设计方案
(2)、设计键盘输入电路(3)、设计显示电路(4)、合理分配地址,编写系统程序(5)、利用Protel设计硬件电路原理图和PCB图(6)、软硬件联机调试
1.2技术要求
设计一个以MCS-51单片机为核心的简易多彩广告灯广告灯闪烁控制系统,2位数码管显示闪烁控制方案,分别显示01、02、03、和10号方案,初始化为00,彩灯灭;
2个控制按键,一个加一数字键,一个确定键,循环10个花型的方案。
方案01为左循环亮一秒闪烁;
方案02为右循环亮一秒闪烁;
方案03为“100000000、11000000…11111111”递增间隔1秒闪烁;
方案10为“01010101,10101010”间隔一秒闪烁;
其余方案灯灭。
2.1确定总体设计方案
2.2元器件介绍
2.2.1单片机STC90C52
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据地址的低八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能,如P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;
当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
2.2.2RS232
RS-232C标准(协议)的全称是EIA-RS-232C标准,其中EIA(ElectronicIndustryAssociation)代表美国电子工业协会,RS(recommededstandard)代表推荐标准,232是标识号,C代表RS232的最新一次修改(1969),在这之前,有RS232B、RS232A。
它规定连接电缆和机械、电气特性、信号功能及传送过程。
常用物理标准还有有EIARS-422A、EIARS-423A、EIARS-485。
例如,目前在IBMPC机上的COM1、COM2接口,就是RS-232C接口。
2.2.3CD4511
CD4511是一个用于驱动共阴极LED(数码管)显示器的BCD码—七段码译码器,特点:
具有BCD转换、消隐和锁存控制、七段译码及驱动功能的CMOS电路,能提供较大的电流,可直接驱动LED显示器。
CD4511是一片CMOSBCD—锁存/7段译码/驱动器,引脚排列如图所示。
其中A、B、C、D为BCD码输入,A为最低位。
LT为灯测试端,加高电平时,显示器正常显示,加低电平时,显示器一直显示数码“8”,各笔段都被点亮,以检查显示器是否有故障。
BI为消隐功能端,低电平时使所有笔段均消隐,正常显示时,B1端应加高电平。
另外CD4511有拒绝伪码的特点,当输入数据越过十进制数9(1001)时,显示字形也自行消隐。
LE是锁存控制端,高电平时锁存,低电平时传输数据。
a~g是7段输出,可驱动共阴LED数码管。
限流电阻要根据电源电压来选取,电源电压5V时可使用300Ω的限流电阻。
功能介绍如下:
BI:
4脚是消隐输入控制端,当BI=0时,不管其它输入端状态如何,七段数码管均处于熄灭(消隐)状态,不显示数字。
LT:
3脚是测试输入端,当BI=1,LT=0时,译码输出全为1,不管输入DCBA状态如何,七段均发亮,显示“8”。
它主要用来检测数码管是否损坏。
LE:
锁定控制端,当LE=0时,允许译码输出。
LE=1时译码器是锁定保持状态,译码器输出被保持在LE=0时的数值。
A1、A2、A3、A4、为8421BCD码输入端。
a、b、c、d、e、f、g:
为译码输出端,输出高电平有效。
CD4511具有锁存、译码、消隐功能,通常以反相器作输出级,通常用以驱动LED。
各引脚的名称:
其中7、1、2、6分别表示A、B、C、D;
5、4、3分别表示LE、BI、LT;
13、12、11、10、9、15、14分别表示a、b、c、d、e、f、g。
左边的引脚表示输入,右边表示输出,还有两个引脚8、16分别表示的是GND、VCC。
2.2.4共阴极数码管
2.2.1单片机最小系统电路
要使单片机工作起来,最基本的电路的构成由单片机、时钟电路、复位电路等组成。
单片机最小系统如图所示。
时钟电路:
本系统采用单片机内部方式产生时钟信号,用于外接一个6MHz石英晶体振荡器和2个22pF微调电容,构成稳定的的自激振荡器,其发出的脉冲直接送入内部的时钟电路。
复位电路:
确定单片机工作的起始状态,完成单片机的启动过程。
单片机系统的复位方式有上电自动复位和手动按键复位。
本设计采用手动按键复位,该复位方式同样具有上电自动复位功能。
电路如下图所示。
时钟电路复位电路
2.2.2多色彩广告灯闪烁控制电路
2.2.2.1设计数字显示电路
本部分为数字显示电路,用CD4511驱动共阴极数码管,220Ω为限流电阻,由单片机P2口控制。
数字显示电路
、
2.2.2.2按键控制电路
2.2.2.3设计LED灯显示电路
本部分为LED灯显示电路,由于发光二极管工作电流为10mA,选用所以470Ω为限流电阻。
3.设计程序
3.1程序设计框图
3.2源程序
#include<
reg52.h>
intrins.h>
#include"
delay.h"
main.h"
key.h"
led.h"
shumaguan.h"
voidmain()
{
init();
while
(1)
{
key_detect();
display();
}}#include"
/*********************************************
函数功能:
延时
入口参数:
z
*********************************************/
voiddelay(uintz)
uintx,y;
for(x=z;
x>
0;
x--)
for(y=619;
y>
y--);
}
uintflag;
/***********************************************************************************************************************
按键检测
***********************************************************************************************************************
***********************************************************************************************************************/
voidkey_detect()
if(k1==0)
P0=0xff;
//关位选
delay(10);
if(k1==0){
flag++;
if(flag==11)
{flag=0;
}
while(!
k1);
//检测是否松开按键r
elseif(k2==0)
if(k2==0)
switch(flag)
case1:
left_loop();
break;
case2:
right_loop();
break;
case3:
increase();
case10:
ji_ou();
default:
other_program();
}
k2);
}#include"
ucharcodetable_l[]={0xfe,0xfc,0xfb,0xf7,0xef,0xcf,0xbf,0x7f};
/****************************************
实现任务一:
流水灯正向循环亮5次
要实现流水灯左循环亮1秒闪烁
****************************************/
voidleft_loop()
uchartemp;
temp=0x7f;
{temp=_cror_(temp,1);
delay(8);
P3=temp;
{P3=0xff;
delay(20);
P3=0xff;
}
实现任务二:
流水灯反向循环亮5次
要实现流水灯右循环亮1秒闪烁
voidright_loop()
temp=0xfe;
{delay(20);
}
/******************************************
所有灯灭
******************************************/
voidother_program()
{delay(10);
//检测是否松开按键r
}
/*******************************************
实现任务三:
全灭全亮3次,正向循环亮五次
要实现递增间隔1秒闪烁
*******************************************/
voidincrease()
uchari,m,j;
uchara[]={0x00,0xff,0x00,0xff,0x00,0xff};
for(i=0;
i<
6;
i++)
{P3=a[i];
delay(40);
}
for(m=5;
m>
m--)
{
P3=0xfe;
for(j=0;
j<
7;
j++)
{P3=_crol_(P3,1);
delay(1000);
/********************************************
实现任务十:
奇偶循环亮5次
要实现奇偶间隔1秒闪烁
********************************************/
voidji_ou()
uchara[]={0xfe,0xfb,0xef,0xbf};
ucharb[]={0xfd,0xf7,0xdf,0x7f};
for(m=5;
{for(i=0;
4;
delay(50);
if(k1==0)
}}
j++){
P3=b[j];
}
}P3=0xff;
delay(1000);
ucharcodetable[]={0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9};
/********************************************************************
初始化(在数码管上显示00)
********************************************************************/
voidinit()//初始化函数
{P2=table[0];
//送段码
P0=0x00;
//开位选
/****************************************************
函数功能:
1~4位数码管上的显示
****************************************************/
voiddisplay(void)//显示函数
{uintshi,ge;
shi=flag/10;
//取十位
ge=flag%10;
//取个位
//P2=0x00;
//消隐,让数码管什么都不显示
P0=0x10;
P2=table[shi];
//送十位数
delay
(1);
P0=0x30;
P0=0x20;
P2=table[ge];
//送个位数
4.设计图纸设计原理图附图
4.1设计原理图附图
4.2设计PCB附图
5、课程设计总结
单片机课程设计已经完成,但是学习没有结束,在这次课程设计里面,不仅仅是设计一样东西,更多的是学习一种态度,对生活,对学习,不能只单单考虑一件事,一个方面,而是要更多的方面来思考,尽可能完善它,充实它,让它体现出一种人性化出来,让你学会一种态度,首先明确要做的是什么,然后开始思考设计思路,设计方法,然后一步一步把它实践出来,然后再看哪里不够完善,仔细修正,才能做出好的东西出来。
通过这次实践的机会,我能够初步掌握一些设计的基本思路,对单片机这么课程有了一定的认识,不能仅仅看做成一门设计编程的课本,他更多的是一种指示的意思,然你学会综合分析的思路,让你能够成站起来的一门课程,每门课程开出来总有一定的道理,它既然放在大三上学期,就是让你对未来有一定的认识,不能只是一个单一的设计人员,更多的是要综合考虑一件事物,这样才能更好的融入进去。
通过课程设计,我们增强了对单片机的理解,学会查寻资料﹑比较方案,学会单片机的设计﹑计算;
进一步提高分析解决实际问题的能力,创造一个动脑动手﹑独立开展电路实验的机会,锻炼分析﹑解决程序编写问题的实际本领,真正实现由课本知识向实际能力的转化;
通过典型程序的设计与制作,加深对基本原理的了解,增强了实践能力。
这次课程设计也让我更加了解了关于单片机设计原理。
有很多设计理念来源于实际,从中找出最适合的设计方法。
本次课程设计脱离不了集体的力量,遇到问题和同学互相讨论交流。
多和同学讨论。
我们在做实训项