单片机 课程设计霓虹灯控制器的设计.docx
《单片机 课程设计霓虹灯控制器的设计.docx》由会员分享,可在线阅读,更多相关《单片机 课程设计霓虹灯控制器的设计.docx(25页珍藏版)》请在冰豆网上搜索。
单片机课程设计霓虹灯控制器的设计
课程设计(论文)任务及评语
院(系):
电子与信息工程学院教研室:
通信工程教研室
学号
学生姓名
专业班级
课程设计(论文)题目
霓虹灯控制器的设计
课程设计(论文)任务
任务和要求:
1、以单片机为控制核心设计霓虹灯控制器。
2、可用按键设置显示方式。
3、霓虹灯采用无触点开关控制。
设计内容:
1、分析设计要求,明确性能指标;查阅资料、设计方案分析对比。
2、论证并确定合理的总体设计方案,绘制总体结构框图,分析工作原理。
3、完成各单元具体电路的设计:
单片机最小系统、显示等电路。
包括元器件选择、工作原理分析。
4、写出程序流程图及汇编源程序。
5、完成课程设计说明书。
该控制器可实现的硬件和软件设计。
实现技术指标包括:
指导教师评语及成绩
平时成绩(20%):
论文成绩(40%):
答辩成绩(40%):
总成绩:
指导教师签字:
学生签字:
年月日
摘要
近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益地更新。
在实时检测和自动控制的应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。
我们周围有许多广告牌、交通指示灯等都是通过单片机控制的。
霓虹灯模拟控制器正是利用美国ATMEL公司生产的AT89C51单片机作为核心控制芯片实现对霓虹灯的控制。
模拟控制器由单片机控制部分和显示部分组成,与按键、电阻等较少的辅助硬件电路相结合,通过汇编语言编程可以实现任意改变霓虹灯的变化花样和。
本系统具有体积小、硬件少、电路结构简单及容易操作等优点。
目录
第1章设计方案论证1
1.1设计意义1
1.2课题设计要求、系统方案介绍1
1.3单片机的选择1
第2章硬件电路设计2
2.1主控制器模块设计2
2.2本设计中用到的引脚功能说明2
2.3AT89C51时钟电路3
2.4AT89C51复位电路4
2.5主控模块电路设计4
第3章程序设计6
第4章设计总结11
参考文献12
附录1:
整体电路原路图13
附录2:
器件清单14
第1章设计方案论证
1.1设计意义
随着人们生活环境的不断改善和美化,在许多场合可以看到彩色霓虹灯。
LED彩灯由于其丰富的灯光色彩,低廉的造价以及控制简单等特点而得到了广泛的应用,用彩灯来装饰已经成为一种时尚。
但目前市场上各式样的LED彩灯控制器大多数用全硬件电路实现,电路结构复杂、功能单一,这样一旦制作成品只能按照固定的模式闪亮,不能根据不同场合、不同时间段的需要来调节亮灯时间、模式、闪烁频率等动态参数。
这种彩灯控制器结构往往有芯片过多、电路复杂、功率损耗大等缺点。
此外从功能效果上看,亮灯模式少而且样式单调,缺乏用户可操作性,影响亮灯效果。
因此有必要对现有的彩灯控制器进行改进。
1.2课题设计要求、系统方案介绍
设计一个霓虹灯,采用LED模拟,要有多重花样。
用单片机的P0口控制8盏发光二级管,P2口控制8盏发光二级管,P3口控制一个共阳数码管。
P0,P2,P3口控制的24盏灯排成8×3矩阵,数码管显示灯的花样种类,方案中总共有12种花样,数码管显示数字为0,1,2,3,4,5,6,7,8,9。
在设计的过程中,P0口要加上上拉电阻,这是单片机系统内部决定的。
在方案中用到五个按键,按键S1是单片机复位键,按键S2--S5是选择灯的花样,按键每按下一次,切换花样一次。
1.3单片机的选择
AT89C51是一种高性能低功耗的采用CMOS工艺制造的8位微控制器。
其芯片内部有ROM,且片内ROM全部采用FlashROM,它能于3V的超低压工作,与MCS-51系列单片机完全兼容。
所以选用AT89C51设计电路。
第2章硬件电路设计
2.1主控制器模块设计
本设计用AT89C51作主控制器,构成一个最小控制系统,这个包括:
单片机、晶振电路,复位电路。
AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM)。
AT89C52单片机属于AT89C51单片机的增强型,与Intel公司的80C51在引脚排列、硬件组成、工作特点和指令系统等方面兼容。
2.2本设计中用到的引脚功能说明
AT89C51的引脚图如图2-1所示。
图2-1AT89C51的引脚
Vcc:
第40脚,电源引脚,必须接+5V电源。
Vss:
第20脚,接地电位。
P1口:
第1~8脚。
P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P1.1/T2EX)。
P3口:
第10~17脚。
P3口是一组带有内部上拉电阻的8位双向I/O口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。
此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。
此外,P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
RST:
第9脚。
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
/VPP:
第31脚。
外部访问允许。
欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地)。
XTAL1:
振荡器反相放大器的及内部时钟发生器的输入端。
XTAL2:
振荡器反相放大器的输出端。
2.3AT89C51时钟电路
时钟频率直接影响单片机的速度,电路的质量直接影响系统的稳定性。
常用的时钟电路有两种方式:
内部时钟方式和外部时钟方式。
内部时钟方式:
AT89C51芯片中的高增益反相放大器,其输入端为引脚XTAL1,其输出端为引脚XTAL2。
通过这两个引脚在芯片外并接石英晶体振荡器和两只电容(电容C1和C2一般取30pF)。
石英晶体振荡器为一个感性元件,与电容构成振荡回路,为片内放大器提供正反馈和振荡所需要的相移条件,从而构成一个稳定的自激振荡器。
AT89C51振荡电路如图2-2所示。
图2-2AT89C51振荡电路
外部时钟方式:
常用于多片MCS-51系列单片机同时工作。
如图2-3所示。
图2-3外部时钟电路
2.4AT89C51复位电路
AT89C51复位电路通常采用上电自动复位和按钮复位两种方式。
本设计采用AT89C51上电复位复位电路。
如图2-4所示。
图5-3复位电路
2.5主控模块电路设计
霓虹灯模拟控制器主控模块电路如附件录图所示。
单片AT89C51P1.0~P1.7做输出口,分别接八只发光二极管八只220欧电阻,LCD采用共阴极接法,用单片机AT89C51的P0.0—P0.4与5个按键开关相连,做为编码开关,且开关接地,按键按下时对应的口为低电平,显示一种亮灯效果。
和Vcc接至+5V电源,Vss接地。
第3章程序设计
3.1总流程图
霓虹灯总流程图如下图3-1所示。
图3-1总流程图
初始时霓虹灯为全灭状态。
当按键P1.0时,霓虹灯倒计时9—0;当按键P1.1时,为流水灯;当按键P1.2时,为闪烁灯;当按键P1.3时,位间隔闪烁灯。
在霓虹灯工作状态下按下复位键,霓虹灯恢复初始状态。
程序代码:
#include
#defineunitunsignedint
voiddelayms(unit);
voidmain()
{
while(P1==0xfe)
/*9-0倒计时*/
{P0=0xff;P3=0xff;P2=0xff;
delayms(1000);
//9
P0=0x17;P3=0x57;P2=0x07;delayms(125);
P0=0x8b;P3=0xab;P2=0x83;delayms(125);
P0=0xc5;P3=0xd5;P2=0xc1;delayms(125);
P0=0xe2;P3=0xeb;P2=0xe0;delayms(125);
P0=0xf1;P3=0xf5;P2=0xf0;delayms(125);
P0=0xf8;P3=0xfb;P2=0xf8;delayms(125);
P0=0xfc;P3=0xfd;P2=0xfc;delayms(125);
P0=0xfe;P3=0xfe;P2=0xfe;delayms(125);
//8
P0=0x07;P3=0x57;P2=0x07;delayms(125);
P0=0x83;P3=0xab;P2=0x83;delayms(125);
P0=0xc1;P3=0xd5;P2=0xc1;delayms(125);
P0=0xe0;P3=0xea;P2=0xe0;delayms(125);
P0=0xf0;P3=0xf5;P2=0xf0;delayms(125);
P0=0xf8;P3=0xfa;P2=0xf8;delayms(125);
P0=0xfc;P3=0xfd;P2=0xfc;delayms(125);
P0=0xfe;P3=0xfe;P2=0xfe;delayms(125);
//7
P0=0x7f;P3=0x7f;P2=0x07;delayms(125);
P0=0xbf;P3=0xbf;P2=0x83;delayms(125);
P0=0xdf;P3=0xdf;P2=0xc1;delayms(125);
P0=0xef;P3=0xef;P2=0xe0;delayms(125);
P0=0xf7;P3=0xf7;P2=0xf0;delayms(125);
P0=0xfb;P3=0xfb;P2=0xf8;delayms(125);
P0=0xfd;P3=0xfd;P2=0xfc;delayms(125);
P0=0xfe;P3=0xfe;P2=0xfe;delayms(125);
//6
P0=0x07;P3=0x57;P2=0x47;delayms(125);
P0=0x83;P3=0xab;P2=0xa3;delayms(125);
P0=0xc1;P3=0xd5;P2=0xd1;delayms(125);
P0=0xe0;P3=0xea;P2=0xe8;delayms(125);
P0=0xf0;P3=0xf5;P2=0xf4;delayms(125);
P0=0xf8;P3=0xfa;P2=0xfa;delayms(125);
P0=0xfc;P3=0xfd;P2=0xfd;delayms(125);
P0=0xfe;P3=0xfe;P2=0xfe;delayms(125);
//5
P0=0x17;P3=0x57;P2=0x47;delayms(125);
P0=0x8b;P3=0xab;P2=0xa3;delayms(125);
P0=0xc5;P3=0xd5;P2=0xd1;delayms(125);
P0=0xe2;P3=0xea;P2=0xe8;delayms(125);
P0=0xf1;P3=0xf5;P2=0xf4;delayms(125);
P0=0xf8;P3=0xfa;P2=0xfa;delayms(125);
P0=0xfc;P3=0xfd;P2=0xfd;delayms(125);
P0=0xfe;P3=0xfe;P2=0xfe;delayms(125);
//4
P0=0x1f;P3=0xdf;P2=0x07;delayms(125);
P0=0x8f;P3=0xef;P2=0x83;delayms(125);
P0=0xc7;P3=0xf7;P2=0xc1;delayms(125);
P0=0xe3;P3=0xfb;P2=0xf0;delayms(125);
P0=0xf1;P3=0xfd;P2=0xf0;delayms(125);
P0=0xf8;P3=0xfe;P2=0xf8;delayms(125);
P0=0xfc;P3=0xff;P2=0xfc;delayms(125);
P0=0xfe;P3=0xff;P2=0xfe;delayms(125);
//3
P0=0x57;P3=0x57;P2=0x07;
delayms(125);
P0=0xab;P3=0xab;P2=0x83;delayms(125);
P0=0xd5;P3=0xd5;P2=0xc1;delayms(125);
P0=0xea;P3=0xea;P2=0xe0;delayms(125);
P0=0xf5;P3=0xf5;P2=0xf0;delayms(125);
P0=0xfa;P3=0xfa;P2=0xf8;delayms(125);
P0=0xfd;P3=0xfd;P2=0xfc;delayms(125);
P0=0xfe;P3=0xfe;P2=0xfe;delayms(125);
//2
P0=0x47;P3=0x57;P2=0x17;delayms(125);
P0=0xa3;P3=0xab;P2=0x8b;delayms(125);
P0=0xd1;P3=0xd5;P2=0xd5;delayms(125);
P0=0xe8;P3=0xea;P2=0xe2;delayms(125);
P0=0xf4;P3=0xf5;P2=0xf1;
delayms(125);
P0=0xfa;P3=0xfa;P2=0xf8;delayms(125);
P0=0xfd;P3=0xfd;P2=0xfc;delayms(125);
P0=0xfe;P3=0xfe;P2=0xfe;delayms(125);
//1
P0=0xff;P3=0xff;P2=0x07;delayms(125);
P0=0xff;P3=0xff;P2=0x83;delayms(125);
P0=0xff;P3=0xff;2=0xa1;delayms(125);
P0=0xff;P3=0xff;P2=0xe0;delayms(125);
P0=0xff;P3=0xff;P2=0xf0;delayms(125);
P0=0xff;P3=0xff;P2=0xf8;delayms(125);
P0=0xff;P3=0xff;P2=0xfa;delayms(125);
P0=0xff;P3=0xff;P2=0xfe;delayms(125);
//0
P0=0x07;P3=0x77;P2=0x07;delayms(125);
P0=0x83;P3=0xbb;P2=0x83;delayms(125);
P0=0xc1;P3=0xdd;P2=0xc1;delayms(125);
P0=0xe0;P3=0xee;P2=0xe0;delayms(125);
P0=0xf0;P3=0xf7;2=0xf0;delayms(125);
P0=0xf8;P3=0xfb;2=0xf8;delayms(125);
P0=0xfc;P3=0xfd;P2=0xfc;delayms(125);P0=0xfe;3=0xfe;P2=0xfe;delayms(125);
P0=0xff;P3=0xff;P2=0xff;delayms(500);}
while(P1==0xfd)
/*流水灯*/
{P0=0xff;P3=0xff;
P2=0xff;elayms(500);
P0=0xfe;delayms(100);
P0=0xfc;delayms(100);
P0=0xf8;delayms(100);
P0=0xf0;delayms(100);
P0=0xe0;delayms(100);
P0=0xc0;delayms(100);
P0=0x80;delayms(100);
P0=0x00;delayms(100);P3=0xfe;delayms(100);
P3=0xfc;delayms(100);
P3=0xf8;delayms(100);
P3=0xf0;delayms(100);
P3=0xe0;delayms(100);
P3=0xc0;delayms(100);
P3=0x80;delayms(100);
P3=0x00;delayms(100);
P2=0xfe;delayms(100);P2=0xfc;delayms(100);P2=0xf8;delayms(100);
P2=0xf0;delayms(100);
P2=0xe0;delayms(100);
P2=0xc0;delayms(100);
P2=0x80;delayms(100);
P2=0x00;delayms(100);
P0=0x00;delayms(100);
P0=0x80;delayms(100);
P0=0xc0;delayms(100);
P0=0xe0;delayms(100);
P0=0xf0;delayms(100);
P0=0xf8;delayms(100);
P0=0xfc;delayms(100);
P0=0xfe;delayms(100);
P0=0xff;delayms(100);P3=0x00;delayms(100);
P3=0x80;delayms(100);
P3=0xc0;delayms(100);
P3=0xe0;delayms(100);
P3=0xf0;delayms(100);
P3=0xf8;delayms(100);
P3=0xfc;delayms(100);
P3=0xfe;delayms(100);
P3=0xff;delayms(100);
P2=0x00;delayms(100);
P2=0x80;delayms(100);P2=0x80;elayms(100);
P2=0xc0;delayms(100);
P2=0xe0;delayms(100);
P2=0xf0;delayms(100);
P2=0xf8;delayms(100);
P2=0xfc;delayms(100);
P2=0xfe;delayms(100);
P2=0xff;delayms(100);
P2=0xfe;delayms(100);
P2=0xfc;delayms(100);
P2=0xf8;delayms(100);
P2=0xf0;delayms(100);
P2=0xe0;delayms(100);
P2=0xc0;delayms(100);
P2=0x80;delayms(100);
P2=0x00;delayms(100);
P3=0xfe;delayms(100);
P3=0xfc;delayms(100);
P3=0xf8;delayms(100);
P3=0xf0;delayms(100);
P3=0xe0;delayms(100);
P3=0xc0;delayms(100);
P3=0x80;delayms(100);
P3=0x00;delayms(100);
P0=0xfe;delayms(100);P0=0xfc;delayms(100);
P0=0xf8;delayms(100);
P0=0xf0;delayms(100);
P0=0xe0;delayms(100);
P0=0xc0;delayms(100);
P0=0x80;delayms(100);
P0=0x00;delayms(100);
P2=0x00;delayms(100);
P2=0x80;delayms(100);
P2=0xc0;delayms(100);
P2=0xe0;delayms(100);
P2=0xf0;delayms(100);
P2=0xf8;delayms(100);
P2=0xfc;delayms(100);
P2=0xfe;delayms(100);
P2=0xff;delayms(100);
P3=0x00;delayms(100);
P3=0x80;delayms(100);
P3=0xc0;delayms(100);
P3=0xe0;delayms(100);
P3=0xf0;delayms(100);
P3=0xf8;delayms(100);
P3=0xfc;delayms(100);
P3=0xfe;delayms(100);
P3=0xff;delayms(100);
P0=0x00;delayms(100);
P0=0x80;delayms(100);
P0=0xc0;delayms(100);
P0=0xe0;delayms(100);
P0=0xf0;delayms(100);
P0=0xf8;delayms(100);
P0=0xfc;delayms(100);
P0=0xfe;delayms(100);
P0=0xff;delayms(100);
}while(P1==0xfb)
/*闪烁灯*/
{P0=0x00;delayms(400);P3=0x00;delayms(400);P2=0x00;delayms(400);
P0=0xff;delayms(400);
P3=0xff;delayms(400);
P2=0xff;delayms(400);
P0=0x00;delayms(400);
P3=0x00;delayms(400);
P2=0x00;delayms(400);
P0=0xff;delayms(400);
P3=0xff;dela