单片机实验3(3)

2018-11-21 23:44

5. 主程序(包含键盘扫描模块)流程图

键盘扫描部分是主程序中的子程序FINDKEY,是无条件循环的,其中KEYNUM保存上一次的按键值,取00~03H,代表K0~K3,初始值KEYNUM为04H。键盘按键只有K0~K3有效,键盘上其他按键无效。流程图如下图6:

开始时钟配置,中断配置,各个模块参数的初始化C=1?响一声喇叭CPU、T0、T1和T2开中断启动T0,T1和T2调用子程序FINDKEY

进入FINDKEYMOV P2,#0EH是延迟10毫秒P2.0=0?否否是P2.0=0?延迟10毫秒P2.1=0?是否否MOV A,#00HP2.1=0?P2.2=0?延迟10毫秒是否是A=KEYNUM?MOV A,#00HP2.3=0?延迟10毫秒否P2.2=0?是否否是是KEYNUM<--0A=KEYNUM?P2.3=0?否MOV A,#00H否是SETB OVER是SETB TF0KEYNUM<--1MOV A,#00HA=KEYNUM?否SETB OVER是SETB TF0A=KEYNUM?KEYNUM<--3否KEYNUM<--2SETB OVERSETB OVERSETB TF0SETB TF0返回

图 6 主程序流程图

11

五、源程序 (含文件头说明、资源使用说明、语句行注释)

;------------------------------------ ;A的值取00H~03H代表模式0~模式3

;模式0~模式2控制LED闪烁,模式3为电子计时器 ;使用了K0~K3四个矩阵键盘上的按键 ;------------------------------------

$include (C8051F310.inc) LED BIT P0.0 BEEP BIT P3.1 KINT BIT P0.1

OVER BIT 20H.0 ;自动模式终结标志

BIT0 EQU 30H;储存内容代表数码管0位显示的字符 BIT1 EQU 31H;储存内容代表数码管1位显示的字符 BIT2 EQU 32H;储存内容代表数码管2位显示的字符 BIT3 EQU 33H;储存内容代表数码管3位显示的字符 DOT EQU 21H;控制显示小数点 DOT0 BIT 21H.0;0位小数点 DOT1 BIT 21H.1;1位小数点 DOT2 BIT 21H.2;2位小数点 DOT3 BIT 21H.3;3位小数点

SEC1 EQU 34H;个位秒,数码管第0位显示之 SEC2 EQU 35H;十位秒,数码管第1位显示之 MIN1 EQU 36H;个位分,数码管第2位显示之 MIN2 EQU 37H;十位分,数码管第3位显示之 FLAG EQU 38H;值代表扫描四位数码管的哪一位 KEYNUM EQU 39H;用来保存按下的按键值 ORG 0000H LJMP MAIN

ORG 0003H ;外部中断0入口地址 LJMP INT0

ORG 000BH ;T0中断服务入口地址 LJMP INT_T0 ORG 001BH ;T1中断服务入口地址

LJMP INT_T1 ORG 002BH ;T2中断服务入口地址

LJMP INT_T2

12

ORG 0200H

MAIN: ACALL Init_Device ;必要的配置及参数的初始化 MOV P1,#00H ;关闭显示 CLR A CLR C

JC SLIENCE ;C作为是否进入过外部中断0的判断,为1表示进入过中断0 LCALL DELAY0_5;DELAY 0.5S SETB BEEP

;响喇叭

LCALL DELAY0_5 ;延迟

SLIENCE:CLR BEEP ;关喇叭,用外部中断切换模式不响喇叭 CLR LED SETB EA

;CPU开中断

SETB ET2 ;T2开中断 SETB ET1 ;T1开中断 SETB ET0 ;T0开中断 SETB TR0 ;启动T0 SETB TR1 ;启动T1 SETB TR2

;启动T2

MOV DPTR,#TAB0

HERE:ACALL FINDKEY;扫描键盘 SJMP HERE

;*********模式选择模块************************************ INT_T0: RL A JMP @A+DPTR TAB0:AJMP CASE5_0HZ ;三种不同闪烁频率,一个电子计时器

AJMP CASE1_0HZ AJMP CASE0_5HZ AJMP CASE_TIME

CASE5_0HZ:MOV TH0,#0E7H;T0装入初值,0.1S中断一次 MOV TL0,#014H CPL LED

;定时取反,,LED以5hz闪烁

MOV BIT0,#00H ;给数码管显示模块的入口参数赋值,显示0-5.0 MOV BIT1,#05H MOV BIT2,#0AH MOV BIT3,#00H

13

MOV DOT,#02H ;显示数码管1位的小数点 RR A

;A恢复为原来的值

RETI

CASE1_0HZ:MOV TH0,#83H ;T0装入初值,0.5S中断一次 MOV TL0,#63H CPL LED

;定时取反,LED以1HZ闪烁

MOV BIT0,#00H ;给数码管显示模块的入口参数赋值,显示1-1.0 MOV BIT1,#01H MOV BIT2,#0AH MOV BIT3,#01H MOV DOT,#02H RR A RETI

CASE0_5HZ:MOV TH0,#06H ;T0装入初值,1S中断一次 MOV TL0,#0C6H CPL LED

;定时取反,LED以0.5HZ闪烁

MOV BIT0,#05H ;给数码管显示模块的入口参数赋值,显示2-0.5 MOV BIT1,#00H MOV BIT2,#0AH MOV BIT3,#02H MOV DOT,#02H RR A RETI

CASE_TIME:SETB LED ;关闭led

MOV TH0,#0E7H ;T0装入初值,0.1S CPL MOV TL0,#014H

MOV BIT0,SEC1 ;给数码管显示模块的入口参数赋值,显示运行时间 MOV BIT1,SEC2 MOV BIT2,MIN1 MOV BIT3,MIN2

MOV DOT,#04H ;显示数码管第2位的小数点,作为分钟与秒的分隔符号 RR A RETI

;********计时模块***************************************** INT_T1:MOV TH1,#03H ;T1装入初值1SCPL,0.5HZ MOV TL1,#0BEH

;实现电子计时器进制要求

14

DJNZ R4,INCSEC1 ;个位秒每秒自加,每10次归零循环 MOV SEC1,#00H MOV R4,#0AH

DJNZ R5,INCSEC2 ;十位秒每十秒自加,每6次归零循环 MOV SEC2,#00H MOV R5,#06H

DJNZ R6,INCMIN1 ;个位分钟60秒自加,每10次归零循环 MOV MIN1,#00H MOV R6,#0AH

DJNZ R7,INCMIN2 ;十位分钟10分钟自加,每6次归零循环 MOV MIN2,#00H MOV R7,#06H JMP DIV20S

INCSEC1:INC SEC1 ;数码管第0位显示的数字加1 JMP DIV20S

INCSEC2:INC SEC2 ;数码管第1位显示的数字加1 JMP DIV20S

INCMIN1:INC MIN1 ;数码管第2位显示的数字加1 JMP DIV20S

INCMIN2:INC MIN2 ;数码管第3位显示的数字加1 DIV20S:DJNZ R0,RET_DIV20S;20s MOV R0,#14H

;R0分频,产生20s计时

JB OVER,RET_DIV20S ;OVER为1时,不根据时间自动切换模式 CJNE A,#02H,NOBEEP

SETB BEEP ;响喇叭 LCALL DELAY0_5 ;延迟

CLR BEEP ;关闭喇叭

NOBEEP:CJNE A,#03H,NEEDINC ;自动切换模式下,A小于03h时需要自加完成20s切换模式的功能 SETB OVER ;A为03时不再按时间自动切换模式 SETB TF0 ;立刻刷新数码管显示的计时数 JMP RET_DIV20S NEEDINC:INC A ;A作为模式标志参量,自加切换模式

RET_DIV20S:RETI

;********外部中断模块***************************************** INT0: INC A ANL A,#03H ;A在00h~03h间循环变化 SETB OVER

;关闭自动切换

15


单片机实验3(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2019-2025年中国血液净化行业市场运营模式分析研究报告(目录)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: