导航:首页 > 操作系统 > 单片机显示计算器

单片机显示计算器

发布时间:2023-09-06 06:39:29

‘壹’ 51单片机为基础用汇编语言编写用数码管显示一个同时有"加""减""乘""除"法功能的计算器程序,急用参考

ORG 0000H


LJMP MAIN


ORG 0100H


MAIN:MOV SP,#7EH


MOV 22H,#00H


CLR P2.0


CLR P2.3


MOV 20H,#00H


MOV 21H,#00H


MOV 30H, #00H


MOV 31H, #00H


MOV 32H, #00H ;初始化


SU: MOV 7DH,#0FFH


MOV 7EH,#0FFH


MOV 7FH,#0FFH


KEYI:ACALL KS1


CJNE A,#0F0H,LK1


ACALL DIR


AJMP KEYI


LK1:ACALL DIR


ACALL DIR


ACALL KS1


CJNE A, #0F0H,LK2


ACALL DIR


AJMP KEYI


LK2: ACALL KS1


MOV R2,A


ORL A,#0FH


MOV P0,A


ANL A,#0FH


ADD A,R2 ;键特征值


CJNE A,#0EEH,JZHI1


MOV A,#00H


PUSH ACC


JZHI1: CJNE A,#0DEH,JZHI2


MOV A,#01H


PUSH ACC


JZHI2: CJNE A,#0BEH, JZHI3


MOV A,#02H


PUSH ACC


JZHI3: CJNE A,#7EH,JZHI4


MOV A,#03H


PUSH ACC


JZHI4: CJNE A, #0EDH, JZHI5


MOV A,#04H


PUSH ACC


JZHI5: CJNE A,#0DDH, JZHI6


MOV A, #05H


PUSH ACC


JZHI6: CJNE A,#0BDH, JZHI7


MOV A, #06H


PUSH ACC


JZHI7: CJNE A,#07DH, JZHI8


MOV A, #07H


PUSH ACC


JZHI8: CJNE A,#0EBH, JZHI9


MOV A, #08H


PUSH ACC


JZHI9: CJNE A,#0DBH, JZHI10


MOV A, #09H


PUSH ACC


JZHI10: CJNE A,#0BBH, JZHI11


MOV 20H,#01H


JZHI11: CJNE A,#07BH,FAN


MOV 21H, #01H


LCALL GMI


SETB P2.2 ;灭绿灯


LJMP SU ;改密


FAN: MOV A, 81H


CJNE A,#7FH, KEYI


JNB (20H).0, KEYITMP


MOV 20H,#00H


JBC (21H).0,LOOP


POP ACC


CJNE A,32H,NOTE


MOV 7FH,A


POP ACC


CJNE A,31H,NOTE


MOV 7EH,A


POP ACC


CJNE A,30H,NOTE


MOV 7DH,A


CLR P2.2


KEYITMP:LJMP KEYI


NOTE:LCALL BAOJ ;NOT是保留字不能做标号


SUTMP:LJMP SU


BAOJ:MOV SP,#7EH


INC 22H


JNB (22H).1, SUTMP


CLR P2.1


SETB P2.3


ACALL DELY1


CPL P2.1


CPL P2.3


MOV 22H,#00H


RET


GMI:JNB P2.2,SUTMP


LOOP:POP 32H


POP 31H


POP 30H


RET


DIR:MOV R0,#7DH


MOV R3,#01H


LD1: MOV A,@R0


MOV P1,A


MOV P3,R3


LCALL DELY


INC R0


MOV A,R3


JB ACC.2,LD2


RL A


MOV R3,A


SJMP LD1


LD2:RET ;显示


DELY:MOV R7,#249


DL:DJNZ R7,DL


RET ;1ms延时


DELY1:MOV R5,#200


MOV R4,#50


LOOP1:MOV R3,#248


NOP


LOOP2:DJNZ R3,LOOP2


DJNZ R5,LOOP1


DJNZ R4,LOOP1


RET ;10s延时


KS1:MOV P0,#0F0H


MOV A,P0


ANL A, #0F0H


RET ;键是否按下


end


‘贰’ 如何使用51单片机1602液晶显示和按键实现进制转换计算器设计

8位AD,最大255; uchar num; num=AD_receive();//把AD采集回来的数据保存 write_com(0x80);//1602从0x80开始显示数据 write_data(num/100+0x30); //显示字符百位,后面以此类推 write_data(num%100/10+0x30);//十位数 write_data(num%10+0x30);//个位数 至于1602的驱动程序,网上多得是,找找就有了

‘叁’ 单片机做计算器的程序

1、直接调用库函数。

‘肆’ 怎样用51单片机做计算器啊

1、硬件仿真图

4、程序源代码

#include <reg51.h>#include <intrins.h>

#include <ctype.h>

#include <stdlib.h>

#define uchar unsigned char

#define uint unsigned int

uchar operand1[9], operand2[9];

uchar operator;

void delay(uint);

uchar keyscan();

void disp(void);

void buf(uint value);

uint compute(uint va1,uint va2,uchar optor);

uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99,

0x92,0x82,0xf8,0x80,0x90,0xff};

uchar dbuf[8] = {10,10,10,10,10,10,10,10};

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

uchar keyscan()

{

uchar skey;

P1 = 0xfe;

while((P1 & 0xf0) != 0xf0)

{

delay(3);

while((P1 & 0xf0) != 0xf0)

{

switch(P1)

{

case 0xee: skey = '7'; break;

case 0xde: skey = '8'; break;

case 0xbe: skey = '9'; break;

case 0x7e: skey = '/'; break;

default: skey = '#';

}

while((P1 & 0xf0) != 0xf0)

;

}

}

P1 = 0xfd;

while((P1 & 0xf0) != 0xf0)

{

delay(3);

while((P1 & 0xf0) != 0xf0)

{

switch(P1)

{

case 0xed: skey = '4'; break;

case 0xdd: skey = '5'; break;

case 0xbd: skey = '6'; break;

case 0x7d: skey = '*'; break;

default: skey = '#';

}

while((P1 & 0xf0) != 0xf0)

;

}

}

P1 = 0xfb;

while((P1 & 0xf0) != 0xf0)

{

delay(3);

while((P1 & 0xf0) != 0xf0)

{

switch(P1)

{

case 0xeb: skey = '1'; break;

case 0xdb: skey = '2'; break;

case 0xbb: skey = '3'; break;

case 0x7b: skey = '-'; break;

default: skey = '#';

}

while((P1 & 0xf0) != 0xf0)

;

}

}

P1 = 0xf7;

while((P1 & 0xf0) != 0xf0)

{

delay(3);

while((P1 & 0xf0) != 0xf0)

{

switch(P1)

{

case 0xe7: skey = '$'; break;

case 0xd7: skey = '0'; break;

case 0xb7: skey = '='; break;

case 0x77: skey = '+'; break;

default: skey = '#';

}

while((P1 & 0xf0) != 0xf0)

;

}

}

return skey;

}

void main()

{

uint value1, value2, value;

uchar ckey, cut1 = 0, cut2 = 0;

uchar operator;

uchar i, bool = 0;

init:

buf(0);

disp();

value = 0;

cut1 = cut2 = 0;

bool = 0;

for(i = 0;i < 9;i++)

{

operand1[i] = '';

operand2[i] = '';

}

while(1)

{

ckey = keyscan();

if(ckey != '#')

{

if(isdigit(ckey))

{

switch(bool)

{

case 0:

operand1[cut1] = ckey;

operand1[cut1+1] = '';

value1 = atoi(operand1);

cut1++;

buf(value1);

disp();

break;

case 1:

operand2[cut2] = ckey;

operand2[cut2+1] = '';

value2 = atoi(operand2);

cut2++;

buf(value2);

disp();

break;

default: break;

}

}

else if(ckey=='+'||ckey=='-'||ckey=='*'||ckey=='/')

{

bool = 1;

operator = ckey;

buf(0);

dbuf[7] = 10;

disp();

}

else if(ckey == '=')

{

value = compute(value1,value2,operator);

buf(value);

disp();

while(1)

{

ckey = keyscan();

if(ckey == '$')

goto init;

else

{

buf(value);

disp();

}

}

}

else if(ckey == '$')

{ goto init;}

}

disp();

}

}

uint compute(uint va1,uint va2,uchar optor)

{

uint value;

switch(optor)

{

case '+' : value = va1+va2; break;

case '-' : value = va1-va2; break;

case '*' : value = va1*va2; break;

case '/' : value = va1/va2; break;

default : break;

}

return value;

}

void buf(uint val)

{

uchar i;

if(val == 0)

{

dbuf[7] = 0;

i = 6;

}

else

for(i = 7; val > 0; i--)

{

dbuf[i] = val % 10;

val /= 10;

}

for( ; i > 0; i--)

dbuf[i] = 10;

}

void disp(void)

{

uchar bsel, n;

bsel=0x01;

for(n=0;n<8;n++)

{

P2=bsel;

P0=table[dbuf[n]];

bsel=_crol_(bsel,1);

delay(3);

P0=0xff;

}

}

(4)单片机显示计算器扩展阅读:

PROTEUS 是单片机课堂教学的先进助手

PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。

它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。

课程设计、毕业设计是学生走向就业的重要实践环节。由于PROTEUS提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养学生实践精神、创造精神的平台

随着科技的发展,“计算机仿真技术”已成为许多设计部门重要的前期设计手段。它具有设计灵活,结果、过程的统一的特点。可使设计时间大为缩短、耗资大为减少,也可降低工程制造的风险。相信在单片机开发应用中PROTEUS也能茯得愈来愈广泛的应用。

使用Proteus 软件进行单片机系统仿真设计,是虚拟仿真技术和计算机多媒体技术相结合的综合运用,有利于培养学生的电路设计能力及仿真软件的操作能力;

在单片机课程设计和全国大学生电子设计竞赛中,我们使用 Proteus开发环境对学生进行培训,在不需要硬件投入的条件下,学生普遍反映,对单片机的学习比单纯学习书本知识更容易接受,更容易提高。

实践证明,在使用 Proteus 进行系统仿真开发成功之后再进行实际制作,能极大提高单片机系统设计效率。因此,Proteus 有较高的推广利用价值。

‘伍’ 单片机,设计一个计算器,能够自定义按键键值,并能通过串口调试助手将执行结果显示到计算机上。

你的这个题目范围太大了。限于篇幅无法在细节上一一讲明白。

主要的思路如下:

  1. 硬件设计:单片机需要能够检测键是否按下,就需要搭建电路。通常情况下按键有两种方式:一种是直接将键通过电阻电容连接到单片机IO引脚上,这种方式适用于按键数量不太多或单片机引脚数量足够多的情况。另外一种是将键纵横排列成按键网络,通过扫描的方法检测按下的是哪个键,这种适用于键数量较多,或IO引脚不足的情况,比如你的图上有4X4=16键,直接连接的方法需要16个IO口,网络的话,只需要4+4=8个IO口即可完成。具体哪种根据需要来,具体电路网上搜索。

    另外就是通讯电路,这个网上有好多RS232的,不再细说

  2. 算法设计

    由于是键盘,除了检测到哪个键按下外,还应该包含一定的消除抖动的能力,防止按下一个键却触发好多次同样的按下此键的情况。

    另外需要在单片机内存中建立“键-键值”的对应关系表,因为你要求能够自定义键值。

  3. 通讯

    你没有提到通讯是实时发送还是按下一个键,比如回车键后才发送。

    由于键盘的速度比较低,为了简单,可以采用检测到一个键按下后就发送一个键的代码。

    根据你所采用的单片机的不同,所用的对通讯的初始化、发送等代码也有所不同。具体不再细说。


‘陆’ 单片机的简易计算器

单片机计算器
基本功能介绍:
简单的加减乘除的运算。
时间显示功能,而且能实现计算器模块和时间模块之间的任意切换。
按键音却换功能。
原理;
多功能单片机计算器是一个实现加减乘除的和时间功能的计算器,主要的硬件组成由,一个AT89s52单片机芯片,一个LED液晶(1602液晶),一个4*4键盘,和4个特殊功能按键。
一个时钟芯片(DS1302),一个蜂鸣器。
单个硬件模块个的介绍
AT89S52:
主要控制芯片,它是由8kflash,256BRAM,6个中断源,详情参考AT89S52的技术文档.
1602液晶
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”,而且可以实现一些复杂的字符操作:1:清显示,光标复位到地址00H位置,2:光标和显示模式设置 光标移动方向,高电平右移,低电平左移,屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效 3:显示开关控制,控制整体显示的开与关,高电平表示开显示,低电平表示关显示,控制光标的开与关,高电平表示有光标,低电平表示无光标,控制光标是否闪烁,高电平闪烁,低电平不闪烁4:光标或显示移位,高电平时移动显示的文字,低电平时移动光标5:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符(高低电平在相应的指令上实现),详情可参考1602的技术文档。
1602采用标准的16脚接口: 第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 第7~14脚:D0~D7为8位双向数据线。 第15~16脚:空脚。
1602液晶和单片机的接法

4*4键盘,和4个特殊功能按键

K(切换键) No(复位键)
(时间设置键) C(清除键) +
1 2 3 —
4 5 6 *
7 8 9 %(除)
—/+ 0 。 =
前4个为特殊功能键,
后十六个采用键盘扫描接法,

扫描原理:
首先给p3口赋11111110(0xfe),然后再读取p3口的值,如果为11101110(0xee)说明是第一排第一个被按下,如果是11011110(0xde)说明是第一排第二个被按下,如果是10111110(0xbe)说明是第一排第三个被按下,如果是0111110(0x7e)说明是第一排第四个被按下,
判断二三四排的按键,都采用同样的方法,只要分别给P3口赋不同的值即可,在读取p3口的值,在判断。用这样的方法即可实现4*4键盘的扫描,只要有键按下,就可以知道是那个键按下,通过这种方法可大大节省单片机的io口的资源。详情可参考网上的键盘扫描原理
时钟芯片(DS1302)
DS1302 是DALLAS 公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31 字节静态RAM ,通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM 指示决定采用24 或12 小时格式DS1302 与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线1 RES 复位2 I/O 数据线3 SCLK串行时钟时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式
实时时钟具有能计算2100 年之前的秒分时日日期星期月年的能力还有闰年调整的能力(详情可参考DS1302的技术文档
管脚描述
X1 X2 32.768KHz 晶振管脚
GND 地
RST 复位脚
I/O 数据输入/输出引脚
SCLK 串行时钟
Vcc1,Vcc2 电源供电管脚

计算器工作大概流程

‘柒’ 单片机两个计数显示器后面不显示

液晶屏原因。单片机由线路和显示屏组成,两个计数显示器后滚姿面拆备弊不显示,说明线路没有问题,那就是液晶屏原因,只需要更换新的液晶屏,重新打开即可。单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系旅族统集成到一个芯片上。

阅读全文

与单片机显示计算器相关的资料

热点内容
华为云服务器登录密码和账号 浏览:154
中世纪java程序员 浏览:786
什么开发引擎使用python 浏览:176
sh脚本运行命令 浏览:316
广联达加密锁怎么看到期 浏览:172
cad轨迹命令 浏览:979
同事刷到女程序员自媒体视频 浏览:571
校验算法的缺点是什么 浏览:717
PHP商品分类功能实现 浏览:330
php取字符串中间 浏览:432
程序员经常用工具 浏览:836
降服主力指标源码主图 浏览:502
python实用库 浏览:692
电脑默认7个文件夹 浏览:13
新唐单片机安装c51后编译错误 浏览:532
红包源码引流神器 浏览:235
学生初中毕业撕书解压 浏览:748
命令方块刷铜点教学 浏览:691
php邮件订阅系统 浏览:998
柱梁底加密箍间距 浏览:31