可调灯光系统程序设计.docx
《可调灯光系统程序设计.docx》由会员分享,可在线阅读,更多相关《可调灯光系统程序设计.docx(20页珍藏版)》请在冰豆网上搜索。
可调灯光系统程序设计
课程设计
课程名称单片机原理与接口技术
题目名称《可调灯光系统程序设计》
2015年1月16日
·课程设计任务书------------------------------------------------------------------1
·系统总体设计------------------------------------------------------------------3
·软件系统设计------------------------------------------------------------------3
程序流程图------------------------------------------------------------------3
九级调光源程序代码----------------------------------------------------------4
无级调光源程序代码----------------------------------------------------------7
·调试结果---------------------------------------------------------------10
·设计感想与体会------------------------------------------------------------------11
广东工业大学课程设计任务书
题目名称
《基于单片机与PWM技术的可调灯光系统程序设计》
学生学院
信息工程学院
专业班级
信息工程(应用电子方向)12
(1)班
姓名
翁桂林
学号
3112002505
一、课程设计的内容
本次课程设计的内容从下面两个方面任选一个:
一是在学院的单片机实验平台上进行,开发一个基于单片机与PWM技术的灯光调节系统,主要开发内容为按键定义、输入与防抖动技术、PWM调节技术以及显示技术等程序设计。
二是利用51系列单片机及必要的外围芯片、输入输出等接口电路设计开发一个简易的单片机系统,在此基础上,自行设计一个单片机应用程序来实现一些实用的功能。
通过这些内容的设计、开发、安装、调试等一系列工作,熟练掌握单片机系统的开发流程与工作机理,加深对所学课程知识的理解与把握,为将来相关的研究开发工作打下坚实的基础。
二、课程设计的要求与数据
1全面掌握硬件结构与电路原理;
2自行设计开发、编辑、调试应用程序;
3必须有完善的功能介绍与调试过程说明;
4提供完整的软件流程框图。
5提供完整的程序清单。
三、课程设计应完成的工作
1硬件理解与安装调试;
2软件设计与开发、调试;
3软硬件联合调试与实验;
4按照学校要求撰写并上交完整的课程设计报告
5完成课程设计答辩。
四、课程设计进程安排
序号
设计各阶段内容
地点
起止日期
1
查找资料,熟悉硬件电路或实验平台的资源
图书馆或实验1号馆404
2015年1月
5日-7日
2
整体方案设计,输入输出通道定义(方案一)
或硬件安装、调试与检查(方案二)
宿舍或
实验1号馆404
1月
8日-9日
3
软件设计与流程图编写
宿舍或
实验1号馆404
1月10日
4
程序编写
宿舍
实验1号馆404
1月11日
-12日
5
软件调试,与硬件联合调试
宿舍或
实验1号馆404
1月13日
6
撰写课程设计报告
宿舍或
实验1号馆404
1月14日
7
课程设计答辩
实验1号馆404
1月15日
-16日
五、应收集的资料及主要参考文献
[1]吴宁.80X86/Pentium微型计算机原理及应用[M].北京:
电子工业出版社,2004:
1-249.
[2]蔡美琴.MCS-51系列单片机系统及其应用[M].北京:
高等教育出版社,2003:
1-169.
[3]段晨东.单片机原理与接口技术[M].北京:
清华大学出版社,2013:
1-333
[4]吴黎明等.单片机实验指导书[M].广州:
广东工业大学教材科,2014
发出任务书日期:
2015年1月5日指导教师签名:
计划完成日期:
2015年1月16日基层教学单位责任人签章:
主管院长签章:
一、系统总体设计:
设计背景:
现当今,单片机的应用无处不在。
利用单片机控制灯具的实例也不胜枚举,可控制灯具的芯片也相当之多,而利用单片机控制灯具,达到人们预想效果的方法最
为广泛。
它有功能多、价格优、外部电路简单的特点,深受单片机爱好者及灯具控制制造商的青昧,用80C51单片机及少数外部电路控制灯光,使灯具产生明暗效果。
本次课设基于AMC51单片机综合开发系统,利用单片机的定时中断生成不同的PWM波形,通过调整PWM的周期、PWM的占空比从而控制输出平均电压,进而达到对电灯进行光度亮暗的控制调节的效果,实现对电灯的PWM调光控制。
完成的功能及效果与目标:
电灯9级PWM亮度调节
设计思路:
AMC51单片机综合开发系统,利用单片机的定时中断生成不同的PWM波形,设置为手动控制,分三个按键,九级调光,通过输出不同的PWM占空比对电灯进行控制,从而实现对光度的调节,进行电灯的亮度调节。
其中,K1键增加亮度K2键降低亮度,K3档实现电灯的开关控制。
工作原理:
对于控制电灯由亮到暗或由暗到亮,采用的是脉宽PWM法。
它是把每一脉冲宽度均相等的脉冲列作PWM波形,通过改变脉冲占空比可以调压,采用适当控制方法即可使电压与频率协调变化。
可以通过调整PWM的占空比而达到控制电流的目的。
PWM简介:
脉冲宽度调制(PWM),是英文“PulseWidthModulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
2、软件系统设计
(1)源程序流程图
(2)源程序
①九级调光源程序
DIRLOPEQU38H//显示字节数
LDANEQU58H//电灯亮度档值
T2HEQU59H//T1高8位定时值存储器
T2DEQU5AH//T1低8位定时值存储器
LAMPEQUP1.2//电灯控制位
ORG0000H
AJMPSTART
ORG000BH
LJMPTIME1//T0中断程序(产生PWM基频)
ORG001BH
LJMPTIME2//T1中断程序(控制脉冲宽度)
ORG0030H
START:
SETBLAMP//程序初始化
MOVA,#0
MOVLDAN,A
MOVTMOD,#11H//设定两定时器为16位定时器
MOVIE,#10001010B//开启两定时器的中断请求
MOVTH0,#0FCH//设定PWM基频(500Hz)
MOVTL0,#18H
SETBTR0//启动计数器T0
MAIN:
ACALLKEY//调动键扫描子程序
ACALLTRANS//调动显示拆字子程序
ACALLDISP//调动串行显示子程序
ACALLDLYK//调动20ms延时程序
NOP
NOP
SJMPMAIN
KEY:
MOVP2,#0FFH//向P2口写“1”,准备读取数据
NOP
NOP
KEY1:
JNBP2.0,K1//判断电灯变亮或变暗
JNBP2.1,K2
JNBP2.2,K3
BACK:
ACALLDONE//调用亮度值到PWM定时值转换程序
RET
K1:
ACALLDLYK//按键防抖动延时
JBP2.0,BACK
J1:
JNBP2.0,J1//亮度档值加1
INCLDAN
MOVA,LDAN
CJNEA,#9,BACK//限定最高档值为8
DECLDAN
SJMPBACK
K2:
ACALLDLYK//按键防抖动延时
JBP2.1,BACK
J2:
JNBP2.1,J2//亮度档值减1
MOVA,LDAN
CJNEA,#0,J22
SJMPBACK
J22:
DECLDAN//按键防抖动延时
SJMPBACK
K3:
ACALLDLYK
JBP2.2,BACK
J3:
JNBP2.2,J3//开关电灯
CPLTR0
NOP
NOP
SETBLAMP
SJMPBACK
DLYK:
MOVR4,#4AH//20ms定时程序
DLYK1:
MOVR5,#62H
DLYK2:
DJNZR5,DLYK2
DJNZR4,DLYK1
RET
DONE:
MOVA,LDAN//亮度值到PWM定时值转换程序
CJNEA,#0,DJ0
RET
DJ0:
CJNEA,#1,DJ1//设定1档定时值
MOVT2H,#0FFH
MOVT2D,#83H
RET
DJ1:
CJNEA,#2,DJ2//设定2档定时值
MOVT2H,#0FFH
MOVT2D,#06H
RET
DJ2:
CJNEA,#3,DJ3//设定3档定时值
MOVT2H,#0FEH
MOVT2D,#89H
RET
DJ3:
CJNEA,#4,DJ4//设定4档定时值
MOVT2H,#0FEH
MOVT2D,#0CH
RET
DJ4:
CJNEA,#5,DJ5//设定5档定时值
MOVT2H,#0FDH
MOVT2D,#8FH
RET
DJ5:
CJNEA,#6,DJ6//设定6档定时值
MOVT2H,#0FDH
MOVT2D,#12H
RET
DJ6:
CJNEA,#7,DJ7//设定7档定时值
MOVT2H,#0FCH
MOVT2D,#95H
DJ7:
RET
TIME1:
MOVTH0,#0FCH//定时中断0
MOVTL0,#18H
PUSHACC
PUSHPSW
MOVA,LDAN
CLRP1.2//开灯
CJNEA,#0,TM1//0档时立刻关掉电灯
SETBP1.2
SJMPTBACK
TM1:
CJNEA,#8,TM2//8档时亮度调到最大
CLRTR1//关闭定时器1
SJMPTBACK
TM2:
MOVTH1,T2H//1至7档时输入T2定时值控制脉冲宽度
MOVTL1,T2D
SETBTR1//启动定时器1
TBACK:
POPPSW
POPACC
RETI
TIME2:
SETBP1.2//关掉电灯
CLRTR1//关闭定时器1
RETI
TRANS:
MOV3CH,LDAN//亮度档值显示拆字
MOV3EH,#16
MOV3FH,#17
RET
DISP:
MOVDIRLOP,#4//串行显示程序(4位数码管)
MOVR0,#3FH//3CH到3FH是显示缓冲区
DL0:
MOVA,@R0
MOVDPTR,#TAB
MOVCA,@A+DPTR//查得相应的七段代码
MOVSBUF,A//串行发送
DL1:
JNBTI,DL1
CLRTI
DECR0
DJNZDIRLOP,DL0
RET
TAB:
DB0FCH,60H,0DAH,0F2H,66H,0B6H//共阴七段数码管代码表
DB0BEH,0E0H,0FEH,0E6H,0EEH,03EH,9CH
DB7AH,9EH,8EH,02H,1CH
END
②无级调光源程序
DIRLOPEQU38H//显示字节数
DISP0EQU39H//串行显示寄存器0
DISP1EQU3AH//串行显示寄存器1
DISP2EQU3BH//串行显示寄存器2
LDANEQU58H//电灯亮度档值
T2HEQU59H//T1高8位定时值存储器
T2DEQU5AH//T1低8位定时值存储器
LAMPEQUP1.2//电灯控制位
ORG0000H
AJMPSTART
ORG000BH
LJMPTIME1//T0中断程序(产生PWM基频)
ORG001BH
LJMPTIME2//T1中断程序(控制脉冲宽度)
ORG0030H
START:
SETBLAMP//程序初始化
MOVA,#0
MOVLDAN,A
MOVDISP0,A
MOVDISP1,A
MOVDISP2,A
MOVTMOD,#11H//设定两定时器为16位定时器
MOVIE,#10001010B//开启两定时器的中断请求
MOVTH0,#0FCH//设定PWM基频(500Hz)
MOVTL0,#18H
SETBTR0//启动计数器T0
MAIN:
ACALLKEY//调动键扫描子程序
ACALLTRANS//调动显示拆字子程序
ACALLDISP//调动串行显示子程序
ACALLDELAY100//调动20ms延时程序
NOP
NOP
SJMPMAIN
KEY:
MOVP2,#0FFH//向P3口写"1",准备读取数据
NOP
NOP
KEY1:
JNBP2.0,K1//判断电灯变亮或变暗
JNBP2.1,K2
JNBP2.2,K3
BACK:
ACALLDONE//调用亮度值到PWM定时值转换程序
RET
K1:
ACALLDELAY100//按键防抖动延时
JBP2.0,BACK
J1:
//亮度档值加1
INCLDAN
MOVA,LDAN
CJNEA,#0,BACK//限定最高档值为255
DECLDAN
SJMPBACK
K2:
ACALLDELAY100
JBP2.1,BACK
J2:
//亮度档值减1
MOVA,LDAN
CJNEA,#0,J22
SJMPBACK
J22:
DECLDAN
SJMPBACK
K3:
ACALLDELAY100
JBP2.2,BACK
J3:
JNBP2.2,J3//开关电灯
CPLTR0
NOP
NOP
SETBLAMP
SJMPBACK
DLYK:
MOVR4,#2AH//20ms定时程序
DLYK1:
MOVR5,#32H
DLYK2:
DJNZR5,DLYK2
DJNZR4,DLYK1
RET
DELAY100:
MOVR4,#7AH//小延迟程序
DLYK101:
MOVR5,#20H
DLYK102:
DJNZR5,DLYK102
DJNZR4,DLYK101
RET
DONE:
MOVA,LDAN//亮度值到PWM定时值转换程序
CJNEA,#0,DJ0
RET
DJ0:
MOVB,#2H//亮度值转化为定时器初始值
MULAB
CPLA
MOVR1,A
MOVA,B
CPLA
MOVR2,A
MOVT2H,R2
MOVT2D,R1
RET
TIME1:
MOVTH0,#0FCH//定时中断0
MOVTL0,#18H
PUSHACC
PUSHPSW
MOVA,LDAN
CLRP1.2//开灯
CJNEA,#0,TM1//0档时立刻关掉电灯
SETBP1.2
SJMPTBACK
TM1:
CJNEA,#0,TM2//255档时亮度调到最大
CLRTR1//关闭定时器1
SJMPTBACK
TM2:
MOVTH1,T2H//输入不同的T2定时值控制脉冲宽度
MOVTL1,T2D
SETBTR1//启动定时器1
TBACK:
POPPSW
POPACC
RETI
TIME2:
SETBP1.2//关掉电灯
CLRTR1//关闭定时器1
RETI
TRANS:
MOVA,LDAN//将LDAN转化为十进制数
MOVB,#64H
DIVAB
MOVDISP2,A
MOVA,#0AH
XCHA,B
DIVAB
MOVDISP1,A
MOVDISP0,B
MOV3CH,#16
RET
DISP:
MOVDIRLOP,#4//串行显示程序(4位数码管)
MOVR0,#3CH//3CH到3FH是显示缓冲区
DL0:
MOVA,@R0
MOVDPTR,#TAB
MOVCA,@A+DPTR//查得相应的七段代码
MOVSBUF,A//串行发送
DL1:
JNBTI,DL1
CLRTI
DECR0
DJNZDIRLOP,DL0
RET
TAB:
DB0FCH,60H,0DAH,0F2H,66H,0B6H//共阴七段数码管代码表
DB0BEH,0E0H,0FEH,0E6H,0EEH,03EH,9CH
DB7AH,9EH,8EH,1CH
END
三:
调试结果
在对PWM九级调光的调试中,按下K1,LED灯增加亮度;按下K2,减低亮度;按下K3,控制电灯的开与关。
每一级led亮度变化明显。
在对PWM无级调光的调试中,按下K1,LED灯增加亮度;按下K2,减低亮度;按下K3,控制电灯的开与关。
电灯有256级调节,数码管变化的范围则是0~255,按下K3,实现关闭led的效果,其他按键按下后led灯则不再有反应,灯灭期间按下K1,K2变换档位后再按K3则显示相应档位的亮度,并且LED灯能够连续变化,但由于每一级之间的亮度差距很小,所以要经过一定的级数差距才能够观察到亮度的变化。
从测试结果来看,按键的设计功能得到实现,通过按键可以有效地实现调光操作,能够成功实现PWM调光。
四:
设计感想与体会,阐述通过本课程设计,有何感想,学到了哪些知识,有哪些不足,如何改正等。
通过本次的课程设计,在实际中运用汇编语言程序完成了无极灯的调节系统的制作。
在实践动手的过程中,根据系统的功能规划开发相应源程序代码、并逐步整合完善调光显示功能。
在写源程序代码时,由于汇编语言平时使用较少,对它的编程应用并不熟练,但在对数码管显示进行改进的过程中,渐渐对运用汇编语言编程变得熟悉,期间也出现不少问题,造成了不能出现设想的功能,但失败是成功之母,也是由于调试中出现的问题,让我更加了解到了用汇编语言编程的方法,通过对问题解决,进一步增加了对汇编语言的运用能力。
由此可见,对于汇编这门编程语言应该进行更多的练习和实践。