单片机课程设计Word格式文档下载.docx
《单片机课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机课程设计Word格式文档下载.docx(31页珍藏版)》请在冰豆网上搜索。
…………………………………………….………..()
3.3×
4程序设计
4.1×
……………………………………………………...()
4.2×
4.3×
……………………………………………..……....()
5系统仿真
5.1×
5.2×
5.3×
……………………………………………….……..()
参考文献…………………………………………………….……...()
答辩记录……………………………………………………….....……()
1绪论
当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。
单片机应用的重要意义还在于它从根本上改变了传统的控制系统设计思想和设计方法,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
1.1选题背景与意义
城市夜景中,变幻多姿的霓虹灯历来是一道亮丽的风景。
利用单片机的自动控制功能,设计出相应不同的电路,可以实现彩灯不同模式的流水效果。
现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。
手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。
汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!
单片机的数量不仅远超过PC机和其他计算的总和,甚至比人类的数量还要多。
本次设计根据设计要求,基本达到预期的目的,本设计利用AT89C52RC单片机的自动控制功能,并结合其它电子元器件以及软件实现的爱心彩色花样流水灯,实现不同种类的闪烁循环。
该设计具有实际意义,可以在建筑家居、广告业、媒体宣传、装饰业等领域得到广泛应用。
1.2系统功能
本设计以AT89C52RC单片机为核心,采用常用电子器件设计。
有一个开关按键,按键控制流水灯电源开关,根据单片机所写入的程序,实现32位流水灯多种闪烁模式运行。
2方案设计
2.1基于数字电路设计
数字电路采用NE555产生秒脉冲信号,74LS161组成8进制计数器,74LS138进行译码,通过三极管,点亮发光二极管。
需要用到芯片数量较多,电路结构较为复杂,实现功能有限。
2.2基于PLC控制设计
PLC是一种专门为了在工业环境下应用而设计的数字运算操作装置,可被看成是在系统软件支持下的一种扫描设备。
它一直周而复始地循环扫描并执行由系统软件规定好的任务。
编程语言不同于其他语言,是一种简单直观的程序控制语言。
功能强大,可以用于设计,但成本较高。
2.3基于单片机系统设计
51系列单片机作为入门级单片机学习使用较为简单,需要熟练单片机的结构功能及C语言编程,可以通过编程实现多种功能,达到预期目标,并且成本较低,电路结构简单。
满足设计要求且成本较低。
2.4方案论证
数字电路不需要编程,但需要用到大量芯片与原件,简单的电路能实现的功能(流水灯循环、点亮、熄灭、顺序控制等)较少,要实现多种功能需要复杂的电路结构,不符合设计要求。
PLC功能强大,电路结构较简单,编程语言比较直观,但PLC及其硬件价格昂贵,成本过高,用于本次设计不太适合。
而使用单片机可控制可以通过编程实现多种流水灯控制,编程使用C语言,技术成熟,稳定性高,电路结构直观简单,只需为单片机搭建最小系统即可工作。
综合考虑设计难易、功能实现及成本等多方面因素,最终决定使用单片机控制32位流水灯。
3.1设计思路
本次设计采用AT89C52单片机,不需外扩存储器,相当于一个带有32个LED灯的单片机最小系统,通过P0-P3口32个I/O口控制32个灯亮灭。
3.2硬件设计
3.2.1硬件框图
89C52单片机是本次课程设计运用的主要原件。
流水灯设计是用一个带有32个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。
如果要让接在P0.0口的LED1亮起来,那么只要把P0.0口的电平变为低电平就可以了;
相反,如果要接在P0.0口的LED1熄灭,就要把P0.0口的电平变为高电平;
同理,接在P0.1~P0.7口的其他7个LED的点亮和熄灭的方法同LED1。
P1、P2、P3口同理。
因此,要实现流水灯功能,我们要将发光二极管LED1~LED32点亮、熄灭,32只LED灯便会一亮一暗。
注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候会延时一段时间,不然将观察不到效果。
闪烁的延时为50毫秒。
3.2.2元件清单
元件名
型号
数量
单片机
AT89C52
1
排阻
9*1k
晶振
12MHz
电解电容
10μF
瓷片电容
20pF
2
电阻
10K
LED1
白发红
8
LED2
白发蓝
LED3
白发黄
LED4
白发绿
拨动开关
SS-43D06
3.3电路原理图设计
原理图绘制使用proteus作为开发平台,既能绘图又能完成之后仿真。
3.3.1新建设计及元件库的建立
(1)新建设计;
(2)元件库的建立
按快捷键P可进入元件搜索界面,在搜索框中输入对应的关键字可以搜索到需要使用的元件,如搜索单片机输入AT89C52,即可。
界面如下:
(3)需要的元件库:
(4)元件库建立完成。
3.3.2单片机最小系统
(1)时钟电路
时钟电路用于产生单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。
本电路采用12MHz石英晶振。
电路图如下:
(2)单片机复位电路
复位方式分为上电自动复位和手动复位,电阻用于上电复位,VCC上电,由于电容两端电压不能突变,所以RST上为高电平,然后电容放电,RST就为低电平了,还可以用手动复位,此次电路使用自动复位。
(3)单片机最小系统
单片机最小系统由上述时钟电路与复位电路组成,是驱动单片机工作的最小外围电路。
3.3.3LED显示电路设计
本次设计使用32个LED发光二极管摆成心形显示,LED1-LED32分别接P0-P3口的32个引脚。
由于电路板大小有限,为了美观,使用网络标号连接。
由于上拉电阻作用不大,决定LED正极引脚直接接VCC电源,负极引脚接单片机I/O口,不接上拉电阻,由于P0口内部无上拉电阻,所以P0口做输入输出作用时保留P0口的外接上拉电阻以保证电路稳定运行。
初始LED排列:
根据设计要求,进一步调整后排列如下:
P0口上拉电阻(9*1K):
3.3.4网络标号的标注
单击界面左边工具栏的
工具,按快捷键A,打开属性编辑界面,字符串框中输入net=#,计数值为1,增量为1;
即从1开始标号,每次标号加1。
需要连接的两端标同样的标号。
开始标号:
标号完成:
3.3.5完整电路原理图
4程序设计
4.1实现功能
(1)按下电源开关,执行延时程序。
(2)两边逐个亮。
(3)各端口等待两个灯顺时针回转。
(4)各端口等待两个灯逆时针回转。
(5)顺时针追尾闪动。
(6)逆时针追尾闪动。
(7)全部闪烁
(8)逆时针逐个点亮
(9)逆时针逐个灭
(10)顺时针逐个点亮
(11)顺时针逐个灭
(12)对角闪
(13)两边逐个灭
(14)顺时逐个同步亮
(15)逆时逐个同步亮
(16)顺时逐个同步灭
(17)逆时逐个同步灭
(18)间隔闪
4.2程序
#include<
reg52.h>
#include<
intrins.h>
#defineuintunsignedint
#defineucharunsignedchar
voidzg(uintt,uchara)
{
uchari,j;
for(j=0;
j<
a;
j++)
{
P0=P1=P2=P3=0xff;
P0=0x7f;
delay(t);
for(i=0;
i<
7;
i++)
P0=table1[i+1];
P2=table1[i];
}
P2=0x00;
P3=0x7f;
P1=0xfe;
for(i=1;
8;
P1=table0[i-1];
P3=table1[i];
P3=0x00;
P1=0x00;
voidgdkshz()
uchari,k;
5;
P2=0x3f;
delay(100);
for(k=0;
k<
3;
k++)
P2=_cror_(P2,2);
P2=0xff;
P3=0x3f;
P3=_cror_(P3,2);
P3=0xff;
P1=0x3f;
P1=_cror_(P1,2);
P1=0xff;
P0=0xfc;
P0=_crol_(P0,2);
P0=0xff;
voidgdknhz()
P0=0x3f;
P0=_cror_(P0,2);
};
P1=0xfc;
{
P1=_crol_(P1,2);
P3=0xfc;
P3=_crol_(P3,2);
P2=0xfc;
P2=_crol_(P2,2);
voidsnszzwsd()
uchari;
P0=0xe0;
P2=0x07;
P3=0xe0;
P1=0x07;
32;
P0=_crol_(P0,1);
P3=_cror_(P3,1);
P2=_cror_(P2,1);
P1=_cror_(P1,1);
delay(40);
P0=_cror_(P0,1);
P3=_crol_(P3,1);
P1=_crol_(P1,1);
P2=_crol_(P2,1);
voidqs(uintt,uchara)
ucharj;
P0=P1=P2=P3=0x00;
}
voidzgxh(uintt,uchara)
for(j=0;
for(i=0;
P0=table1[i];
P1=table0[i];
P3=table0[i];
P2=table0[i];
voidnszgm(uintt,uchara)
P0=table4[i];
delay(t);
P1=table2[i];
P3=table2[i];
P2=table2[i];
voidzgxh1(uintt,uchara)
P1=P2=P3=0xff;
P1=table1[i];
P0=table5[i];
voidsszgm(uintt,uchara)
P2=table3[i];
P3=table3[i];
P1=table3[i];
P0=table2[i];
voiddjs(uintt,uchara)
P0=P3=0x00;
P1=0x7f;
P1=P2=0x00;
voidlbzgm(uintt,uchara)
for(i=8;
i>
1;
i--)
P3=table1[i-1];
P3=0xff;
P2=0x01;
for(i=7;
P0=table1[i-1];
P2=table1[i-2];
P2=0xff;
voidsztl(uintt,uchara)
P0=table0[i];
P1=P2=P3=table1[i];
voidnztl(uintt,uchara)
P1=P2=P3=table0[i];
voidsztm(uintt,uchara)
delay(90);
P1=P2=P3=table3[i];
voidnztm(uintt,uchara)
P0=table3[i];
P1=P2=P3=table2[i];
voidjgs(uintt,uchara)
P0=0x55;
P1=P2=P3=0xaa;
P0=0xaa;
P1=P2=P3=0x55;
voidmain()
while
(1)
zg(100,1);
gdkshz();
gdknhz();
snszzwsd();
qs(50,3);
zgxh(100,10);
nszgm(40,3);
zgxh1(100,5);
sszgm(200,10);
djs(100,20);
lbzgm(100,5);
sztl(200,10);
nztl(100,10);
sztm(50,2);
nztm(50,5);
jgs(300,10);
voiddelay(uintt)
uintx,y;
for(x=t;
x>
0;
x--)
for(y=120;
y>
y--);
4.3程序调试
程序的运行环境是KeiluVision2,桌面新建一个文件夹,命名为流水灯,运行KeiluVision2软件