求51单片机计算器程序,外加仿真图

2023-01-01 17:57

2个回答

#include
#define uchar unsigned char;
uchar LED1,LED2,LED3,LED4;
uchar keyval,calflag,s_dat,d_dat;
uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
unsigned int number,r_dat;

void delay(unsigned int a)
{
unsigned int i,j;
for(i=0;ifor(j=0;j<1000;j++);
}
void dealdat()
{
switch(calflag)
{
case 0:
r_dat=s_dat+d_dat;
break;
case 1:
r_dat=s_dat-d_dat;
break;
case 2:
r_dat=s_dat*d_dat;
break;
case 3:
r_dat=s_dat/d_dat;
break;
default:break;
}
LED1=(r_dat/1000)%10;
LED2=(r_dat/100)%10;
LED3=(r_dat/10)%10;
LED4=r_dat%10;
}
uchar kbscan(void)
{
unsigned char sccode,recode;
P3=0x0f;  //发0扫描,列线输入
if ((P3 & 0x0f) != 0x0f)  //有键按下
{
delay(20);   //延时去抖动
if ((P3&0x0f)!= 0x0f)
{
sccode = 0xef;    //逐行扫描初值
while((sccode&0x01)!=0)
{
P3=sccode;
if((P3&0x0f)!=0x0f)
{
recode=(P3&0x0f)|0xf0;
return((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
}
return 0;  //无键按下,返回0
}

void getkey(void)
{
unsigned char key;
key=kbscan();
if(key==0){keyval=0xff;return;}
switch(key)
{
case 0x11:keyval=7;break;
case 0x12:keyval=4;break;
case 0x14:keyval=1;break;
case 0x18:keyval=10;break;
case 0x21:keyval=8;break;
case 0x22:keyval=5;break;
case 0x24:keyval=2;break;
case 0x28:keyval=0;break;
case 0x41:keyval=9;break;
case 0x42:keyval=6;break;
case 0x44:keyval=3;break;
case 0x48:keyval=11;break;
case 0x81:keyval=12;break;
case 0x82:keyval=13;break;
case 0x84:keyval=14;break;
case 0x88:keyval=15;break;
default:keyval=0xff;break;
}
}

void t0isr() interrupt 1
{
TH0=0xf4;
TL0=0x48;
switch(number)
{
case 0:P2=0x04;P0=distab[LED1];break;
case 1:P2=0x08;P0=distab[LED2];break;
case 2:P2=0x01;P0=distab[LED3];break;
case 3:P2=0x02;P0=distab[LED4];break;
default:break;
}
number++;
if(number>3)number=0;
}
main()
{
TMOD = 0x01;
number = 0;
TH0=0xf4;
TL0=0x48;
TR0=1;
ET0=1;
EA=1;
LED1=0;
LED2=0;
LED3=0;
LED4=0;
while(1)
{
getkey();
switch(keyval)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
LED3=LED4;
LED4=keyval;
LED1=0;
LED2=0;
break;
case 10:break; //"ON"
case 11: //"="
d_dat=LED3*10+LED4;
dealdat();
break;
case 12: //"/"
calflag=3;
s_dat=LED3*10+LED4;
LED3=0;
LED4=0;
break;
case 13: //"*"
calflag=2;
s_dat=LED3*10+LED4;
LED3=0;
LED4=0;
break;
case 14: //"-"
calflag=1;
s_dat=LED3*10+LED4;
LED3=0;
LED4=0;
break;
case 15: //"+"
calflag=0;
s_dat=LED3*10+LED4;
LED3=0;
LED4=0;
break;
default:break;
}
}
}

你好!具体功能要求呢?加减乘除运算?
相关问答
计算机里的程序,是什么意思?什么是程序
1个回答2023-01-10 11:25
是什么意思?
计算自己活了多少天程序
1个回答2022-12-06 10:06
光阴如梭,从出生那天到今天,你知道自己已经活了多少天了吗?拿起笔来算?那就太慢了,其实使用Windows 7的计算器,便可以轻松计算出我们活了多少天。 单击“开始”→“所有程序”→“附件”→“计算器”...
全文
学计算机程序怎么学?
3个回答2022-12-03 14:13
学习计算机编程最有效的学习方法是边练边学,如果能在项目中进行学习是最好的方法。选择专业的职业教育院校,理论加实践的学习方法,学习起来不会很费力。
计算机程序设计主要学什么?
1个回答2022-11-02 22:39
计算机程序设计的背景介绍 程序设计的算法 编程语言的相关知识 如何运用编程语言解决问题
计算机程序ui设计员是什么?
1个回答2023-06-15 07:25
那简单的跟你说计算机程序UI设计员就是,把UI设计弄的程序化,
什么是程序?什么是程序设计?
2个回答2023-04-10 23:01
土点的讲话程序就是一串按照命令执行的代码。这个代码是什么应该怎样执行,你会这个你就是程序员了。
multisim中仿真51单片机编写程序问题
1个回答2023-02-03 03:30
编译成hex可以直接加载,如果是c语言的话,multisim支持hitech的,因该这里出错了