单片机课设 彩灯的控制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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延时,之后再返回调用处。程序流程图如下: