首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 维修教程知识 > 电子制作
基于Keil的实验仿真板的使用
来源:本站整理  作者:佚名  2011-05-23 08:48:27




图4 实验仿真板2 数码管和键盘部份的电路图
图3 实验仿真板的设置
Keil 软件实全教程(五)
CLR StartEnd ;启动时处于停止状态
MOV LAMPCODE,#01H ;单灯流动的代码
LOOP: ACALL KEY ;调用键盘程序
JNB F0,LNEXT ;如果无键按下,则继续
ACALL KEYPROC ;否则调用键盘处理程序
LNEXT: ACALL LAMP ;调用灯显示程序
AJMP LOOP ;反复循环,主程序到此结束
;延时程序,键盘处理中调用
DELAY: MOV R7,#100
D1: MOV R6,#100
DJNZ R6,$
DJNZ R7,D1
RET
KEYPROC:
MOV A,B ;从B 寄存器中获取键值
JB ACC.2,KeyStart ;分析键的代码,某位被按下,则该位为1
JB ACC.3,KeyOver
JB ACC.4,KeyUp
JB ACC.5,KeyDown
AJMP KEY_RET
KeyStart:
SETB StartEnd ;第一个键按下后的处理
AJMP KEY_RET
KeyOver:
CLR StartEnd ;第二个键按下后的处理
AJMP KEY_RET
KeyUp:
SETB UpDown ;第三个键按下后的处理
AJMP KEY_RET
KeyDown:
CLR UpDown ;第四个键按下后的处理
KEY_RET:
RET
KEY:
CLR F0 ;清F0,表示无键按下。
ORL P3,#00111100B ;将P3 口的接有键的四位置1
MOV A,P3 ;取P3 的值
ORL A,#11000011B ;将其余4 位置1
CPL A ;取反
JZ K_RET ;如果为0 则一定无键按下
CALL DELAY ;否则延时去键抖
ORL P3,#00111100B
MOV A,P3
ORL A,#11000011B
Keil 软件实全教程(五)
CPL A
JZ K_RET
MOV B,A ;确实有键按下,将键值存入B 中
SETB F0 ;设置有键按下的标志
;以下的代码是可以被注释掉的,如果去掉注释,就具有判断键是否释放的功能,否则
没有
K_RET: ;ORL P3,#00111100B ;此处循环等待键的释放
;MOV A,P3
;ORL A,#11000011B
;CPL A
;JZ K_RET1 ;读取的数据取反后为0 说明键释放了
;AJMP K_RET
;K_RET1:CALL DELAY ;消除后沿抖动
RET
D500MS: ;流水灯的延迟时间
MOV R7,#255
D51: MOV R6,#255
DJNZ R6,$
DJNZ R7,D51
RET
LAMP:
JB StartEnd,LampStart ;如果StartEnd=1,则启动
MOV P1,#0FFH
AJMP LAMPRET ;否则关闭所有显示,返回
LampStart:
JB UpDown,LAMPUP ;如果UpDown=1,则向上流动
MOV A,LAMPCODE
RL A ;实际就是左移位而已
MOV LAMPCODE,A
MOV P1,A
LCALL D500MS
LCALL D500MS
AJMP LAMPRET
LAMPUP:
MOV A,LAMPCODE
RR A ;向下流动实际就是右移
MOV LAMPCODE,A
MOV P1,A
LCALL D500MS
LAMPRET:
RET
END
将程序输入并建立工程文件,设置工程文件,在Debug 标签页中加入“-dLEDkey”,汇
编、连接文件,按CTRl+F5 开始调试,打开仿真板,使用F5 功能键全速运行,可以看到所
Keil 软件实全教程(五)
有灯均不亮,点击最上面的按钮,立即会看到灯流动起来了,点击第二个按键,灯将停止流
动,再次点击第一个按钮,使灯流动起来,点击第三个按钮,可以发现灯流动的方向变了,
点击第四个按钮,灯的流动方向又变回来了。如果没有出现所描述的现象,可以使用单步、
过程单步等调试手段进行调试,在进行调试时实验仿真板会随时显示出当前的情况,是不是
非常的直观和方便呢?
下面的一个例子是关于第二块实验仿真板的,演示点亮8 位数码管。例9:
ORG 0000h
JMP MAIN
ORG 30H
MAIN:
MOV SP,#5FH
MOV R1,#08H
MOV R0,#58H ;显示缓冲区首地址
MOV A,#2
INIT:
MOV @R0,A ;初始化显示缓冲区
INC A
INC R0
DJNZ R1,INIT ;将0-7 送显示缓冲区
LOOP:
CALL DISPLAY
JMP LOOP
;主程序到此结束
DISPLAY:
MOV R0,#7FH ;列选择
MOV R7,#08H ;共有8 个字符
MOV R1,#58H ;显示缓冲区首地址
AGAIN:
MOV A,@R1
MOV DPTR,#DISPTABLE
MOVC A,@A+DPTR
MOV P0,A
MOV P2,R0
MOV A,R0
RR A
MOV R0,A
INC R1
DJNZ R7,AGAIN
RET
DISPTABLE: DB 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,0FFH ;字形码表
END
这一程序内部RAM 中58H 到5FH 被当成是显示缓冲区,主程序中用2-9 填充该显示
区,然后调用显示程序显示2-9。这里是用了最简单的逐位显示的方式编写的显示程序。
最后介绍一个小小技巧,将鼠标移入按钮区域,按下左键,按钮显示被按下,不要放开
Keil 软件实全教程(五)
鼠标左键,将光标移出按钮区域,松开左键,可以看到,按钮仍处于按下状态,利用这一功
能,在需要I/O 口长期处于低电平时,你就不必一直用手按着鼠标的左键啦。

上一页  [1] [2] 

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:100,902.30000 毫秒