您的位置 首页 被动

根据51单片机12864简易计算器

终于写计算器了,其实计算器老早就写好了的,只是那会一直在忙考试还有实验室项目,所以没能空出时间来写博客。现在寒假在家,终于可以静心

总算写核算器了,其实核算器老早就写好了的,仅仅那会一向在忙考试还有实验室项目,所以没能空出时刻来写博客。现在寒假在家,总算能够静心的学点东西了。

下面就先写点自己写这个程序的进程。其实这是个单片机课的期末课题,可是没有几个能写的好的。核算器其实要考虑周全也是很杂乱的,。但咱们只要求做简易核算器,所以我的核算器只要整数加减乘除,带负数功用。通过查验,实用性仍是能够的。
这个程序的全体思路很简略,主要是一些细节的处理。
思路是,先矩阵键盘扫描,监测运算符号按下,存储两个运管用,核算结果,整个进程的实时显现。
先是矩阵键盘扫描,我曾经一向用的郭天祥教的办法,这种办法很好了解,可是缺陷是代码太长了,所以我上网去找一种简略的矩阵键盘扫描。(比较于静心苦想,有时候去网上找办法也是不错的)
void keyscan()
{
uchar h,l;
if(keypress())
{
P3=0X0F;
_nop_();
h=P3;
h&=0X0F;//读取按键地点‘行’
P3=0XF0;
_nop_();
_nop_();
l=P3;
l&=0XF0;//读取按键地点‘列’
key=h+l;//最终相加作为SWITCH CASE的挑选
//这种扫描进程很清楚明晰是吧
switch(key)
{
case 0xEE:key=1;Input[i]=1;break;// 1
case 0xDE:key=4;Input[i]=4;break;// 4
case 0xBE:key=7;Input[i]=7;break;// 7
case 0x7E:key=0;Input[i]=0;break; /// 0
case 0xED:key=2;Input[i]=2;break;// 2
case 0xDD:key=5;Input[i]=5;break;// 5
case 0xBD:key=8;Input[i]=8;break; // 8
case 0x7D:key=16;i–;break; // = 16
case 0xEB:key=3;Input[i]=3;break; // 3
case 0xDB:key=6;Input[i]=6;break; // 6
case 0xBB:key=9;Input[i]=9;break; // 9
case 0x7B: clear();break; // c 17
case 0xE7:key=18;Input[i]=+;n=i;break; // + 18
case 0xD7:key=19;Input[i]=-;n=i;break;// – 19
case 0xB7:key=20;Input[i]=*;n=i;break; // * 20
case 0x77:key=21;Input[i]=/;n=i;break; // / 21
default:key=22;
}
i++;
while(keypress());
}
}
我的keyscan()函数就出来了。。。
把每次按键的数存入数组,然后一向显现数组成员就能够到达实时显现输入数字的作用了。
void jisuan(int n,int l,uchar yusuan)
{
int a=0,b=0,c=0,result;
uchar x;
for(x=0;x
{
a+=(Input[x]-0)*pow(10,n-x-1);
}
for(x=n+1;x
{
b+=(Input[x]-0)*pow(10,l-x-1);
}
// write_num(0,1,a);
// write_num(0,2,b);
switch(yusuan)
{
case +:result=a+b;write_num(0,1,result); break; // + 18
case -:result=a-b;write_num(0,1,result);break;// – 19
case *:result=a*b;write_num(0,1,result);break; // * 20
case /:result=a/b;write_num(0,1,result);break; // / 21
}
}
这个便是核算函数了,里边的
a+=(Input[x]-0)*pow(10,n-x-1);
b+=(Input[x]-0)*pow(10,l-x-1);
这是用来核算输入数值的,这个应该能够了解
最终是主函数:
void main()
{
Lcd_Init();
// write_string(0,3,”check ok”);
while(1)
{
keyscan();
write_string(0,0,Input);
if(key==16)
{
l=i;
if(n>0&&n!=i-1)
{
switch(Input[n])
{
case +:jisuan(n,l,+); break; // + 18
case -:jisuan(n,l,-);break;// – 19
case *:jisuan(n,l,*);break; // * 20
case /:jisuan(n,l,/);break; // / 21
}
}
else
{
write_string(0,1,”ERROR”);
}
}
delayms(1);
}
while(1);
}
简易核算器的51程序就此结束了

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/beidong/259312.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部