简易多彩广告灯控制设计.docx
《简易多彩广告灯控制设计.docx》由会员分享,可在线阅读,更多相关《简易多彩广告灯控制设计.docx(25页珍藏版)》请在冰点文库上搜索。
简易多彩广告灯控制设计
科信学院
课程设计说明书
(2012/2013学年第二学期)
课程名称:
单片机应用课程设计
题目:
简易多彩广告灯控制设计
专业班级:
自动化3班
学生姓名:
伊国宝
学号:
100412306
指导教师:
王静爽王巍韩昱
设计周数:
2周
设计成绩:
2013年06月17日~06月28日
1、课程设计目的
1.1原始数据及主要任务…………………………………………………………………2
1.2技术要求………………………………………………………………………………2
1.3元件清单………………………………………………………………………………2
2.课程设计正文
2.1确定总体设计方案……………………………………………………………………2
2.2元器件介绍……………………………………………………………………………3
2.2.1STC90C52………………………………………………………………………3
2.2.2RS232…………………………………………………………………………4
2.2.3CD4511…………………………………………………………………………5
2.2.4共阴极数码管…………………………………………………………………6
2.2各部分电路设计
2.2.1单片机最小系统电路…………………………………………………………6
2.2.2多色彩广告灯闪烁控制电路…………………………………………………7
2.2.2.1设计数字显示电路…………………………………………………………7
2.2.2.2设计按键控制电路…………………………………………………………8
2.2.2.3设计LED灯显示电路电路…………………………………………………8
3、设计程序
3.1程序设计框图………………………………………………………………………9
3.2程序及注释…………………………………………………………………………9
4、设计图纸设计原理图附图
4.1设计原理图附图…………………………………………………………………16
4.2设计PCB附图……………………………………………………………………17
5、课程设计总结……………………………………………………………………………19
6、参考文献…………………………………………………………………………………20
1、课程设计目的
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”间隔一秒闪烁;其余方案灯灭。
1.3元件清单
2、课程设计正文
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各部分电路设计
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
#include
unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsignedcharcodec[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
unsignedintflag=0;
voidkey_detect(void);
voiddisplay(void);
voidinit(void);
voiddelay(unsignedint);
voidright_loop();
voidleft_loop();
voidother_program();
voidincrease();
voidji_ou();
sbitk1=P1^0;
sbitk2=P1^1;
sbita=P2^6;
sbitb=P2^7;
voidmain()
{
init();
a=1;b=1;
while
(1)
{
key_detect();
if(flag==11)
{flag=0;
}
display();
}
}
/********************************************************************
函数功能:
初始化(在数码管上显示00)
********************************************************************/
voidinit()//初始化函数
{
P2=table[0];//送段码
P0=0x00;//开位选
delay(10);
}
/****************************************************
函数功能:
1~4位数码管上的显示
****************************************************/
voiddisplay(void)//显示函数
{
unsignedintshi,ge;
shi=flag/10;//取十位
ge=flag%10;//取个位
P0=c[shi];//送十位数
a=1;b=0;
delay(10);
P0=c[ge];//送个位数
a=0;b=1;
delay(10);
}
//----------------------------------
/***********************************************************************************************************************
函数功能:
按键检测
***********************************************************************************************************************/
voidkey_detect()
{
if(k1==0)
{
P0=0xff;
delay(10);
if(k1==0){
flag++;
}
while(!
k1);//检测是否松开按键r
}
elseif(k2==0)
{
P0=0xff;
delay(10);
if(k2==0)
{
switch(flag)
{
case1:
left_loop();break;
case2:
right_loop();break;
case3:
increase();break;
case10:
ji_ou();break;
default:
other_program();
}
}
while(!
k2);//检测是否松开按键r
}
}
//--------------------------------------------------
/*********************************************
函数功能:
延时
入口参数:
z
*********************************************/
voiddelay(unsignedintz)
{
unsignedintx,y;
for(x=z;x>0;x--)
for(y=619;y>0;y--);
}
/****************************************
函数功能:
实现任务一:
流水灯正向循环亮5次
要实现流水灯左循环亮1秒闪烁
****************************************/
voidleft_loop()
{
unsignedchartemp;
temp=0x7f;
while
(1)
{
temp=_crol_(temp,1);
delay(300);
P3=temp;
display();
if(k1==0)
{
P3=0xff;//灯全灭
delay(20);
if(k1==0)
{
P3=0xff;
flag++;
delay(10);
break;
}
while(!
k1);//检测是否松开按键r
delay(20);
while(!
k1);
}
}
}
/****************************************
函数功能:
实现任务二:
流水灯反向循环亮5次
要实现流水灯右循环亮1秒闪烁
****************************************/
voidright_loop()
{
unsignedchartemp;
temp=0xfe;
while
(1)
{
temp=_cror_(temp,1);
delay(300);
P3=temp;
display();
if(k1==0)
{
delay(20);
if(k1==0)
{
P3=0xff;
flag++;
delay(10);
break;
}
while(!
k1);//检测是否松开按键r
delay(20);
while(!
k1);
}
}
}
/******************************************
函数功能:
所有灯灭
******************************************/
voidother_program()
{
P3=0xff;
delay(10);
display();
if(k1==0)
{
delay(10);
if(k1==0)
{
P3=0xff;
flag++;
delay(10);
}
while(!
k1);//检测是否松开按键r
delay(20);
while(!
k1);
}
}
/*******************************************
函数功能:
实现任务三:
全灭全亮3次,正向循环亮五次
要实现递增间隔1秒闪烁
*******************************************/
voidincrease()
{
unsignedchara[]={0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};
unsignedinti=0;
while
(1){
if(i>8){//{0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
i=0;
}
P3=a[i];
delay(150);P3=a[0];delay(150);
i++;
if(k1==0)
{
delay(10);
if(k1==0)
{
P3=0xff;
flag++;
delay(10);
break;
}
while(!
k1);//检测是否松开按键r
delay(20);
while(!
k1);
}
delay(300);
}
}
/********************************************
函数功能:
实现任务十:
奇偶循环亮5次
要实现奇偶间隔1秒闪烁
********************************************/
voidji_ou()
{
unsignedchara[]={0x55,0xaa};
unsignedinti=0;
while
(1){
if(i>1){
i=0;
}
P3=a[i];
i++;
if(k1==0)
{
delay(10);
if(k1==0)
{
P3=0xff;
flag++;
delay(10);
break;
}
while(!
k1);//检测是否松开按键r
delay(20);
while(!
k1);
}
delay(300);
}
}
4.设计图纸设计原理图附图
4.1设计原理图附图
4.2仿真图
5、课程设计总结
花了两周的时间我们完成了单片机的课程设计,虽然有一定的难度但我真的学到了很多的东西。
锻炼了我的实践能力,让我知道了实践很重要。
让我体会到了学习态度的重要性,考虑一件事不能片面,而是要更多的方面来思考,尽可能完善它,充实它。
首先明确要做的是什么,然后开始思考设计思路,设计方法,然后一步一步把它实践出来,然后再看哪里不够完善,仔细修正,最后才能设计出完美的东西来。
通过这次课程设计,我得到了很多的锻炼。
增强了对单片机的理解,学会查寻资料﹑比较方案,学会单片机的设计﹑计算。
创造一个动脑动手﹑独立开展电路实验的机会,锻炼分析﹑解决程序编写问题的实际本领,真正实现由课本知识向实际能力的转化。
这次课程设计也让我更加了解了关于单片机设计原理。
有很多设计理念来源于实际,从中找出最适合的设计方法。
本次课程设计脱离不了集体的力量,遇到问题和同学互相讨论交流。
多和同学讨论。
我们在做实训项目的过程中要不停的讨论问题,这样,我们组员可以尽可能的统一思想,这样就不会使在做的过程中没有方向,并且这样也是为了方便最后设计和在一起。
讨论不仅是一些思想的问题,还可以深入的讨论一些技术上的问题,这样可以使自己的处理问题要快一些,少走弯路。
多改变自己设计的方法,在设计的过程中最好要不停的改善自己解决问题的方法,这样可以方便自己解决问题。
虽然在这次课程设计中遇到了很多问题,但在老师的辛勤指导下,都迎刃而解了。
实验室的指导老师和同学认真的的教导我们指出了我们的不足还有需要改进的地方。
在这里一并对他们的帮助表示由衷的感谢。
这次的课设对我来说很重要,让我能够更好的理解本专业的相关知识,对我以后的学习和工作都有很重要的作用。
6、参考文献
[1] 李朝青.单片机原理及接口技术(简明修订版).杭州:
北京航空航天大学出版社,1998
[2] 李广弟.单片机基础[M]