单片机课设 彩灯的控制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

1.设计内容及要求

2.设计思路及总体方案分析

3. 硬件电路的设计

4. 程序设计及流程图

5. 实验中出现的问题及解决方案

6. 实验结果及功能演示

7. 心得体会

8. 参考文献

附录A 源程序清单

附录B 实验电路图

一·设计内容及要求

用8盏LED小灯,实现多种彩灯灯光效果(不含全部点亮,全部熄灭)要求实现以下几种情况

(1)可以通过按钮在几种灯光效果间切换;

(2)可以通过按钮暂停彩灯效果,使小灯全亮,再次按下相同按钮后继续之前的效果;

(3)增加自动和手动模式之间的切换;

(4)使用定时中断延时。

二·设计思路及总体方案

首先由于AT89C51单片机的系统包含:电源端(Vcc,GND)内部已连接好;时钟信号,通过晶振,电容与单片机的XTAL1和XTAL2相连,与单片机内部结构共同组成时钟信号源,晶振的频率决定了该系统的频率,该系统选择晶振频率12MHz;复位电路,只要一摁下复位键,就会回到程序的起始地址重新开始执行程序。所以首先将这些电路连接好,使单片机可以正常工作起来。

然后分析我们的题目要求,要求实现开关、自动手动选择、暂停,以及手动中不同方式的选择,所以,我们采用几个拨码开光与单片机的P0口连接来做彩灯的控制电路,通过检测开关接口电平的高低来判断开关是否闭合,从而控制彩灯的启停与不同模式间的切换。此外还必须有LED显示电路,我们采用P1口作为输出,连接八个小灯进行控制。硬件连接模块如下图:

AT89C51

(CPU)时钟信号

LED 显示电路

按键控制

电路

复位电路

在此基础上,我们进行软件设计。在主程序中通过检测P0口开关的状态,根据开关的状态进入到不同的工作模式,如果是自动的话,自动在三种彩灯效果(自上至下、自下至上、闪烁)之间循环点亮;如果是手动的话,再通过开关状态跳转到不同的效果子函数中去。在硬件设计中,当给小灯对应接口输出低电平,小灯可以通电呗点亮,所以改变输出给P1口的控制字,即可点亮相应的小灯。具体实现方法参见程序分析。

三·硬件电路的设计

1、时钟信号

其中晶振12MHz ,电容选22PF ,如图连接后接到单片机的18,19引脚,与内部结构共同组成时钟信号源。

2、 复位:

当按钮闭合时,RST引脚接高电平,从而使单片机复位。

3、按键控制电路:

P1口作为输入,低电平有效,其中sw1控制启停,sw2按下时彩灯由上向下循环流,sw3按下时彩灯由下向上循环流,sw4为暂停按钮,sw5按下时彩灯闪烁。

具体电路原理图见附录B

四·程序分析及流程图

1、主程序

在主程序中首先初始化,使八个彩灯全部熄灭。然后通过检测

P0口开关的状态,根据总开关的状态来启动或者停止电路,根据自动手动开关进入到不同的工作模式,如果是自动的话,自动在三种彩灯效果(自上至下、自下至上、闪烁)之间循环点亮;如果是手动的话,再通过开关状态跳转到不同的效果子函数中去。

开始

初始化八个

LED

检测开关P1.4

检测开关P1.6

检测开关P1.5

检测开关P1.3

向左循环点亮向右循环点

亮自动循环点亮=1≠

1

=1

≠1

=1

闪烁点亮

=1≠1

≠1

2、 向左循环子函数

在硬件接线中,当给彩灯输出低电平时,彩灯可以通电点亮,所以通过输出不同的控制字给P1接口,来实现不同的彩灯方式。此函数可以实现彩灯从左到右一个一个逐次点亮,完毕后

再次从左向右依次点亮。被点亮的小灯接口为0其余为1,所以此方式可以看做是将一个固定的低电平0依次循环,即可实现循环点亮的效果。所以,首先将累加器置FF,及八个数位为1,进位位清零,然后进行带进位位的左环移,每环移一次之后输出给P1口,0所对应的位小灯即被点亮,进行八次之后返回主程序。

开始

A ﹤—FFH

清零C

R1=8

A 内容代进位位向左

环移一次

A 输出给P0口

调用延时

判断P1.7开关

调用暂停子程序

R1-1

判断R1

返回≠1=1

≠0=0

R2=7

3、 向右循环子函数 此函数实现八盏小灯自左向右依次点亮,具体实现方法同向左循环相同,只是环移部分为带进位位的右环移。具体流程图:

开始

A ﹤—FFH

清零C

R1=8

A 内容代进位位向右

环移一次

A 输出给P0口

调用延时

判断P1.7开关

调用暂停子程序

R1-1

判断R1

返回≠1≠0=0

R2=7

=1

4、 暂停子函数 当在左移或者右移函数中检测到暂停开关闭合时跳转到该函数,此函数可以实现八盏小灯全部点亮,直到暂停开关打开,返回原来的函数中继续向下执行。将小灯全部点亮及每个P1接口为低电平,所

以将00H直接输出,然后再次检测暂停开关,如果仍然为低电平即仍然闭合,则继续输出00H给P1,否则即跳转回原地址继续向下执行。程序流程图如下:

开始

00H 输出给P0 接口

检测开关P1.7

返回

5、延时子函数

每条汇编语言的执行时间都非常短,在每个彩灯点亮之后须经由一段时间的延时,然后再点亮下一个小灯,我们利用定时中断来实现延时100ms。首先将定时计数器T0初始化,通过进行五次20ms 的定时可以实现100ms延时,之后再返回调用处。程序流程图如下:

相关文档
最新文档