单片机 十进制计算器.docx

上传人:b****7 文档编号:8673053 上传时间:2023-02-01 格式:DOCX 页数:13 大小:146.84KB
下载 相关 举报
单片机 十进制计算器.docx_第1页
第1页 / 共13页
单片机 十进制计算器.docx_第2页
第2页 / 共13页
单片机 十进制计算器.docx_第3页
第3页 / 共13页
单片机 十进制计算器.docx_第4页
第4页 / 共13页
单片机 十进制计算器.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

单片机 十进制计算器.docx

《单片机 十进制计算器.docx》由会员分享,可在线阅读,更多相关《单片机 十进制计算器.docx(13页珍藏版)》请在冰豆网上搜索。

单片机 十进制计算器.docx

单片机十进制计算器

单片机实验报告四

姓名学号

时间2015.05.14地点B526

实验题目简易十进制计算器

一、实验目的

1.掌握单片机编程和调试方法。

2.掌握键盘、LED显示接口工作原理及编程方法。

二、实验内容

利用MCS-51单片机,设计一个简易十进制计算器,完成一位十进制有符号数的加、减、乘、除运算。

16个按键的安排:

10个数字键(0-9),用于输入运算的数字;5个功能键:

+、-、×、÷、=、清零(符号选择)。

本实验要求显示:

输入的十进制数字及符号,正数不显示符号,负数在数的前面显示“-”;运算符显示(显示字形自定);运算结果显示,包括数字和符号。

三、实验电路连线

 

 

 

四、实验说明

本实验采用动态显示电路,即6个数码管分时循环工作,刷新频率≥25Hz。

键盘采用矩阵式电路,L1-L4作为输出,H1-H4作为输入。

(详细工作原理请参考教材第10章)。

要求所有的程序预先在WAVE仿真调试通过,达到设计要求后下载程序到单片机芯片在实验板上实际运行。

程序的下载由实验室提供编程器统一烧写,单片机芯片由实验室提供,调试完成后交回。

五、实验仪器和设备

PC机、WAVE软件、仿真器、实验板、编程器、电源等。

六、程序流程图及程序

YJEQU50H;结果存放

YJ1EQU51H;中间结果存放

GONGEQU52H;功能键存放

ORG00H

START:

MOVR3,#0;初始化显示为空

MOVGONG,#0

MOV32H,#00H

MOV33H,#00H

MOV34H,#00H

MLOOP:

CALLDISP;调显示子程序

WAIT:

CALLTESTKEY;判断有无按键

JZWAIT

CALLGETKEY;读键

INCR3;按键个数

CJNEA,#0,NEXT1;判断是否数字键

LJMPE1;转数字键处理

NEXT1:

CJNEA,#1,NEXT2

LJMPE1

NEXT2:

CJNEA,#2,NEXT3

LJMPE1

NEXT3:

CJNEA,#3,NEXT4

LJMPE1

NEXT4:

CJNEA,#4,NEXT5

LJMPE1

NEXT5:

CJNEA,#5,NEXT6

LJMPE1

NEXT6:

CJNEA,#6,NEXT7

LJMPE1

NEXT7:

CJNEA,#7,NEXT8

LJMPE1

NEXT8:

CJNEA,#8,NEXT9

LJMPE1

NEXT9:

CJNEA,#9,NEXT10

LJMPE1

NEXT10:

CJNEA,#10,NEXT11;判断是否功能键

LJMPE2;转功能键处理

NEXT11:

CJNEA,#11,NEXT12

LJMPE2

NEXT12:

CJNEA,#12,NEXT13

LJMPE2

NEXT13:

CJNEA,#13,NEXT14

LJMPE2

NEXT14:

CJNEA,#14,NEXT15

LJMPE2

NEXT15:

LJMPE3;判断是否清除键

E1:

CJNER3,#1,N1;判断第几次按键

LJMPE11;为第一个数字

N1:

CJNER3,#2,N2

LJMPE12;为第二个数字

N2:

CJNER3,#3,N3

LJMPE13;为第三个数字

N3:

LJMPE3;第四个数字转溢出

E11:

MOVR4,A;输入值暂存R4

MOV34H,A;输入值送显示缓存

MOV33H,#00H

MOV32H,#00H

LJMPMLOOP;等待再次输入

E12:

MOVR7,A;个位数暂存R7

MOVB,#10

MOVA,R4

MULAB;十位数

ADDA,R7

MOVR4,A;输入值存R4

MOV32H,#00H;输入值送显示缓存

MOV33H,34H

MOV34H,R7

LJMPMLOOP

E13:

MOVR7,A

MOVB,#10

MOVA,R4

MULAB

JBOV,E3;输入溢出

ADDA,R7

JBCY,E3;输入溢出

MOVR4,A

MOV32H,33H;输入值送显示缓存

MOV33H,34H

MOV34H,R7

LJMPMLOOP

E3:

MOVR3,#0;按键次数清零

MOVR4,#0;输入值清零

MOVYJ,#0;计算结果清零

MOVGONG,#0;功能键设为零

MOV32H,#00H;显示清空

MOV33H,#00H

MOV34H,#00H

LJMPMLOOP

E2:

MOV34H,#00H

MOV33H,#00H

MOV32H,#00H

MOVR0,GONG;与上次功能键交换

MOVGONG,A

MOVA,R0

CJNEA,#10,N21;判断功能键

LJMPJIA;"+"

N21:

CJNEA,#11,N22

LJMPJIAN;"-"

N22:

CJNEA,#12,N23

LJMPCHENG;"*"

N23:

CJNEA,#13,N24

LJMPCHU;"/"

N24:

CJNEA,#0,N25

LJMPFIRST;首次按功能键

N25:

LJMPDEN;"="

N4:

LJMPE3

FIRST:

MOVYJ,R4;输入值送结果

MOVR3,#0;按键次数清零

LJMPDISP1;结果处理

JIA:

MOVA,YJ;上次结果送累加器

ADDA,R4;上次结果加输入值

JBCY,N4;溢出

MOVYJ,A;存本次结果

MOVR3,#0;按键次数清零

LJMPDISP1

JIAN:

MOVA,YJ

SUBBA,R4;上次结果减输入值

JBCY,N4;负数溢出

MOVYJ,A

MOVR3,#0

LJMPDISP1

CHENG:

MOVA,YJ

MOVB,A

MOVA,R4

MULAB;上次结果乘输入值

JBOV,N4;溢出

MOVYJ,A

LJMPDISP1

CHU:

MOVA,R4

MOVB,A

MOVA,YJ

DIVAB;上次结果除输入值

MOVYJ,A

MOVR3,#0

LJMPDISP1

DEN:

MOVR3,#0

LJMPDISP1

DISP1:

MOVB,#10

MOVA,YJ;结果送累加器

DIVAB;结果除10

MOVYJ1,A;暂存"商"

MOVA,B;取个位数

MOV34H,A;个位数送显示缓存

MOVA,YJ1

JZDISP11

MOVB,#10

MOVA,YJ1

DIVAB

MOVYJ1,A

MOVA,B

MOV33H,A;十位送显示缓存

MOVA,YJ1

JZDISP11;结果是否为二位数

MOV32H,A;百位数送显示缓存

DISP11:

LJMPMLOOP

DISP:

MOVR0,#34H

DIR1:

MOVDPTR,#SEGTAB

MOVA,@R0

MOVCA,@A+DPTR

MOVP0,A

CJNER0,#34H,DIR2

SETBP2.0

CALLD1MS

CLRP2.0

DECR0

SJMPDIR1

DIR2:

CJNER0,#33H,DIR3

SETBP2.1

CALLD1MS

CLRP2.1

DECR0

SJMPDIR1

DIR3:

SETBP2.2

CALLD1MS

CLRP2.2

RET

D1MS:

MOVR7,#02H

DMS:

MOVR6,#0F0H

DJNZR6,$

DJNZR7,DMS

RET

SEGTAB:

DB0C0H,0F9H,0A4H,0B0H

DB99H,92H,82H,0F8H

DB80H,90H,88H,83H

DB0C6H,0A1H,86H,8EH

TESTKEY:

ACALLDISP

MOVP1,#0FH;读入键状态

MOVA,P1

CPLA

ANLA,#0FH;高四位不用

RET

KEYTABLE:

DB0EEH,0EDH,0DDH,0BDH;键码定义

DB0EBH,0DBH,0BBH,0E7H

DB0D7H,0B7H,0DEH,0BEH

DB07EH,07DH,07BH,077H

GETKEY:

MOVR6,#10;读键子程序

ACALLDELAY

MOVP1,#0FH

MOVA,P1

CJNEA,0FH,K12

LJMPMLOOP

K12:

MOVB,A

MOVP1,#0EFH

MOVA,P1

CJNEA,#0EFH,K13

MOVP1,#0DFH

MOVA,P1

CJNEA,#0DFH,K13

MOVP1,#0BFH

MOVA,P1

CJNEA,#0BFH,K13

MOVP1,#07FH

MOVA,P1

CJNEA,#07FH,K13

LJMPMLOOP

K13:

ANLA,#0F0H

ORLA,B

MOVB,A

MOVR1,#16

MOVR2,#0

MOVDPTR,#KEYTABLE

K14:

MOVA,R2

MOVCA,@A+DPTR

CJNEA,B,K16

MOVP1,#0FH

K15:

MOVA,P1

CJNEA,#0FH,K15

MOVR6,#10

ACALLDELAY

MOVA,R2

RET

K16:

INCR2

DJNZR1,K14

AJMPMLOOP

DELAY:

MOVR7,#10

TS1:

MOVR6,#0FFH

TS2:

NOP

NOP

DJNZR6,TS2

DJNZR7,TS1

RET

END

七、实验报告

1、硬件电路设计(画出电路图),分析电路工作原理;

矩阵键盘的工作原理:

计算器的键盘布局如图所示:

一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。

2、总结

刚开始接到这个计算器的课程设计任务时,因为以前做过类似的题目,于是在脑海中初步构建了编写程序的一些控制程序。

但在编写程序的过程中,遇到了很多问题,因为以前用的是熟悉的C语言,而这次用的是汇编语言,使我发现自己以前学习上存在的不足,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。

还有就是显示符号这个功能没有做出来,还得多多学习单片机知识。

 

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

当前位置:首页 > 高等教育 > 农学

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

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