MCU实验报告3基于单片机的简易秒表设计制作docWord文档格式.docx
《MCU实验报告3基于单片机的简易秒表设计制作docWord文档格式.docx》由会员分享,可在线阅读,更多相关《MCU实验报告3基于单片机的简易秒表设计制作docWord文档格式.docx(7页珍藏版)》请在冰点文库上搜索。
![MCU实验报告3基于单片机的简易秒表设计制作docWord文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/11/109e49ee-6b54-4802-885a-0525e93f33ba/109e49ee-6b54-4802-885a-0525e93f33ba1.gif)
5、秒表显示(照片)
四、总结与体会
扩展阅读:
简易秒表的制作
简易秒表的制作1.实训目的
(1)利用单片机定时器中断和定时器计数方式实现秒、分定时。
(2)通过LED显示程序的调整,熟悉8155与8051,8155与LED的接口技术,熟悉LED动态显示的控制过程。
(3)通过键盘程序的调整,熟悉8155与矩阵式键盘的接口技术,熟悉键盘扫描原理。
(4)通过阅读和调试简易秒表整体程序,学会如何编制含LED动态显示、键盘扫描和定时器中断等多种功能的综合程序,初步体会大型程序的编制和调试技巧。
2.实训设备与器件
(1)实训设备:
单片机开发系统、微机。
(2)实训器件:
实训电路板1套。
3.实训步骤与要求
(1)要求:
利用实训电路板,以8位LED右边2位显示秒,左边6位显示0,实现秒表计时显示。
以4×
4矩阵键盘的KE0、KE1、KE2等3键分别实现启动、停止、清零等功能。
(2)方法:
用单片机定时器T0中断方式,实现1秒定时;
利用单片机定时器1方式3计数,实现60秒计数。
用动态显示方式实现秒表计时显示,用键盘扫描方式取得KE0、KE1、KE2的键值,用键盘处理程序实现秒表的启动、停止、清零等功能。
(3)实验线路分析:
采用实训电路板,其原理图参见附录。
8位LED显示的位码由8155的PA口输出,段码由8155的PB口输出,PB口线与LED之间接有200Ω限流电阻,LED为共阴极数码管,LED显示方式为动态显示方式。
4×
4矩阵键盘的行线经5.1KΩ电阻上拉后与8155PC口的PC0~PC3口线相连,列线与8155PA口的PA0~PA3口线相连。
8155的控制口地址为4400H,PA口地址为4401H,PB口地址为4402H,PC口地址为4403H。
系统本采用11.0592MHz的晶振,本实训应改为12MHz晶振,以方便定时。
(4)软件设计:
软件整体设计思路是以键盘扫描和键盘处理作为主程序,LED动态显示作为子程序。
二者间的联系是:
主程序查询有无按键,无按键时,调用二次LED动态显示子程序(约延时8ms)后再回到按键查询状态,不断循环;
有按键时,LED动态显示子程序作为按键防抖延时被连续调用二次(约延时16ms),待按键处理程序执行完后,再回到按键查询状态,同时兼顾了按键扫描取值的准确性和LED动态显示的稳定性。
秒定时采用定时器T0中断方式进行,60秒计数由定时器1采用方式3完成,中断及计数的开启与关闭受控于按键处理程序。
由上述设计思路可设计出软件流程图如图7.1所示。
(5)程序编制:
编程时置KE0键为“启动”,置KE1键为“停止”,置KE2键为“清零”,因按键较少,在处理按键值时未采用散转指令“JMP”,而是采用条件转移指令“CJNE”,每条指令后紧跟着一条无条件跳转指令“AJMP”,转至相应的按键处理程序,如不是上述3个按键值则跳回按键查询状态。
8位LED显示的数据由显示缓冲区30H~37H单元中的数据决定,顺序是从左至右,动态显示时,每位显示持续时间为1ms,1ms延时由软件实现,8位显示约耗时8ms。
主程序、按键查询子程序采用第0组工作寄存器,显示子程序采用第1组工作寄存器。
1秒定时采用定时器T0方式1中断,每50ms中断一次,用21H做50ms计数单元,每20次为一个循环,计满20次,60秒计数单元(20H)计数1次。
60秒计数采用定时器T1方式2计数,计数脉冲采用软件置位、复位P3.5口的方法实现,用20H单元做60秒计数单元,如定时器T1溢出,则20H单元被清零,20H单元的数据采用十进制计数,该数据被拆成个位和十位两个数据后分别送至显示缓冲区的30H、31H单元。
图7.1简易秒表软件流程图
按照上述思路可编制源程序如下:
ORG0000H
AJMPMAINORG000BH
AJMPCONT
;
◇◇◇◇◇◇◇◇◇◇◇主程序◇◇◇◇◇◇◇◇◇◇◇◇◇;
——————————初始化程序————————————
MAIN:
MOVTMOD,#61H;
置T0方式1定时,T1方式2计数MOVTH0,#3CH;
T0置初值MOVTL0,#0B0H
MOVTH1,#0C4H;
T1置初值MOVTL1,#0C4H
MOVDPTR,#4400H;
8155控制口地址送DPTRMOVA,#43H;
设置8155工作方式字
MOVX@DPTR,A;
设置PA、PB口输出,PC口输入MOV20H,#00H;
60秒计数单元置初值MOV21H,#14H;
50ms计数单元置初值MOVSP,#3FH;
堆栈指针置初值
MOVR2,#08H;
LED待显示位数送R2MOVR0,#30H;
显示缓冲区首址送R0STAR:
MOV@R0,#00H;
显示缓冲区清零INCR0
DJNZR2,STAR
CLRA;
累加器清零;
———————————键盘查询程序——————————
KEY:
ACALLKS;
调按键查询子程序判是否有键按下JNZK1;
有键按下转移ACALLDISP;
无键按下,调显示子程序延时AJMPKEY;
继续查询按键;
———————————键盘扫描程序——————————K1:
ACALLDISP;
键盘去抖延时ACALLDISP
再次判别是否有键按下JNZK2;
有键按下转移
AJMPKEY;
无按键,误读,继续查询按键K2:
MOVR3,#0FEH;
首列扫描字送R3MOVR4,#00H;
首列号送R4
K3:
MOVDPTR,#4401H;
PA口地址送DPTR,开始列扫描MOVA,R3
列扫描字送PA口INCDPTR;
指向PC口INCDPTR
MOVXA,@DPTR;
读取行扫描值
JBACC.0,L1;
第0行无键按下,转查第1行MOVA,#00H;
第0行有键按下,行首键号送AAJMPLK;
转求键号
L1:
JBACC.1,L2;
第1行无键按下,转查第2行
MOVA,#08H;
第1行有键按下,行首键号送AAJMPLK;
L2:
JBACC.2,L3;
第2行无键按下,转查第3行
MOVA,#10H;
第2行有键按下,行首键号送AAJMPLK;
L3:
JBACC.3,NEXT;
第3行无键按下,转查下一列MOVA,#18H;
第3行有键按下,行首键号送AAJMPLK
LK:
ADDA,R4;
形成键码送APUSHACC;
键码入栈保护K4:
ACALLDISP
等待键释放JNZK4;
未释放,等待POPACC;
键释放,弹栈送AAJMPPR;
转键盘处理程序
NEXT:
INCR4;
修改列号MOVA,R3
JNBACC.3,KEY;
4列扫描完返回按键查询状态RLA;
未扫描完,改为下列扫描字MOVR3,A;
扫描字暂存R3AJMPK3;
转列扫描程序
———————————键盘处理程序———————————————PR:
CJNEA,#00H,PR01;
不是KE0键码,转KE1键AJMPKE0;
转KE0键处理程序
PR01:
CJNEA,#01H,PR02;
不是KE1键码,转KE2键AJMPKE1;
转KE1键处理程序
PR02:
CJNEA,#02H,PR03;
不是KE2键码,返回按键查询AJMPKE2;
转KE2键处理程序PR03:
AJMPKEY
KE0:
SETBTR0;
启动定时器T0SETBTR1;
启动定时器T1
SETBET0;
允许定时器T0中断SETBEA;
开中断
返回键盘查询状态KE1:
CLREA;
关中断
CLRET0;
禁止定时器T0中断CLRTR1;
关定时器T1CLRTR0;
关定时器T0AJMPKEY
KE2:
AJMPMAIN;
返回主程序进行初始化;
——————————按键查询子程序——————————————KS:
置8155PA口地址MOVA,#00H
全扫描字#00H送PA口INCDPTR;
读入PC口状态
3CPLA;
变正逻辑,高电平表示有键按下ANLA,#0FH;
屏蔽高4位
RET;
返回,A≠0表示有键按下;
—————————LED动态显示子程序—————————————DISP:
PUSHACC;
A入栈保护
SETBRS0;
保护第0组工作寄存器,启用第1组工作寄存器
LED待显示位数送R2
MOVR1,#00H;
设定显示时间MOVR3,#7FH;
选中最右端LED
MOVR0,#30H;
显示缓冲区首址送R0MOVA,@R0;
秒显示个位送A
DISP1:
MOVDPTR,#TAB;
指向字形表首址MOVCA,@A+DPTR;
查表取得字形码
MOVDPTR,#4402H;
指向8155PB口(段码口)MOVX@DPTR,A;
字形码送PB口MOVA,R3;
取位选字
指向8155PA口(位选口)MOVX@DPTR,A;
位码送PA口DJNZR1,$;
延时0.5msDJNZR1,$;
延时0.5msRRA;
位选字移位
MOVR3,A;
移位后的位选字送R3INCR0;
指向下一位缓冲区地址MOVA,@R0;
缓冲区数据送ADJNZR2,DISP1;
未扫描完,继续循环
CLRRS0;
恢复第0组工作寄存器POPACC;
A弹栈,恢复现场RET
TAB:
DB3FH,06H,5BH,4FH,66H;
共阴极LED字形表DB6DH,7DH,07H,7FH,6FH
——————————定时器中断服务程序—————————————CONT:
保护现场
MOVTH0,#3CH;
定时器T1重置初值MOVTL0,#0B0HMOVA,20H;
秒计数器送AAJMPCONT1REN:
AJMPREN1
CONT1:
DJNZ21H,REN;
1秒定时未到,中断返回MOV21H,#14H;
重置50ms计数初值
CLRP3.5;
软件产生定时器T1计数脉冲NOPNOP
SETBP3.5
INCA;
1秒计数值加1DAA;
换算为10进制计数
JBCTF1,CONT2;
60秒到,转清零
CONT3:
MOV20H,A;
计数值送60秒计数单元20HANLA,#0FH;
MOV30H,A;
秒表个位待显示数据送显示缓冲区MOVA,20H
SWAPA;
60秒计数单元高、低4位数据互换ANLA,#0FH;
MOV31H,A;
秒表十位待显示数据送显示缓冲区AJMPREN1
CONT2:
MOVA,#00HAJMPCONT3
REN1:
POPACC;
恢复现场RET;
中断返回END4.实训总结与分析
(1)例5.4与本实训相比,二者均是秒表,但差别较大。
前者采用发光二极管显示,后者采用七段码LED(俗称数码管),后者显示更直观;
前者计时采用软件延时,后者采用定时器中断,后者更准确;
前者功能单一,程序一旦开始运行,中间过程无法控制,后者功能齐全,可随时启动、停止、清零,后者智能化程度更高。
综上所述,后者更实用。
(2)设计、调试大型程序时,需先根据要求划分模块,优化结构;
再根据各模块特点确定何为主程序,何为子程序,何为中断服务程序,相互间如何调用;
再根据各模块性质和功能将各模块细化,设计出程序流程图;
最后才根据各模块流程图编制具体程序。
调试时应先调主程序,实现最基本最主要的功能,在此基础上再将各模块功能往主程序上堆砌,直至各模块联调、统调,实现全部功能。
本实训将整个程序划分为键盘程序,动态显示程序,秒计时程序三大模块,根据各自的特点确定键盘程序为主程序,动态显示程序为子程序,秒计时程序为定时器中断服务程序。
主程序又细分为初始化程序,键盘查询程序,键盘扫描程序,键盘处理程序四大部分。
三大模块之间的关系是:
键盘程序在无键按下时,不断调用动态显示子程序;
在有键按下时,先调用动态显示子程序消抖,再进入键盘处理程序,控制中断服务程序的运行;
处理完毕后,再不断调用动态显示子程序。
经上述处理后,三大模块运行协调一致,既保持了动态显示的稳定性,又保持了键盘的可靠性,还保持了秒计时的准确性,较好地实现了全部功能。
(3)本实训只用到实验线路板8位LED显示中的两位,只用到4×
4键盘16个按键中的3个,因此,其功能还有较大的扩展空间。
只要将上述程序稍加改动即可实现秒、分、时、日显示,并可作全方位修改的实时时钟。
如增加LED显示位数或将显示改为LCD显示模块,可实现年、月、周、日、时、分、秒显示。
实验13简易秒表的制作
(一)实验说明
1.利用单片机定时器中断和定时器计数方式实现秒、分定时。
2.通过LED显示程序的调整,熟悉8051,LED的接口技术,熟悉LED动态显示的控制过程。
3.通过键盘程序的调整,熟悉键盘扫描原理。
4.学会如何编制含LED动态显示,键盘扫描和定时器中断等多种功能的综合程序,初步体会大
型程序的编制和调试技巧。
5.以K1,K5,K93个键分别实现启动、停止、清零等功能。
用动态显示方式实现秒表计时显示。
(二)实验连线表
连接1连接2连接3连接4连接5
A01+5V/GNDP1.0P1.1P1.2-P1.4GND开始A05+5V/GNDSCLSDAA08+5V/GNDKR1-KR3KC1(三)程序流程图定时器0中断服务程序
恢复现场显示时间定时器置初值保护现场主程序流程系统初始化显示全0初始时间键盘扫描调整时间值Y启动键?
NY停止键?
NN清零键?
Y关中断关闭时器关中断启动定时器开中中断返回1234+5VDR1R2R35.1K5.1K5.1K实验13原理图+5V1DK1K2K3R4510Ωx838383838383U1SCL1SDA23456781312151431B191891716P1.0/TP1.1/TP1.2P1.3P1.4P1.5P1.6P1.7P3.3/INT1P3.2INT0P3.5/T1P3.4/T0EA/VPXLAT1XLAT2RESETP3.7/RDP3.6/WRMCU8052P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7P3.0/RXDP3.1/TXDALE/PPSEN39383736353433322122232425262728101130291A101B91C71D51E41F21G11DP6abacfbdgecfedgdpdpLA11A1B1C1D1E1F1G1DP2A102B92C72D52E42F22G12DP6abacfbdgecfedgdpdpLA23A103B93C73D53E43F23G13DP6abacfbdgecfedgdpdpLA34A104B94C74D54E44F24G14DP6abacfbdgecfedgdpdpLA45A105B95C75D55E45F25G15DP6abacfbdgecfedgdpdpLA56A106B96C76D56E46F26G16DP6abacfbdgecfedgdpdpLA62A2B2C2D2E2F2G2DP3A3B3C3D3E3F3G3DP4A4B4C4D4E4F4G4DP5A5B5C5D5E5F5G5DP345610111213345601111213345601111213345610111213345610111213345610U2Q0Q1Q2Q3Q4Q5Q6Q7U3Q0Q1Q2Q3Q4Q5Q6Q7U4Q0Q1Q2Q3Q4Q5Q6Q7U5Q0Q1Q2Q3Q4Q5Q6Q7U6Q0Q1Q2Q3Q4Q5Q6Q7U7Q0Q1Q2Q3Q4Q5Q6Q71112136A6B6C6D6E6F6G6DP8C23456789CBCLKCLKCLKCLKCLKCLKMRMRMRMRMR74LS16412891274LS164891274LS164891274LS164891274LS164891274LS16489SDASCLMRABABABABABAB+5VC1100nFC2100nFC3100nFC4100nFC5100nFC6100nFATitleANumberRevisionSizeA4Date:
*E:
\\JZV2.ddbSheetofDrawnBy:
4
友情提示:
本文中关于《MCU实验报告--3-基于单片机的简易秒表设计制作》给出的范例仅供您参考拓展思维使用,MCU实验报告--3-基于单片机的简易秒表设计制作:
该篇文章建议您自主创作。