单片机 数码管显示键盘输入 计算器程序 程序中

单片机 数码管显示键盘输入 计算器程序 程序中,第1张

兄弟,不好意思,我这个程序可以计算8位数,完成加减乘除,没有小数点

、显示负数的功能,只能帮到这了。

#include

#include

#include

#pragma

noregparms

#define

g

dbyte[0x30]

#define

s

dbyte[0x31]

#define

b

dbyte[0x32]

#define

q

dbyte[0x33]

#define

w

dbyte[0x34]

#define

sw

dbyte[0x35]

#define

bw

dbyte[0x36]

#define

qw

dbyte[0x37]

#define

flag

dbyte[0x38]

#define

ww

dbyte[0x39]

#define

var

dbyte[0x40]

unsigned

long

data

a0

_at_

0x42;

unsigned

long

data

a1

_at_

0x46;

unsigned

long

data

a2

_at_

0x50;

void

count

()

{

unsigned

long

temp;

if(var>=0&&var<=9)

{

if(ww==1)

{

qw=bw=sw=w=q=b=s=g=0;

g=var;

ww=0;

}

else

{

qw=bw;

bw=sw;

sw=w;

w=q;

q=b;

b=s;

s=g;

g=var;

}

}

if(var>=0&&var<=0x0d)

{

a0=qw10000000+bw1000000+sw100000+w10000+q1000+b100+s10+g;

if(var==0)flag=1;//加法运算标志

if(var==0x0b)flag=2;//减法运算标志

if(var==0x0c)flag=3;//乘法运算标志

if(var==0x0d)flag=4;//除法运算标志

ww=1;

}

if(var==0x0e)

{

a1=qw10000000+bw1000000+sw100000+w10000+q1000+b100+s10+g;

if(flag==1)a2=a1+a0;

if(flag==2)a2=a0-a1;

if(flag==3)a2=a1a0;

if(flag==4)a2=a0/a1;

g=a2%10;

temp=a2/10;

s=temp%10;

temp=temp/10;

b=temp%10;

temp=temp/10;

q=temp%10;

temp=temp/10;

w=temp%10;

temp=temp/10;

sw=temp%10;

temp=temp/10;

bw=temp%10;

qw=temp/10;

}

if(var==0x0f)

{

qw=bw=sw=w=q=b=s=g=var=flag=0;

}

}

#include <reg52h>

#define uchar unsigned char

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

sbit dula=P2^6;

sbit wela=P2^7;

uchar keyscan();

uchar num,temp,num1;

void delay(uchar z)

{

int x,y;

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

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

}

void main()

{

num=17;

dula=1;

P0=0;

dula=0;

wela=1;

P0=0xc0;

wela=0;

while(1)//每次按下都是 所以while循环

{

num1=keyscan();

dula=1;

P0=table[num1-1];

dula=0;

}

}

uchar keyscan()

{

P3=0xfe;

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0); //必须用if啊

{

delay(5);//消抖再判断

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0) //必须用if啊

{

temp=P3;

switch(temp)

{

case 0xee:num=1;break;

case 0xde:num=2;break;

case 0xbe:num=3;break;

case 0x7e:num=4;break;

}

while(temp!=0xf0)// 松手检测 松手数字才变化 必须用while 不松手不显示 不松手下一排键盘没用 一直在while内循环 放在第二个if内

{

temp=P3;

temp=temp&0xf0;

}

}

}

P3=0xfd;

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0);

{

delay(5);//消抖再判断

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0);

{

temp=P3;

switch(temp)

{

case 0xed:num=5;break;

case 0xdd:num=6;break;

case 0xbd:num=7;break;

case 0x7d:num=8;break;

}

while(temp!=0xf0)//松手检测 松手数字才变化 必须用while

{

temp=P3;

temp=temp&0xf0;

}

}

}

P3=0xfb;

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0);

{

delay(5);//消抖再判断

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0);

{

temp=P3;

switch(temp)

{

case 0xeb:num=9;break;

case 0xdb:num=10;break;

case 0xbb:num=11;break;

case 0x7b:num=12;break;

}

while(temp!=0xf0)//松手检测 松手数字才变化 必须用while

{

temp=P3;

temp=temp&0xf0;

}

}

}

P3=0xf7;

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0);

{

delay(5);//消抖再判断

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0);

{

temp=P3;

switch(temp)

{

case 0xe7:num=13;break;

case 0xd7:num=14;break;

case 0xb7:num=15;break;

case 0x77:num=16;break;

}

while(temp!=0xf0)//松手检测 松手数字才变化 必须用while

{

temp=P3;

temp=temp&0xf0;

}

}

}

return num;

}

以上就是关于单片机 数码管显示键盘输入 计算器程序 程序中全部的内容,包括:单片机 数码管显示键盘输入 计算器程序 程序中、求用52单片机实验板实现4*4键盘及数码管动态扫描显示的程序、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9807099.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存