单片机课程设计简易计算器范文Word文件下载.docx

上传人:b****6 文档编号:21809814 上传时间:2023-02-01 格式:DOCX 页数:17 大小:1.47MB
下载 相关 举报
单片机课程设计简易计算器范文Word文件下载.docx_第1页
第1页 / 共17页
单片机课程设计简易计算器范文Word文件下载.docx_第2页
第2页 / 共17页
单片机课程设计简易计算器范文Word文件下载.docx_第3页
第3页 / 共17页
单片机课程设计简易计算器范文Word文件下载.docx_第4页
第4页 / 共17页
单片机课程设计简易计算器范文Word文件下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

单片机课程设计简易计算器范文Word文件下载.docx

《单片机课程设计简易计算器范文Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机课程设计简易计算器范文Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。

单片机课程设计简易计算器范文Word文件下载.docx

当进行除法运算时,除的的数据要看接口P0.7接高还是低电频,低电频则结果为几点几,为高电频则几十几。

其它运算直接看数据即可。

3、电路原理与电路图

3.1电路原理

单片机最小系统。

一个AT89C51单片机做为控制电路,运用其P0、P1口来控制数码管和键盘,通过P0和P2口来显示键值(0~9)。

通过P1口来控制键盘。

3.2电路原理图

 

图3.1电路原理图

4、流程图与算法描述

4.1流程图

图4.1主程序流程图

图4.2延时子程序流程图

4.2算法描述

1、设计一个延时子程序,延时0.5s。

本程序通过两个DJNZ的语句来实现。

延时程序的代码段如下:

DELAY:

MOVR7,#100D

DEL1:

MOVR6,#250D

DEL2:

MOVR5,#10D

DJNZR5,$

DJNZR6,DEL2

DJNZR7,DEL1

RET

2、仅实现十进制的加减乘除运算。

CJNE是判断两个数是否相等,不想等则转移,代码段如下:

M0:

CJNER1,#10D,M1

LJMPL1

M1:

CJNER1,#11D,M2

M2:

CJNER1,#12D,M3

LJMPL1

M3:

CJNER1,#13D,M4

M4:

CJNER1,#14D,M5

M5:

CJNER1,#15D,M6

LJMPL1

M6:

RET;

返回重新按入新的键号

5、仿真结果

5.1仿真结果

1、加法仿真如下:

(1加2)

图5.1加法仿真结果图

图5.2加法仿真结果图

2、减法仿真如下:

(2减3)

图5.3减法仿真结果图

图5.4减法仿真结果图

3、乘法仿真如下:

(3乘以2)

图5.5乘法仿真结果图

图5.6乘法仿真结果图

4、除法仿真如下:

(2除以4)

图5.7除法仿真结果图

图5.8除法仿真结果图

5、复位仿真如下:

图5.10复位仿真结果图

6、源程序

ORG0000H

L1:

LCALLSCAN

MOV40H,32H;

将键号保存在40H

MOVR1,40H;

暂存在R1

LCALLM0

LCALLXY1

MOVP0,#0FFH;

使P0口置1

LCALLSCAN

MOV41H,32H;

将键号保存在41H

MOVR1,41H;

LCALLXY2

L2:

MOV42H,32H

MOVR7,42H

CJNER7,#10D,L3;

是否进行加法运算

MOVA,40H

ADDA,41H

MOVB,#10D

DIVAB;

商存在A中即十位,余数存在B中即个位

CJNEA,#00H,L8;

判断十位是否为0,不为0跳转

MOVP0,#0FFH;

置1不显示

LJMPL9

L8:

MOV32H,A

LCALLXY2;

商非0则调用显示十位数

L9:

MOV32H,B

LCALLXY1;

调用显示个位数

LJMPL1

l3:

CJNER7,#11,l4;

是否进行减法运算

SUBBA,41H;

结果存在A

JBACC.7,N1;

判断正负

MOV32H,A

MOVP0,#0FFH

LCALLXY1;

减法结果为正

LJMPL1

N1:

MOVP0,#0BFH;

显示负号

MOVA,41H

SUBBA,40H

ADDA,#1D

MOV32H,A

LCALLXY1;

显示结果

l4:

CJNER7,#12,l5;

是否进行乘法运算

MOVB,41H

MULAB;

结果存在A中

MOV50H,A

商存在A中即十位,余数存在B中即个位

CJNEA,#00H,L10;

判断十位是否为0,不为0跳转

MOVP0,#0FFH;

置1不显示

LJMPL11

L10:

L11:

LCALLXY1

l5:

CJNER7,#13,l6;

是否进行除法运算

MOVB,41H

DIVAB;

X/Y除法

MOVR6,B

CJNER6,#00H,L12;

判断余数是否为0,不为0跳转

置1不显示十位

MOV32H,A

LJMPL13

L12:

LCALLXY2;

p0显示小数点前的数

CLRP0.7;

有小数点

MOVA,B

余数的十倍

DIVAB;

余数的十倍再除以除数

MOV32H,A;

结果保留小数点后一位

p2显示小数点后的数

L13:

LJMPL1

l6:

CJNER7,#0D,L7

CJNER7,#1D,L7;

屏蔽十进制,实现加减乘除

CJNER7,#2D,L7

CJNER7,#3D,L7

CJNER7,#4D,L7

CJNER7,#5D,L7

CJNER7,#6D,L7

CJNER7,#7D,L7

CJNER7,#8D,L7

CJNER7,#9D,L7

CJNER7,#14D,L7;

屏蔽E、F

CJNER7,#15D,L7

L7:

LJMPL2

SCAN:

MOVP1,#0F0H;

P1口高4位置1

JNBP1.4,Y0;

判断Y0列是否有键按下,有就跳至Y0

JNBP1.5,Y1

JNBP1.6,Y2

JNBP1.7,Y3

LJMPSCAN;

无键按下继续扫描

Y0:

MOV31H,#00H;

列线Y0有键按下

MOVP1,#0FEH

JNBP1.4,X0;

判断X0横是否有键按下

MOVP1,#0FDH

JNBP1.4,X1;

判断X1横是否有键按下

MOVP1,#0FBH

JNBP1.4,X2;

判断X2横是否有键按下

MOVP1,#0F7H

JNBP1.4,X3;

判断X3横是否有键按下

LJMPY0;

返回继续判断

Y1:

MOV31H,#01H;

列线Y1有键按下

MOVP1,#0FEH

JNBP1.5,X0

JNBP1.5,X1

JNBP1.5,X2

MOVP1,#0F7H

JNBP1.5,X3

LJMPY1

Y2:

MOV31H,#02H;

列线Y2有键按下

JNBP1.6,X0

MOVP1,#0FDH

JNBP1.6,X1

JNBP1.6,X2

JNBP1.6,X3

LJMPY2

Y3:

MOV31H,#03H;

列线Y3有键按下

JNBP1.7,X0

JNBP1.7,X1

JNBP1.7,X2

JNBP1.7,X3

LJMPY3

X0:

MOV30H,#00H;

行线X0有键按下

LCALLDELAY;

0.5s延时消除抖动

LJMPJS;

跳转键值计算程序

X1:

MOV30H,#01H;

行线X1有键按下

LCALLDELAY

LJMPJS

X2:

MOV30H,#02H;

行线X2有键按下

X3:

MOV30H,#03H;

行线X3键按下

JS:

MOVA,30H;

计算键入的值

MOVB,#04H

MULAB

ADDA,31H

RET

XY1:

MOVA,32H

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVP2,A;

显示第一次按入的键号及结果的个位

XY2:

MOVP0,A;

显示第二次按入的键号及结果的十位

MOVR7,#100D;

延时0.5s子程序

MOVR6,#250D

MOVR5,#10D

DJNZR5,$

DJNZR6,DEL2

DJNZR7,DEL1

CJNER1,#10D,M1;

仅实现十进制的加减乘除运算

CJNER1,#11D,M2

CJNER1,#12D,M3

CJNER1,#13D,M4

CJNER1,#14D,M5

CJNER1,#15D,M6

RET;

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H

DB82H,0F8H,80H,90H,88H,83H

DB0C6H,0A1H,86H,8EH,0FFH

END

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1