当前位置:首页 > 电源 > 数字电源
[导读]前面介绍了Keil 软件的使用,从中我们可以看到Keil 的强大功能,不过,对于初学者 来说,还有些不直观,调试过程中看到的是一些数值,并没有看到这些数值所引起的外围电 路的变化,例如数码管点亮、发光管发光等。

前面介绍了Keil 软件的使用,从中我们可以看到Keil 的强大功能,不过,对于初学者
来说,还有些不直观,调试过程中看到的是一些数值,并没有看到这些数值所引起的外围电
路的变化,例如数码管点亮、发光管发光等。为了让初学者更好地入门,笔者利用Keil 提
供的AGSI 接口开发了两块仿真实验板。
这两块仿真板将枯燥无味的数字用形象的图形表达出来,可以使初学者在没有硬件时就能感受到真实的学习环境,降低单片机的入门门槛。图1 是键盘、LED 显示实验仿真板的图,从图中可以看出,该板比较简单,有在P1 口接有8 个发光二管,在P3 口接有4 个按钮,图的右边给出了原理图。

图2 是另一个较为复杂的实验仿真板。在该板上有8 个数码管,16 个按键(接成4*4 的矩阵式),另外还有P1 口接的8个发光管,两个外部中断按钮,一个带有计数器的脉冲发生器等资源,显然,这块板可以完成更多的实验。
一、实验仿真板的安装
这两块仿真实验板实际上是两个dll 文件,名称分别是ledkey.dll 和simboard.dll,安装时只要根据需要将这两个或某一个文件拷贝到keil 软件的c51bin 文件夹中即可。
二、实验仿真板的使用
要使用仿真板,必须对工程进行设置,设置的方法是点击Project->Option for Target‘Target1’打开对话框,然后选中Debug 标签页,在Dialog :Parameter:后的编缉框中输入-d 文件名。例如要用ledkey.dll(即第一块仿真板)进行调试,就输入-dledkey,如图3所示,输入完毕后点击确定退出。编译、连接完成后按CTRL+F5 进入调试,此时,点击菜
单Peripherals,即会多出一项“键盘LED 仿真板(K)”,选中该项,即会出现如图1 的界面,

键盘、LED 显示实验仿真板


图2 单片机实验仿真板

同样,在设置时如果输入-dsimboard 则能够调出如
图2 的界面。
第一块仿真板的硬件电路很简单,电路图已在板上,第二块板实现的功能稍复杂,其键盘和数码
显示管部份的电路原理图如图4 所示。下表给出了常用字形码,读者也可以根据图中的接线自行写出
其它如A、B、C、D、E、F 等的字形码。 除了键盘和数码管以外,P1 口同样也接有8 个发光二极管,连接方式与图1 相同;脉冲发生器是接入T0 即P3.4 引脚。
0c0h 0f9h 0a4h 0b0h 99h 92h 82h 0f8h 80h 90h 0FFH
0 1 2 3 4 5 6 7 8 9 消隐
三、实例调试
以下以一个稍复杂的程序为例,说明键盘、LED 显示实验仿真板的使用。该程序实现
的是可控流水灯,接P3.2 的键为开始键,按此键则灯开始流动(由上而下),接P3.3 的键
为停止键,按此键则停止流动,所有灯暗,接P3.4 的键为向上键,按此键则灯由上向下流
动,接P3.5 的键为向下键,按此键则灯由下向上流动。
例8:
UpDown BIT 00H ;上下行标志
StartEnd BIT 01H ;起动及停止标志
LAMPCODE EQU 21H ;存放流动的数据代码
ORG 0000H
AJMP MAIN
ORG 30H
MAIN:
MOV SP,#5FH
MOV P1,#0FFH
CLR UpDown ;启动时处于向上的状态
h g f e
P0.7
P0.0
P0.5
P0.4
P0.7
P0.6
d c b a
P0.3
P0.2
P0.0
P0.1 P2.7
P2.0
P2.7
P2.6
P2.5
P2.4
P2.3
P2.2
P2.1
P2.0 驱

P3.0
P3.1
P3.2
P3.5
P3.3
P3.4
P3.6
P3.7
2 3
6 7
A B
E F
0 1
4 5
8 9
VCC C D 89C51

[!--empirenews.page--]

图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 口长期处于低电平时,你就不必一直用手按着鼠标的左键啦。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

南京2023年9月16日 /美通社/ -- 今日,由中国 "双一流"建设高校南京医科大学、全球基因测序和芯片技术的领导者因美纳与"Nature Research Custom Media&q...

关键字: IO BSP GO OV

2023年中国市场薪资增长率(不包含冻薪)为4.9%,预计2024年薪资增长率(不包含冻薪)为5.0%,在亚太地区处于中位水平。 2023年薪资增长水平最高的行业是高科技行业,为5.6%。生命科学行业2024年...

关键字: BSP CONTENT PS OV

(全球TMT2023年8月28日讯)激光雷达解决方案提供商Innovusion图达通与面向长途干线物流市场的智能驾驶领跑者千挂科技联合宣布,双方正式达成战略合作。未来,Innovusion的图像级超远距激光雷达将融入千...

关键字: 激光雷达 自动驾驶 OV IO

北京2023年8月25日 /美通社/ -- 全球领先的激光雷达解决方案提供商Innovusion图达通与面向长途干线物流市场的智能驾驶领跑者千挂科技联合宣布,双方正式达成战略合作。未来,Innovusion的图像级超远距...

关键字: SI IO OV 智能驾驶

上海2023年8月15日 /美通社/ -- 专注于泌尿生殖系统肿瘤的全球化创新药公司亚虹医药(股票代码:688176.SH)宣布,其代理的Uro-G及Uro-V一次性膀胱镜系统注册申请近日已获中国香港特别行政区政府卫生署...

关键字: 医疗器械 OV VI 内窥镜

比利时布鲁塞尔2023年3月10日 /美通社/ -- 近期,欧陆集团公布2022年全年财报财报,主要亮点如下: 全年营收67.12亿欧元 核心业务收入的有机增长5.8%(不包括新冠测试和试剂类收入) EB...

关键字: 可持续发展 BSP 数字化 OV

美国罗克维尔和中国苏州2023年2月28日 /美通社/ -- 信达生物制药集团(香港联交所股票代码:01801),一家致力于研发、生产和销售肿瘤、自身免疫、代谢、眼科等重大疾病领域创新药物的生物制药公司,宣布其自主研发的...

关键字: AMD BSP OV 信号

上海2023年2月28日 /美通社/ -- 云顶新耀(HKEX 1952.HK),一家专注于创新药及疫苗开发、制造和商业化的生物制药公司,今日在其位于浙江嘉善的全球生产基地项目暨mRNA产业化基地举行盛大的启动仪式,其先...

关键字: BSP VI OV EV

ISM3312是一款具有高选择性的3CLpro抑制剂,其新颖的分子结构是由生成化学平台Chemistry42基于冠状病毒主蛋白酶结构全新生成的化合物优化而来。 与现有同靶点药物相比,ISM3312具有更广谱的抗...

关键字: ISM 人工智能 OV RS

中国上海2023年2月21日 /美通社/ -- 专注于泌尿生殖系统肿瘤的全球化创新药公司亚虹医药(股票代码:688176.SH)宣布,其代理的Uro-G一次性使用手持式电子膀胱内窥镜导管注册申请已获中国国家药品监督管理局...

关键字: OV 内窥镜 RS FDA
关闭
关闭