学位论文简易多彩广告灯控制设计课程设计说明书.docx

上传人:b****5 文档编号:7301771 上传时间:2023-05-11 格式:DOCX 页数:19 大小:803.08KB
下载 相关 举报
学位论文简易多彩广告灯控制设计课程设计说明书.docx_第1页
第1页 / 共19页
学位论文简易多彩广告灯控制设计课程设计说明书.docx_第2页
第2页 / 共19页
学位论文简易多彩广告灯控制设计课程设计说明书.docx_第3页
第3页 / 共19页
学位论文简易多彩广告灯控制设计课程设计说明书.docx_第4页
第4页 / 共19页
学位论文简易多彩广告灯控制设计课程设计说明书.docx_第5页
第5页 / 共19页
学位论文简易多彩广告灯控制设计课程设计说明书.docx_第6页
第6页 / 共19页
学位论文简易多彩广告灯控制设计课程设计说明书.docx_第7页
第7页 / 共19页
学位论文简易多彩广告灯控制设计课程设计说明书.docx_第8页
第8页 / 共19页
学位论文简易多彩广告灯控制设计课程设计说明书.docx_第9页
第9页 / 共19页
学位论文简易多彩广告灯控制设计课程设计说明书.docx_第10页
第10页 / 共19页
学位论文简易多彩广告灯控制设计课程设计说明书.docx_第11页
第11页 / 共19页
学位论文简易多彩广告灯控制设计课程设计说明书.docx_第12页
第12页 / 共19页
学位论文简易多彩广告灯控制设计课程设计说明书.docx_第13页
第13页 / 共19页
学位论文简易多彩广告灯控制设计课程设计说明书.docx_第14页
第14页 / 共19页
学位论文简易多彩广告灯控制设计课程设计说明书.docx_第15页
第15页 / 共19页
学位论文简易多彩广告灯控制设计课程设计说明书.docx_第16页
第16页 / 共19页
学位论文简易多彩广告灯控制设计课程设计说明书.docx_第17页
第17页 / 共19页
学位论文简易多彩广告灯控制设计课程设计说明书.docx_第18页
第18页 / 共19页
学位论文简易多彩广告灯控制设计课程设计说明书.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

学位论文简易多彩广告灯控制设计课程设计说明书.docx

《学位论文简易多彩广告灯控制设计课程设计说明书.docx》由会员分享,可在线阅读,更多相关《学位论文简易多彩广告灯控制设计课程设计说明书.docx(19页珍藏版)》请在冰点文库上搜索。

学位论文简易多彩广告灯控制设计课程设计说明书.docx

学位论文简易多彩广告灯控制设计课程设计说明书

信息与电气工程学院

课程设计说明书

(2012/2013学年第二学期)

 

课程名称:

单片机原理及接口技术

题目:

简易多彩广告灯控制设计

专业班级:

自动化10-03

设计周数:

2周

 

2013年6月26日

 

目录

1、课程设计目的

1.1原始数据及主要任务…………………………………………………………………2

1.2技术要求………………………………………………………………………………2

2、课程设计正文

2.1硬件设计………………………………………………………………………………2

2.1.1确定硬件电路总体设计方案……………………………………………………2

2.1.2单元电路设计……………………………………………………………………3

2.1.2.1时钟电路……………………………………………………………………3

2.1.2.2复位电路……………………………………………………………………3

2.1.2.3键盘输入电路………………………………………………………………4

2.1.2.4数字显示电路………………………………………………………………5

2.1.2.5广告灯电路…………………………………………………………………5

2.1.2.6总电路图……………………………………………………………………6

2.1.3系统调试…………………………………………………………………………7

2.2软件设计………………………………………………………………………………7

2.2.1系统分析…………………………………………………………………………7

2.2.2系统设计…………………………………………………………………………8

2.2.2.1按键确认程序………………………………………………………………8

2.2.2.2数码管显示程序……………………………………………………………8

2.2.2.3延时程序……………………………………………………………………8

2.2.2.4.四种广告灯控制程序………………………………………………………8

2.2.3系统实施…………………………………………………………………………9

3、课程设计总结……………………………………………………………………………17

4、参考文献…………………………………………………………………………………18

 

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”间隔一秒闪烁;其余方案灯灭。

2、课程设计正文

2.1硬件设计

2.1.1确定硬件电路总体设计方案

根据设计要求,首先确定硬件的主要组成部分,主要包括了单片机最小系统中的时钟电路、复位电路和本课设需要的按键控制电路、LED灯显示电路、广告灯方案显示电路,最后由5V直流电源对各部分电路提供电源。

总的设计框图如图1。

 

2.1.2单元电路设计

2.1.2.1时钟电路

时钟电路提供的时钟信号是单片机工作时必须的控制信号,只有正确的提供了时钟信号,单片机才能严格按照时序执行指令进行工作。

时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。

常用的时钟电路设计有两种方式,一种是内部时钟方式,另一种事外部时钟方式。

本课设采用的是内部时钟方式。

内部是中方式的时钟电路由一个6MHz的晶振和两个30pF的电容组成,时钟电路的电路图如图2。

 

 

2.1.2.2复位电路

复位是单片机的初始化操作,除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态,为摆脱死锁状态,也需要复位按键使RST引脚为高电平使单片机复位。

本课设采用51单片机典型手动复位电路,电路由一个200Ω的电阻、一个1KΩ的电阻和一个22uF的极性电容组成。

当按下复位键后复位口RST变为高电平,经过两个机器周期单片机复位,单片机从地址为0000H处重新执行程序。

复位电路的电路图如图3。

 

 

 

2.1.2.3键盘输入电路

本课设的键盘输入电路由一个加一键和一个确定键组成,每个按键都接一个1KΩ的上拉电阻。

加一键控制方案类型,并通过显示电路的显示,共有10种方案类型,其中第01、02、03、10号方案对应有相应的广告灯显示方案,其余为广告灯全灭。

确定键确定方案让广告灯开始闪亮。

键盘输入电路如图4.

 

 

2.1.2.4数字显示电路

数字显示电路主要有两个共阳极数码管组成,采用静态显示方案,将共阳极数码管的段码由P0、P2口输出,驱动数码管显示。

每条支路加一个200Ω的限流电阻。

显示电路复位后显示00,当不断按下加一键是,数码管分别显示01、02、03、04、05、06、07、08、09、10,分别对应十种相应的显示方案。

显示电路电路图如图5.

 

2.1.2.5广告灯电路

广告灯电路为本课设主要控制的电路,由八个发光二极管组成,每个发光二极管接一个200Ω的限流电阻。

广告灯电路如图6.

当确定键按下后,广告灯即开始按照数码管显示的数字显示不同的闪亮方案,其中方案01为左循环亮一秒闪烁;方案02为右循环亮一秒闪烁;方案03为“100000000、11000000…11111111”递增间隔1秒闪烁;方案10为“01010101,10101010”间隔一秒闪烁;其余方案灯灭。

 

 

2.1.2.6总电路图

总电路如图7.

 

2.1.3系统调试

首先在proteus中画好电路图,加载程序查看仿真效果。

对不满足要求的地方,首先检察设计思路是否正确,在设计思路正确的前提下针对错误的类型检察硬件的选择和对应软件的设计是否正确,发现错误后首先考虑是否可以通过改变软件来实现,软件不能实现的再考虑改变硬件电路实现。

本课设在仿真调试中遇到的难点主要是对加一键的确定,由于在方案运行时要求加一键仍然有效,而每种方案中的延时程序与按键的延时去抖程序相互交错,给确定加一键的一次有效按下带来了很大的困难,经常出现按时间短了没有效果,按时间长了又会确认两次的情况。

最后几经修改才打到了要求的效果,当上一种方案正在运行时,按下加一键不要松开,等广告灯全灭后再松开,可使加一键每次都成功确认一次。

在硬件实物做好后,加载程序调试,对与仿真情况不符的电路检察焊接情况和硬件的好坏。

最后对操作的流畅性进行完善,使硬件电路易于操作,不会出现错误判断。

在硬件调试时,本课设遇到的困难主要是由于查阅资料时的疏漏我们把数码管的c脚和e脚接反了,导致数字无法正常输出。

由于硬件电路已经完成,要改动是比较复杂的。

后来在研究是发现,所谓的数码管段码其实是人为规定的,变动硬件中的c脚和e脚与变动程序中的c、e两脚对应的电平是一样,所以我将书中的共阳极数码管段码“根据”我们电路进行了修改,换了c、e对应的电平。

重新编译加载后,果然显示正常了,从而避免了对硬件的修改。

2.2软件设计

2.2.1系统分析

本课设的程序主要分为按键确认、延时、数码管显示和四种广告灯控制几部分。

按键确认采用典型的延时去抖法,是按键每次按下都只被有效确认一次。

延时程序主要用于去抖和广告灯闪亮间隔的控制,数码管显示则是给相应的P口赋值段码。

四种广告灯控制用于控制8个发光二极管的闪亮顺序和个数。

程序设计的总框图如图8.

 

 

2.2.2系统设计

2.2.2.1按键确认程序

通过voidkey_detect()子函数采集相应的P口的电平判断按键是否按下,程序见系统实施中的源程序。

2.2.2.2数码管显示程序

通过voiddisplay(void)子函数来显示相应的方案数,程序见系统实施中的源程序。

2.2.2.3延时程序

通过voiddelay(unsignedint)子函数来完成延时功能,程序见系统实施中的源程序。

2.2.2.4.四种广告灯控制程序

通过分别调用voidright_loop()、voidleft_loop()、voidother_program()、voidji_ou()四种子函数来显示相应的闪烁方案,程序见系统实施中的源程序。

2.2.3系统实施

本课设所用源程序如下:

#include

#include

unsignedcharcode

table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

unsignedintflag=0;

voidkey_detect(void);

voiddisplay(void);

voiddelay(unsignedint);

voidright_loop();

voidleft_loop();

voidother_program();

voidincrease();

voidji_ou();

sbitk1=P0^0;//加一键

sbitk2=P0^1;//确定键

voidmain()

{

while

(1)

{

key_detect();

if(flag==11)

{flag=0;

}

display();

}

}

/****************************************

函数功能:

实现任务一:

流水灯左循环亮1秒闪烁

****************************************/

voidleft_loop()

{

unsignedchartemp;

temp=0x7f;

while

(1)

{

temp=_crol_(temp,1);

delay(100);

P1=temp;

delay(100);

P1=0xff;

if(k1==0)

{

P1=0xff;//灯全灭

delay(20);

if(k1==0)

{

P1=0xff;

flag++;

delay(10);

}

while(!

k1);//检测是否松开按键r

delay(20);

while(!

k1);

break;

}

}

}

/****************************************

函数功能:

实现任务二:

流水灯右循环亮1秒闪烁

****************************************/

voidright_loop()

{

unsignedchartemp;

temp=0xfe;

while

(1)

{

temp=_cror_(temp,1);

delay(100);

P1=temp;

delay(100);

P1=0xff;

if(k1==0)

{

delay(20);

if(k1==0)

{

P1=0xff;

flag++;

delay(10);

}

while(!

k1);//检测是否松开按键r

delay(20);

while(!

k1);

break;

}

}

}

/******************************************

函数功能:

所有灯灭

******************************************/

voidother_program()

{

P1=0xff;

delay(10);

if(k1==0)

{

delay(10);

if(k1==0)

{

P1=0xff;

flag++;

delay(10);

}

while(!

k1);//检测是否松开按键r

delay(20);

while(!

k1);

}

}

/*******************************************

函数功能:

实现任务三:

递增间隔1秒闪烁

*******************************************/

voidincrease()

{

unsignedinti=0;

unsignedchara[]={0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};

while

(1){

if(i>8){

i=0;

}

P1=a[i];

delay(100);

P1=0xff;

delay(100);

i++;

if(k1==0)

{

delay(10);

if(k1==0)

{

P1=0xff;

flag++;

delay(10);

}

while(!

k1);//检测是否松开按键r

delay(20);

while(!

k1);

break;

}

}

}

/********************************************

函数功能:

实现任务十:

实现奇偶间隔1秒闪烁

********************************************/

voidji_ou()

{

unsignedchara[]={0x55,0xaa};

unsignedinti=0;

while

(1){

if(i>1){

i=0;

}

P1=a[i];

delay(100);

P1=0xff;

delay(100);

i++;

if(k1==0)

{

delay(10);

if(k1==0)

{

P1=0xff;

flag++;

delay(10);

}

while(!

k1);//检测是否松开按键

delay(20);

while(!

k1);

break;

}

}

}

 

/****************************************************

函数功能:

数码管上的显示

****************************************************/

voiddisplay(void)//显示函数

{

unsignedintshi,ge;

shi=flag/10;//取十位

ge=flag%10;//取个位

P2=table[shi];//送十位数

delay

(1);

P3=table[ge];//送个位数

delay

(1);

}

/***********************************************************************************************************************

函数功能:

按键检测

***********************************************************************************************************************/

voidkey_detect()

{

if(k1==0)

{

delay(10);

if(k1==0)

{

flag++;

}

while(!

k1);//检测是否松开按键r

}

elseif(k2==0)

{

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--);

}

3、课程设计总结

经过了两周的忙碌,课程设计圆满结束了,我在本次课程设计中主要负责程序的编写和调试。

刚开始看到课设要求时,感到完全无法下手,不知道该怎么把平时所学的每个元件的知识与要求联系起来,后来经过和其他组员商量,决定先画出程序流程图,再从流程图入手逐步找的每个环对应的元件。

本课设所用程序为C语言,主要利用对加一按键的判断对标志变量flag进行从1到10轮赋值,其中对按键的判断中用到了典型的延时去抖程序。

利用得到的flag值确定数码管的段码,将段码直接赋给P口,控制数码管的显示。

然后再判断确定键按下后利用switch开关语句对flag进行判断,调用对应的广告灯子程序,控制P口的电平变化,来实现广告流水灯的控制。

在程序调试过程中,深切体会到了细节决定成败这句话的正确性,平时再使用产品时总觉得道理很简单,觉得按一下按键就是让某个电路接通,可真正自己设计时才发现用程序去确定一次按键是要考虑很多因素的,就连断开的一瞬间也得考虑到,利用这个电平变化来控制程序走向。

每一点疏漏都会使目标无法完成,幸好有可以利用proteus进行仿真,可以最大程度上减少对硬件的修改。

在最后的调试中我还体会到了了解元器件原理的重要性,由于查阅资料时的疏漏我们把数码管的c脚和e脚接反了,导致数字无法正常输出。

由于硬件电路已经完成,要改动是比较复杂的。

后来在研究是发现,所谓的数码管段码其实是人为规定的,变动硬件中的c脚和e脚与变动程序中的c、e两脚对应的电平是一样,所以我将书中的共阳极段码“根据”我们电路进行了修改,换了c、e对应的电平。

重新编译加载后,果然显示正常了,从而避免了对硬件的修改。

通过本次课程设计,我对单片机的工作原理及编程方法有了更深的了解,对与之配套的硬件电路也有了全新的认识。

4、参考文献

[1] 李朝青.单片机原理及接口技术(简明修订版).杭州:

北京航空航天大学出版社,1998

[2] 李广弟.单片机基础[M].北京:

北京航空航天大学出版社,1994

[3] 阎石.数字电子技术基础(第三版).北京:

高等教育出版社,1989

[4] 何立民.单片机应用技术大全.北京:

北京航空航天大学出版社,1994

[5] 张毅刚.单片机原理及接口技术.哈尔滨:

哈尔滨工业大学出版社,1990

[6] 谭浩强.单片机课程设计.北京:

清华大学出版社,1989

[7] 张义,陈敌北.例说8051.人民邮电出版社

[8] 肖婧.单片机入门与趣味实验设计.北京:

北京航空航天大学出版社,2008

[9] 胡汉才.单片机原理及其接口技术.北京:

清华大学出版社,2002

 

课程设计

评语

课程设计

成绩

指导教师

(签字)

年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2