广东工业大学单片机课程设计报告概述Word格式.docx
《广东工业大学单片机课程设计报告概述Word格式.docx》由会员分享,可在线阅读,更多相关《广东工业大学单片机课程设计报告概述Word格式.docx(18页珍藏版)》请在冰点文库上搜索。
三、课程设计应完成的工作
1硬件理解与安装调试;
2软件设计与开发、调试;
3软硬件联合调试与实验;
4按照学校要求撰写并上交完整的课程设计报告
5完成课程设计答辩。
四、课程设计进程安排
序号
设计各阶段内容
地点
起止日期
1
查找资料,熟悉硬件电路或实验平台的资源
图书馆或实验1号馆404
2015年1月
5日-7日
2
整体方案设计,输入输出通道定义(方案一)
或硬件安装、调试与检查(方案二)
宿舍或
实验1号馆404
1月
8日-9日
3
软件设计与流程图编写
1月10日
4
程序编写
宿舍
1月11日
-12日
5
软件调试,与硬件联合调试
1月13日
6
撰写课程设计报告
1月14日
7
交课程设计报告
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日基层教学单位责任人签章:
目录
目录1
第一章系统总体设计2
第一节概述2
第二节功能设计2
第三节功能实现2
第二章软件系统设计4
第一节工作原理4
第二节程序清单4
第三节程序流程图5
第四节程序源代码6
第三章调试结果10
第一节单元及系统测试10
第四章课程设计体会10
基于单片机与PWM技术的可调灯光系统
第一章系统总体设计
第一节概述
PWM(PulseWidthModulation),即脉冲宽度调制,简称脉宽调制,是一种对模拟信号电平进行数字编码的方法。
PWM技术通过使用较高的调制频率,对方波的占空比实行调制,从而实现对一个模拟信号的电平进行编码。
其最大的优点是从处理器到被控对象之间的所有信号都是数字形式的,无需再进行数模转换过程,而且对噪声的抗干扰能力也大大增强。
因此PWM在通讯等信号传输行业得到广泛应用。
本课程设计作品是一个基于单片机与PWM技术的可调灯光系统。
即通过单片机以PWM方法控制实现LED无级调光,同时具有良好的交互设计方便用户设定亮度级别,硬件部分基于学院单片机实验平台。
第二节功能设计
本系统在实验平台上利用3个按钮实现亮度输入及开关灯功能,3个数码管用于亮度级别显示,通过单片机I/O口输出调制脉冲控制LED亮度。
操作时,用户通过“开/关”按钮开关LED,不论灯处于亮灭时都可以用其它的调节按钮调节亮度值,按放“亮度+(亮度-)”按钮可以加1级(减1级)亮度,长按则会重复加(减)亮度。
第三节功能实现
PWM输出利用I/O口直接输出到LED,由于LED功率不大,AT89S51单片机端口的负载能力满足要求,可以直接驱动。
而PWM脉波的产生使用定时器中断控制,使两个定时器T0、T1均工作于方式1,T0中断产生PWM基波,T1中断控制占空比,简要分析定时器与PWM脉波时序如下:
图3-PWM输出的简单时序分析
分析可知,T0中断T0重载定时常数,复位输出,并使T1也重载常数,启动T1T1中断时,置位输出,停止T1T0中断,如此循环。
使用中断方式能获得准确的定时周期以保证PWM的调制精度,T0作为PWM基波,为避免闪烁,应达到较高频率,本系统取500Hz。
T1要有效地控制占空比,其定时周期应比T0小,通过调节T1的定时周期就能调节PWM输出脉波的占空比,从而改变亮度等级,其对应关系如图3所示:
图4-定时常数、占空比、亮度等级的对应关系
按钮输入采用查询方式实现,并对按键进行防抖动处理,对“亮度+/-”按钮加入延时重复功能。
延时重复功能通过对一延时变量在按下按钮时进行减计数,在减至触发值前按钮弹起则视为短按,执行相关代码1次,当减至触发值后仍保持按下,则快速执行代码,起到重复按下的效果。
图5-延时重复功能原理
数码管输出的亮度级数需要经过一系列的编码转换,按钮控制亮度调节变量,调节变量变换成相应的BCD码放入数码管输出缓冲区,调节变量也变换成相应的T1定时常数以备加载。
数码管采用74LS164锁存驱动,单片机通过串行口输出显示码到4片74LS164,显示码通过查表算法实现。
第2章软件系统设计
第一节工作原理
PWM输出利用I/O口直接输出到LED灯上,由于功率不大,单片机端口能满足要求,直接驱动,而PWM脉冲的产生需要用到定时中断,两个定时器均工作在方式1模式,T0中断产生PWM基波,T1中断控制占空比。
为了避免闪烁,基波频率设为500Hz,T1要有效控制占空比,其定时周期应比T0小,通过定时周期来改变占空比,从而改变亮度等级。
按键输入采取查询方式实现,并对按键实行防抖动处理。
数码管的亮度等级需要经过一系列的编码转换,按钮控制亮度调节变量,调节变量转换成相应的BCD码放入数码管输出缓冲区,单片机通过串行口输出显示码,显示码通过查表算法实行。
第二节程序清单
中断程序T0,T1:
TIME1,TIME2
按键扫描子程序:
KEY
显示拆字子程序:
TRANS
串行显示子程序:
DISP
小延时子程序:
DELAY100
第三节程序流程图
主程序流程图如下:
开始K1?
Yes亮度值
加1
初始化NO
K2?
减1
键扫描Yes
检测有否键按NO
下?
K3?
Yes开关
电灯
NO
调动显示程序
程序初始化时设定定时器工作方式,赋定初始值,并对一系列配置变量进行初始化;
按键扫描程序实现对亮度调节变量的修改,亮度调节变量将通过定时值计算程序计算出T1的定时值,通过显示BCD码计算程序计算出显示缓冲区的显示码。
显示程序将显示缓冲区的内容输出到数码管显示。
按键检测采用扫描方式,并有防抖动和延时重复功能。
定时期T0、T1工作于方式1,以中断方式输出PWM脉波。
定时期中断服务程序流程图:
T0中断(产生基波)T1中断(控制脉宽)
按亮度档值
控制T1定时关闭电灯
值
中断返回中断返回
通过T0中断产生PWM基波,T1中断调节占空比,从而实现PWM。
第四节程序源代码
DISP0EQU39H//串行显示寄存器0
DISP1EQU3AH//串行显示寄存器1
DISP2EQU3BH//串行显示寄存器2
DISP3EQU3CH//串行显示寄存器3
FLAGBIT20H.0//锁存标志位
LDANEQU58H//电灯亮度档值
T2HEQU59H//T1高8位定时值存储器
T2DEQU5AH//T1低8位定时值存储器
LAMPEQUP1.2//电灯控制位
ORG0000H
AJMPSTART
ORG000BH
LJMPTIME1//T0中断程序(产生PWM基频)
ORG0000H
AJMPSTART
ORG000BH
LJMPTIME1//T0中断程序(产生PWM基频)
ORG001BH
LJMPTIME2//T1中断程序(控制脉冲宽度)
ORG0030H
START:
SETBLAMP//程序初始化
MOVA,#0
MOVLDAN,A
MOVDISP0,A
MOVDISP1,A
MOVDISP2,A
MOVDISP3,#15
CLRFLAG
MOVTMOD,#11H//设定两定时器为16位定时器
MOVIE,#10001010B//开启两定时器的中断请求
MOVTH0,#0FCH//设定PWM基频(500Hz)
MOVTL0,#18H
SETBTR0//启动计数器T0
MAIN:
ACALLKEY//调动键扫描子程序
ACALLTRANS//调动显示拆字子程序
ACALLDISP//调动串行显示子程序
ACALLDELAY100//调动小延时程序
NOP
SJMPMAIN
KEY:
MOVP2,#0FFH//向P2口写"
1"
,准备读取数据
KEY1:
JNBP2.0,K1//判断电灯变亮或变暗
JNBP2.1,K2
JNBP2.2,K3
BACK:
ACALLDONE//调用亮度值到PWM定时值转换程序
RET
K1:
JBFLAG,BACK//标志位置1,锁存
ACALLDELAY100//按键防抖动延时
JBP2.0,BACK
J1:
;
JNBP2.0,J1//亮度档值加1
INCLDAN
MOVA,LDAN
CJNEA,#00H,BACK//限定最高档值为255
DECLDAN
SJMPBACK
K2:
ACALLDELAY100
JBP2.1,BACK
J2:
JNBP2.1,J2//亮度档值减1
CJNEA,#0,J22
SJMPBACK
J22:
K3:
JBP2.2,BACK
J3:
//开关电灯
JNBP2.2,J3
CPLFLAG
JBFLAG,NEXT
SJMPNEXT2
NEXT:
MOVDISP3,#14
NEXT2:
CPLTR0
SETBLAMP
DLYK:
MOVR4,#2AH//20ms定时程序
DLYK1:
MOVR5,#32H
DLYK2:
DJNZR5,DLYK2
DJNZR4,DLYK1
DELAY100:
MOVR4,#7AH//小延迟程序
DLYK101:
MOVR5,#20H
DLYK102:
DJNZR5,DLYK102
DJNZR4,DLYK101
RET
DONE:
MOVA,LDAN//亮度值到PWM定时值转换程序
CJNEA,#0,DJ0
DJ0:
MOVB,#2H//亮度值转化为定时器初始值
MULAB
CPLA
MOVR1,A
MOVA,B
MOVR2,A
MOVT2H,R2
MOVT2D,R1
TIME1:
MOVTH0,#0FCH//定时中断0
PUSHACC
PUSHPSW
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//关掉电灯
TRANS:
MOVA,LDAN//将LDAN转化为十进制数
MOVB,#64H
DIVAB
MOVA,#0AH
XCHA,B
MOVDISP0,B
DISP:
MOVR7,#4
MOVR0,#DISP3
DL0:
MOVA,@R0
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVSBUF,A
DL1:
JNBTI,DL1
CLRTI
DECR0
DJNZR7,DL0
TAB:
DB0FCH,60H,0DAH,0F2H,66H,0B6H//共阴七段数码管代码表
DB0BEH,0E0H,0FEH,0E6H,0EEH,03EH,9CH
DB7AH,9EH,8EH
END
第三章调试结果
第一节单元及系统测试
按下K1,增加亮度;
按下K2,减低亮度;
按下K3,则是电灯的开与关。
电灯的无级调节,数码管变化的范围则是0~255,按下K3,开与关分别对应F与E,而且关灯之后,不能再调试其他按键。
能够连续变化,只是每一次按键之间的亮度差距很小。
从测试结果来看,按键实现设计的功能,通过按键可以有效地操作调光系统,按键的防抖设计避免了开关的抖动,但由于部分按键在实验室频繁被按放,有的已经出现失灵的现象,影响了灵敏度。
第四章课程设计体会
本次课程设计,让我收获良多。
需要了解的内容有开发流程,系统的功能规划、逐步整合完善功能等等。
在编程调试的时候,采用结构化,单元化的代码结构,可以简单修改来配置相应功能,这样对于调试某个子程序或代码段而言是十分方便的。
写汇编程序需要十分认真,要规范来写,真正认真了解指令的意义,才能尽量避免出错。
因为本次课程设计以个人为单位,对于我的个人学习要求十分之高,难以避免的要向其他同学请教,这样也有利于提高效率,让课设有效完成。
本次课程设计,让我对单片机有了进一步的了解与认识。