基于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的选择
//这种扫描过程很清楚明了是吧
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)
{
}
}
这个就是计算函数了,里面的
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])
{
}
}
else
{
write_string(0,1,"ERROR");
}
}
delayms(1);
}
while(1);
}
简易计算器的51程序就此结束了
51单片机12864简易计算 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)