单片机实训实验报告.docx
- 文档编号:11486749
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:26
- 大小:273.91KB
单片机实训实验报告.docx
《单片机实训实验报告.docx》由会员分享,可在线阅读,更多相关《单片机实训实验报告.docx(26页珍藏版)》请在冰豆网上搜索。
单片机实训实验报告
学校代码:
10128
单片机工程实践
(第4组)
题目:
电子秒表(任务一)
组长:
学号:
组员:
学号:
学号:
指导教师:
刘伟、裴岩、斯日古楞、吕少中
韩海波、高鹏、王华超(研)、李春雷(研)李金莹(研)
设计时间:
2013年2月27日~2013年3月8日
一、
设计目的:
通过一个以8位单片机为核心的模拟量数字表的硬件调试过程,掌握具有A/D、七段LED显示、RS-485通信、Watchdog等接口电路的单片机应用系统的设计思想和方法。
学习应用系统软件的模块化设计方法,通过源程序的编辑、汇编或编译、链接、仿真调试,完成给定的任务。
通过上述过程提高学生工程实践能力和素质。
通过一个以8位单片机为核心的模拟量数字表的硬件调试过程,掌握具有蜂鸣器、按键、LED显示等接口电路的单片机应用系统的设计思想和方法,并熟悉定时器中断、外部中断系统的使用,进而对51单片机有更深层次的认识。
学习应用系统软件的模块化设计方法,通过源程序的编辑、汇编或编译、链接、仿真调试,完成给定的任务。
通过上述过程提高学生工程实践能力和素质。
(1)利用单片机定时计数器中断实现秒、分定时。
(2)通过LED显示程序的调整,熟悉计算机与单片机接口技术,熟悉LED动态显示,键
盘自检,喇叭发声的控制过程。
(3)通过键盘程序的调整,熟悉伟福仿真器的设置方法与键盘的接口技术,熟悉键盘扫
描原理。
(4)通过阅读和调试简易秒表整体程序,学会如何编制含LED动态显示、键盘扫描和定
时器中断等多种功能的综合程序,初步体会大型程序的编制和调试技巧。
二、设计任务:
1、任务内容
★基本任务:
完成蜂鸣器、键盘、七段LED显示器的自检程序设计。
(1)蜂鸣器自检
要求:
利用程序实现两种以上声音。
参见【例7-4-4】
(2)键盘自检
要求:
确定键盘正确。
参见【例7-4-14】
(3)七段LED显示器自检
要求:
确定LED显示器每一段均正确。
参见【例7-4-16】
★随机选择任务:
大任务题目:
电子秒表
难度系数:
8
功能:
(1)显示时间范围0~59分59秒
(2)跑表时间范围0~59分59秒
硬件环境:
LED显示器、键盘等
三、框图:
1、硬件编程框图及相关说明
(1)蜂鸣器自检
说明:
当p2.3管脚为低电平时,蜂鸣器发出声音
当p2.3管脚为高电平时,蜂鸣器停止发声
(2)LED自检
说明:
通过字位口选择第几位LED显示
通过字型口输出需要显示的字型所对应的七段码
(3)键盘自检
说明:
通过P1口从键盘处输入键值
控制P2.5P2.6P2.7三个管脚来实现对三态门的控制
蜂鸣器作为按键输入的响应及LED的显示
(4)电子秒表
说明:
通过程序实现对LED和键盘的管理,完成秒表的各种功能。
1、硬件编程框图及相关说明
(1)蜂鸣器自检:
(2)、LED自检程序框图:
(3)、键盘自检框图:
(5)、子程序定时器框图:
4.程序清单:
1、蜂鸣器自检:
BEEP:
SETBP2.3
ACALLDELAY1
CLRP2.3
ACALLDELAY1
SETBP2.3
ACALLDELAY1
ACALLDELAY1
CLRP2.3
ACALLDELAY1
ACALLDELAY1
SETBP2.3
ACALLDELAY1
ACALLDELAY1
LJMPBEEP
RET
DELAY1:
MOVR1,#0FFH
CX0:
MOVR2,#080H
CX:
DJNZR2,CX
DJNZR1,CX0
RET
2.LED显示:
START:
LCALLZIJIAN
SJMPSTART
RET
ZIJIAN:
CLRP2.5
CLRP2.6
CLRP2.7
LCALLLED3
CLRP2.5
CLRP2.6
SETBP2.7
LCALLLED1
CLRP2.5
SETBP2.6
CLRP2.7
LCALLLED1
CLRP2.5
SETBP2.6
SETBP2.7
LCALLLED1
SETBP2.5
CLRP2.6
CLRP2.7
LCALLLED1
RET
LED3:
MOVDPTR,#TABLE1
MOVR0,#00H
LOOP:
MOVA,R0
MOVCA,@A+DPTR
MOVR1,A
INCR0
MOVP0,R1
LCALLBEEP
ACALLDL1
CJNER1,#08DH,LOOP
RET
LED1:
MOVDPTR,#TABLE2
MOVR0,#00H
LOOP1:
MOVA,R0
MOVCA,@A+DPTR
MOVR1,A
INCR0
MOVP0,R1
LCALLBEEP
ACALLDL1
CJNER1,#0DFH,LOOP1
RET
DL1:
MOVR6,#0FFH
CXW3:
MOVR7,#0FFH
MOVR5,#0FFH
MOVR4,#0FFH
MOVR3,#0FFH
DJNZR7,$
DJNZR5,$
DJNZR4,$
DJNZR3,$
DJNZR6,CXW3
RET
BEEP:
SETBP2.3
CPLP2.3
LCALLDL1
CPLP2.3
LCALLDL1
RET
TABLE1:
DB01H,04H,08H,80H,8DH
TABLE2:
DB01H,02H,04H,08H,10H,20H,40H,80H,7FH,0DH,0B7H,9FH,0CDH,
0DBH,0FBH,0FH,0FFH,0DFH
END
3.键盘自检:
WAIT:
MOVP0,#0
SETBP2.3
LCALLSEL8
MOVP1,#0FFH
MOVA,P1
LCALLSEL7
ORLA,#0F0H
CJNEA,#0FFH,W1
SJMPWAIT
W1:
LCALLD10MS
LCALLSEL8
MOVP1,#0FFH
MOVA,P1
LCALLSEL7
ORLA,#0F0H
CJNEA,#0FFH,K1
SJMPWAIT
K1:
CJNEA,#0FEH,K2
CLRP2.3
LCALLSEL2
MOVP0,#0CH
LCALLD10MS
JMPWAIT
RET
K2:
CJNEA,#0FDH,K3
CLRP2.3
LCALLSEL3
MOVP0,#0B6H
LCALLD10MS
JMPWAIT
RET
K3:
CJNEA,#0FBH,K4
CLRP2.3
LCALLSEL4
MOVP0,#9EH
LCALLD10MS
JMPWAIT
RET
K4:
CJNEA,#0F7H,LP
CLRP2.3
LCALLSEL5
MOVP0,#0CCH
LCALLD10MS
JMPWAIT
RET
SEL2:
CLRP2.5
CLRP2.6
SETBP2.7
RET
SEL3:
CLRP2.5
SETBP2.6
CLRP2.7
RET
SEL4:
CLRP2.5
SETBP2.6
SETBP2.7
RET
SEL5:
SETBP2.5
CLRP2.6
CLRP2.7
RET
SEL7:
SETBP2.5
SETBP2.6
CLRP2.7
RET
SEL8:
SETBP2.5
SETBP2.6
SETBP2.7
RET
D10MS:
MOVR5,#2
D1:
MOVR6,#40
D2:
MOVR7,#250
DJNZR7,$
DJNZR6,D2
DJNZR5,D1
RET
LP:
CLRP2.3
LCALLSEL2
MOVP0,#8DH
LCALLD20MS
JMPWAIT
RET
D20MS:
MOVR5,#0FH
D3:
MOVR6,#40
D4:
MOVR7,#250
DJNZR7,$
DJNZR6,D4
DJNZR5,D3
RET
4.电子秒表:
;-------------------------
;定义秒表和跑表的存储单元
;-------------------------
MBEQU40H;跑表数值
PBEQU50H;秒表数值单元
;-------------------------
;定义中断和主程序存储单元
;-------------------------
ORG0000H
AJMPMAIN
ORG000BH;T0中断地址
AJMPTIME0
ORG001BH;T1中断地址
AJMPTIME1
ORG0030H
;-------------------------
;主程序
;-------------------------
MAIN:
MOVTMOD,#11H;置定时器T0为工作方式1
;-------------------------
;秒表程序
;-------------------------
STA2:
MOVR1,#PB;计时器清零
MOVA,#00H
CLR2:
MOV@R1,A
INCR1
CJNER1,#59H,CLR2
SETBEA;CPU开中断
SETBTR1;启动定时器T1
SETBET1;定时器T1开中断
DISP2:
MOVR1,#PB+2;R1指向52H单元
CALLJP;采集键盘的状态
JBACC.0,STA1;K1键按下,则跳到STA1执行跑表功能
AJMPXIANSHI;否则显示秒表
XIANSHI:
CALLSEL5
CALLAA1
CALLSEL4
INCR1;R1指向53H单元
CALLAA1
CALLSEL3
INCR1;R1指向54H单元
CALLBB1
CALLSEL2
INCR1;R1指向55H单元
CALLAA1
AJMPDISP2
AA:
MOVP0,#00H;关显示
CALLDELAY1;延时5MS
MOVA,@R0;把RO指向的地址单元的内容送给A
MOVDPTR,#TAB1;DPTR指向表TAB1的首地址
MOVCA,@A+DPTR;取出表中对应的字型送给A寄存器
MOVP0,A;将字型送P0口显示
CALLDELAY;延时1MS
RET
;-------------------------
;跑表程序
;-------------------------
STA1:
MOVR0,#MB;计时器清零
MOVA,#00H
CLR1:
MOV@R0,A
INCR0
CJNER0,#49H,CLR1
SETBEA;CPU开中断
GO:
SETBET0;定时器T0开中断
SETBTR0;启动定时器T0
DISP1:
MOVR0,#MB+2;R0指向42H单元
CALLJP;采集键盘的状态
JBACC.1,STOP;K2键按下,则暂停跑表功能
JBACC.0,STA1;K1键按下,则跳到STA1执行跑表功能
JBACC.2,GO;K3键按下,则继续执行跑表功能
JBACC.3,DISP2;K4键按下,则跳到STA2执行分钟显示功能
CALLSEL5
CALLAA
CALLSEL4
INCR0;R0指向43H单元
CALLAA
CALLSEL3
INCR0;R0指向44H单元
CALLBB
CALLSEL2
INCR0;R0指向45H单元
CALLAA
SJMPDISP1
STOP:
CLRET0;关闭定时器TO的中断
SJMPDISP1
;-------------------------
;显示子程序
;-------------------------
AA1:
MOVP0,#00H;关显示
CALLDELAY1;延时5MS
MOVA,@R1;把R1指向的地址单元的内容送给A寄存器
MOVDPTR,#TAB1;DPTR指向表TAB1的首地址
MOVCA,@A+DPTR;取出表中对应的字型送给A寄存器
MOVP0,A;将字型送P0口显示
CALLDELAY;延时1MS
RET
BB:
MOVP0,#00H;关显示
CALLDELAY1;延时5MS
MOVA,@R0;把RO指向的地址单元的内容送给A
MOVDPTR,#TAB2;DPTR指向表TAB2的首地址
MOVCA,@A+DPTR;取出表中对应的字型送给A寄存器
MOVP0,A;将字型送P0口显示
CALLDELAY;延时1MS
RET
BB1:
MOVP0,#00H;关显示
CALLDELAY1;延时5MS
MOVA,@R1;把R1指向的地址单元的内容送给A寄存器
MOVDPTR,#TAB2;DPTR指向表TAB2的首地址
MOVCA,@A+DPTR;取出表中对应的字型送给A寄存器
MOVP0,A;将字型送P0口显示
CALLDELAY;延时1MS
RET
;-------------------------
;键采集程序
;-------------------------
JP:
MOVP0,#00H;关显示
CALLSEL8;打开三态门
MOVP1,#0FFH;置P1口为输入口
MOVA,P1;采集键盘的状态
CALLSEL7;关闭三态门
CPLA
ANLA,#0FH
RET
;-------------------------
;定时中断0控制跑表程序
;-------------------------
TIME0:
PUSHACC;保护A寄存器
MOVTH0,#0D8H;重置定时器TO的初值10MS
MOVTL0,#0EFH
INCMB;10MS计数器加1,存放到40H单元中
MOVA,MB
CJNEA,#10,TEND;10MS计数器的值不等于10,
;即不到100MS,则跳到TEND中断返回
MOVMB,#00H;10MS计数器清零
INCMB+1;100MS计数器加1,存放到41H单元中
MOVA,MB+1
CJNEA,#10,TEND;100MS计数器的值不等于10,
;即不到1S,则跳到TEND中断返回
MOVMB+1,#00H;100MS计数器清零
INCMB+2;1S计数器加1,存放到42H单元中
MOVA,MB+2
CJNEA,#10,TEND;1S计数器的值不等于10,
;即不到10S,则跳到TEND中断返回
MOVMB+2,#00H;1S计数器清零
INCMB+3;10S计数器加1,存放到43H单元中
MOVA,MB+3
CJNEA,#6,TEND;10S计数器的值不等于10,
;即不到100S,则跳到TEND中断返回
MOVMB+3,#00H;10S计数器清零
INCMB+4;1分计数器加1,存放到54H单元中
MOVA,MB+4
CJNEA,#10,TEND;1分计数器的值不等于10,
;即不到10分,则跳到TEND1中断返回
MOVMB+4,#00H;1分计数器清零
INCMB+5;10分计数器加1,存放到55H单元中
MOVA,MB+5
CJNEA,#6,TEND;10分计数器的值不等于6,
;即不到60分,则跳到TEND1中断返回
MOVMB+5,#00H
TEND:
POPACC;恢复A寄存器
RETI;中断服务子程序结束返回
;-------------------------
;定时中断1控制秒表程序
;-------------------------
TIME1:
PUSHACC;保护A寄存器
MOVTH1,#3CH;重置T1初值50MS
MOVTL1,#0AFH
INCPB;(50H)+1
MOVA,PB
CJNEA,#2,TEND1;(50H)不等于2,则跳到中断返回
MOVPB,#00H;50MS计数器清零
INCPB+1;(51H)+1
MOVA,PB+1
CJNEA,#10,TEND1;100MS计数器的值不等于10,
;即不到1S,则跳到TEND1中断返回
MOVPB+1,#00H;100MS计数器清零
INCPB+2;100MS计数器加1,存放到52H单元中
MOVA,PB+2
CJNEA,#10,TEND1;1S计数器的值不等于10,
;即不到10S,则跳到TEND1中断返回
MOVPB+2,#00H;1S计数器清零
INCPB+3;10S计数器加1,存放到53H单元中
MOVA,PB+3
CJNEA,#06,TEND1;10S计数器的值不等于6,
;即不到1分(60S),则跳到TEND1中断返回
MOVPB+3,#00H;10S计数器清零
INCPB+4;1分计数器加1,存放到54H单元中
MOVA,PB+4
CJNEA,#10,TEND1;1分计数器的值不等于10,
;即不到10分,则跳到TEND1中断返回
MOVPB+4,#00H;1分计数器清零
INCPB+5;10分计数器加1,存放到55H单元中
MOVA,PB+5
CJNEA,#6,TEND1;10分计数器的值不等于6,
;即不到60分,则跳到TEND1中断返回
MOVPB+5,#00H;10分计数器清零
TEND1:
POPACC;恢复A寄存器
RETI;中断服务子程序结束返回
;-------------------------
;延时子程序
;-------------------------
DELAY:
MOVR2,#2;延时1MS子程序
DLY4:
MOVR3,#248
DLY5:
DJNZR3,DLY5
DJNZR2,DLY4
RET
DELAY1:
MOVR4,#10;延时5MS子程序
DLY6:
MOVR5,#248
DLY7:
DJNZR5,DLY7
DJNZR4,DLY6
RET
;-------------------------
;译码器子程序
;-------------------------
SEL2:
CLRP2.5
CLRP2.6
SETBP2.7
RET
SEL3:
CLRP2.5
SETBP2.6
CLRP2.7
RET
SEL4:
CLRP2.5
SETBP2.6
SETBP2.7
RET
SEL5:
SETBP2.5
CLRP2.6
CLRP2.7
RET
SEL7:
SETBP2.5
SETBP2.6
CLRP2.7
RET
SEL8:
SETBP2.5
SETBP2.6
SETBP2.7
RET
TAB1:
DB7EH,0CH,0B6H,9EH,0CCH,0DAH,0FAH,0EH,0FEH,0DEH
TAB2:
DB7FH,0DH,0B7H,9FH,0CDH,0DBH,0FBH,0FH,0FFH,0DFH
三、参考资料
1、《单片机系统综合设计与实践》教材主编:
裴岩刘利民内蒙古大学出版社。
2、《单片机原理与应用》主编:
倪云峰西安电子科技大学出版社。
3、《单片机原理与应用技术》主编:
李珍何植桐清华大学出版社。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)