广东工业大学单片机课程设计报告.docx
- 文档编号:17694307
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:14
- 大小:89.93KB
广东工业大学单片机课程设计报告.docx
《广东工业大学单片机课程设计报告.docx》由会员分享,可在线阅读,更多相关《广东工业大学单片机课程设计报告.docx(14页珍藏版)》请在冰豆网上搜索。
广东工业大学单片机课程设计报告
课程设计
课程名称单片机原理及接口技术
题目名称基于单片机与pwm技术的可调灯光系统
学院信息工程学院
专业班级应用电子技术4班
学号3111002729
姓名朱俊城
任课教师李优新
2013年1月3日
目录
第一章系统总体设计1
第一节概述1
第二节功能设计1
第三节功能实现1
第二章软件系统设计3
第一节程序流程图3
第二节程序源代码4
第三章系统调试7
第一节单元及系统测试7
课程设计体会8
基于单片机与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,显示码通过查表算法实现。
第二章软件系统设计
第一节程序流程图
主程序流程图如下:
开始K1?
Yes亮度值
加1
初始化NO
K2?
Yes亮度值
减1
键扫描Yes
检测有否键按NO
下?
K3?
Yes开关
电灯
NO
NO
调动显示程序
程序初始化时设定定时器工作方式,赋定时初值,并对一系列配置变量进行初始化;按键扫描程序实现对亮度调节变量的修改,亮度调节变量将通过定时值计算程序计算出T1的定时值,通过显示BCD码计算程序计算出显示缓冲区的显示码。
显示程序将显示缓冲区的内容输出到数码管显示。
按键检测采用扫描方式,并有防抖动和延时重复功能。
定时期T0、T1工作于方式1,以中断方式输出PWM脉波。
定时期中断服务程序流程图:
T0中断(产生基波)T1中断(控制脉宽)
按亮度档值
控制T1定时关闭电灯
值
中断返回中断返回
通过T0中断产生PWM基波,T1中断调节占空比,从而实现PWM。
第二节程序源代码
DIRLOPEQU38H//显示字节数
DISP0EQU3CH//串行显示寄存器0
DISP1EQU3DH//串行显示寄存器1
DISP2EQU3EH//串行显示寄存器2
DISP3EQU3FH
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//向P2口写"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
RET
DISP:
MOVDIRLOP,#4//串行显示程序(4位数码管)
MOVDISP3,#0
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
END
第三章系统调试
第一节单元及系统测试
为确保程序按预期结果运行,对系统进行一系列功能测试,同时为减少相互影响,便于找出问题所在,先进行某个功能的测试。
按钮是为系统提供输入条件的模块,按钮必须保证稳定可靠地工作,单元测试先测试按钮功能,再利用按钮输入来做子程序测试。
表格1-按钮功能测试
测试对象
测试方法
预期结果
实测结果
结果分析
亮度+
按放1次
亮度+1
亮度+1
按钮防抖及延时重复功能正常
按钮老化令按放操作时有不灵敏
数码管显示正常
亮度在调节幅度大时变化明显
快速重复按放
亮度慢速重复递增
亮度慢速重复递增
长按
亮度快速重复递增
亮度快速重复递增
亮度-
按放1次
亮度-1
亮度-1
快速重复按放
亮度慢速重复递减
亮度慢速重复递减
长按
亮度快速重复递减
亮度快速重复递减
开/关灯
按放
弹起时作用
开关灯切换
弹起时作用
开关灯切换
按钮防抖功能正常
时有不灵敏操作现象
数码管显示正常
LED灯受控开关
长按
弹起时作用
开关灯切换
弹起时作用
开关灯切换
从测试结果来看,按钮实现了设计的功能,通过按钮可以有效操作调光系统。
按钮的防抖设计避免了开关抖动,但由于部分按钮在实验室频繁按放已出现老化,这影响了部分按钮的灵敏度。
课程设计体会
本次课程设计虽然只有软件系统的设计,但是也要在了解硬件系统的前提下才能写出程序的源代码,再加上本次的程序语言必须是汇编语言,更是加大了难度,因此前前后后总共花了几天的时间才完成了此次课程设计。
通过本次课程设计,令我渐渐感觉到汇编的重要性,特别是在程序需要非常精简的情况下,虽然汇编比较难,但是每个体系的汇编指令其实在一定程度上还是有着共同之处,因为之前学过了8086微机原理,记得上一年学的时候很吃力,但是今年学单片机的时候看指令的时候都能联系上去年的知识,而在做课程设计的过程中,更是真正把课本的知识付诸实践了,所以感觉这次课程设计还是蛮有意义的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 广东工业大学 单片机 课程设计 报告