基于51单片机的计算器设计.docx
- 文档编号:28153434
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:13
- 大小:78.23KB
基于51单片机的计算器设计.docx
《基于51单片机的计算器设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的计算器设计.docx(13页珍藏版)》请在冰豆网上搜索。
基于51单片机的计算器设计
基于51单片机的计算器设计
1、实验要求
实现99以内的加减乘除的运算并将运算结果显示出来,硬件部分由一个51单片机芯片,共阴极数码管,译码器等组成。
2、实验目的
1、掌握键盘和显示器的接口方法和编程方法。
2、掌握键盘扫描和八段码显示器的工作原理。
3、灵活运用键盘显示程序实现其它功能。
三、实验电路及连线
1、实验接线
连线
连线孔1
连线2
1
KEY/LED_CS
COS
2、LED电平显示电路
实验仪上装有8只发光二极管及相应驱动电路。
见下图,L0―L7为相应发光二极管驱动信号输入端,该输入端为高电压电平“1”时发光二极管点亮。
我们可以通过P1口对其直接进行控制,点亮或者熄灭发光二极管。
LED电平显示电路
3、键盘及LED显示电路
键盘和LED显示的地址译码见下图,做键盘和LED实验时,需要将KEY/LEDCS接到相应的地址译码上。
位码输出的地址为0X002H,段码输出的地址为0X004H,键盘行码读回的地址为0X001H,此处X是由KEY/LEDCS决定,参见地址译码。
例如KEY/LEDCS接到地址译码的CS0上,那么位码输出的地址就为08002H,段码输出的地址就是08004H,键盘行码读回的地址为08001H。
四、实验说明
本实验使用lap2000实验箱上的一个4*6的小键盘,实验中用到该键盘中的0~9数字键以及A、B、C、D、E、F共十六个键,0~9对应计算器中的10个数字,A、B、C、D、E、F分别对应‘+’、‘—’、‘*’、‘/’、‘=’、‘归零’功能。
程序将键盘上输入的数字转换成十进制数字显示并进行简单运算,将结果以十进制的方式通过LED灯显示出来。
五、实验框图
读键输入子程序框图
键盘显示子程序框图
计算器主程序框图
程序代码:
OUTBITequ08002h;位控制口
OUTSEGequ08004h;段控制口
INequ08001h;键盘读入口
num1equ50h;键盘输入的第一个数字
num2equ55h;键盘输入的第二个数字
sign2equ72h;运算符号
onenumequ73h;进行运算的第一个数
twonumequ74h;进行运算的第二个数
LEDBufequ60h;显示缓冲
ljmpStart
LEDMAP:
;八段管显示码
db3fh,06h,5bh,4fh,66h,6dh,7dh,07h
db7fh,6fh,77h,7ch,39h,5eh,79h,71h
Delay:
;延时子程序
movr7,#0
DelayLoop:
djnzr7,DelayLoop
djnzr6,DelayLoop
ret
DisplayLED:
movr0,#LEDBuf
movr1,#6;共6个八段管
movr2,#00100000b;从左边开始显示
Loop:
movdptr,#OUTBIT
mova,#0
movx@dptr,a;关所有八段管
mova,@r0
movdptr,#OUTSEG
movx@dptr,a
movdptr,#OUTBIT
mova,r2
movx@dptr,a;显示一位八段管
movr6,#1
callDelay
mova,r2;显示下一位
rra
movr2,a
incr0
djnzr1,Loop
ret
TestKey:
movdptr,#OUTBIT
mova,#0
movx@dptr,a;输出线置为0
movdptr,#IN
movxa,@dptr;读入键状态
cpla
anla,#0fh;高四位不用
ret
KeyTable:
;键码定义
db16h,15h,14h,0ffh
db13h,12h,11h,10h
db0dh,0ch,0bh,0ah
db0eh,03h,06h,09h
db0fh,02h,05h,08h
db00h,01h,04h,07h
GetKey:
movdptr,#OUTBIT
movP2,dph
movr0,#Low(IN)
movr1,#00100000b
movr2,#6
KLoop:
mova,r1;找出键所在列
cpla
movx@dptr,a
cpla
rra
movr1,a;下一列
movxa,@r0
cpla
anla,#0fh
jnzGoon1;该列有键入
djnzr2,KLoop
movr2,#0ffh;没有键按下,返回0ffh
sjmpExit
Goon1:
movr1,a;键值=列X4+行
mova,r2
deca
rla
rla
movr2,a;r2=(r2-1)*4
mova,r1;r1中为读入的行值
movr1,#4
LoopC:
rrca;移位找出所在行
jcExit
incr2;r2=r2+行值
djnzr1,LoopC
Exit:
mova,r2;取出键码
movdptr,#KeyTable
movca,@a+dptr
movr2,a
WaitRelease:
movdptr,#OUTBIT;等键释放
clra
movx@dptr,a
movr6,#10
callDelay
callTestKey
jnzWaitRelease
mova,r2
ret
Start:
movsp,#40h
loop3:
clrc;初始化
movnum1,#0
movnum2,#0
movLEDBuf+0,#0
movLEDBuf+1,#0
movLEDBuf+2,#0
movLEDBuf+3,#0
movLEDBuf+4,#0
movLEDBuf+5,#0
MLoop:
callDisplayLED;显示
callTestKey;有键入?
jzMLoop;无键入,继续显示
callGetKey;读入键码
mova,r2;符号键or数字键
xrla,#0ah
jzsign
mova,r2
xrla,#0bh
jzsign
mova,r2
xrla,#0ch
jzsign
mova,r2
xrla,#0dh
jzsign
mova,r2
xrla,#0eh
jzzero
mova,r2
xrla,#0fh
jzequal
mova,num2;按下的数字键
xrla,#0
jzyi
mova,num2
movnum1,a
yi:
movnum2,r2
mova,r2
mova,ledbuf+5
movledbuf+4,a
mova,r2
anla,#0fh
movdptr,#LEDMap
movca,@a+dptr
movLEDBuf+5,a
ljmpMLoop
sign:
;输入第一个运算的数和运算号后
movsign2,r2;存储运算符
mova,num1;将键盘上输入的数字转换成十进制数字并作为运算的第一个数
movb,#10d
mulab
adda,num2
movonenum,a
ljmploop3
equal:
mova,num1;将第二次键盘上输入的数字转换成十进制数字并作为运算的第二个数
movb,#10d
mulab
adda,num2
movtwonum,a
mova,sign2;跳转至相应运算符
xrla,#0ah
jzsum
mova,sign2
xrla,#0bh
jzsub
mova,sign2
xrla,#0ch
jzmu
mova,sign2
xrla,#0dh
jzdv
show:
movb,#10d;将运算结果存入显示缓冲区
divab
movdptr,#LEDMap
movca,@a+dptr
movLEDBuf+4,a
mova,b
movdptr,#LEDMap
movca,@a+dptr
movLEDBuf+5,a
loop1:
;显示出结果
calldisplayled
calltestkey
jzloop1
callgetkey
mova,r2
xrla,#0eh
jzzero
ljmploop1
zero:
ljmploop3
sum:
;加法
mova,onenum
adda,twonum
ljmpshow
sub:
;减法
clrc
mova,onenum
subba,twonum
ljmpshow
mu:
;乘法
mova,onenum
movb,twonum
mulab
ljmpshow
dv:
;除法
mova,onenum
movb,twonum
divab
ljmpshow
end
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 计算器 设计