打印

求高手帮助:用51的矩阵键盘和数码管编个简单计算器

[复制链接]
2012|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bluekun|  楼主 | 2011-3-30 19:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bluekun 于 2011-3-30 20:02 编辑

最近想用数码管和矩阵键盘做个简单的计算器出来,可碰到了些麻烦~希望大虾们能帮解决一下~感激不尽!!附部分自己写的程序
/*-------------------
用矩阵键盘和数码管实现
简易计算器功能
--------------------*/
#include<reg52.h>
#define uc unsigned char
#define ui unsigned int
uc table[]={0x3f,0x06,0x5b,0x4f,    //0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,
   0x66,0x6d,0x7d,0x07,
   0x7f,0x6f,0x77,0x7c,
   0x39,0x5e,0x79,0x71};
uc con_data[]={0,0,0};
uc temp_h,key,temp_l;       //定义矩阵键盘扫描时所用到的变量
uc e_shi,e_ge,e;
ui i=100;
/*-------------
毫秒延时子函数
-------------*/
void delayms(ui z)     
{
ui x;
while(z--)
{
  for(x=0;x<120;x++);
}
}
/*--------------
键盘扫描子函数
--------------*/
uc scan()
{
P3=0x0f;
temp_h=P3;
if(temp_h!=0x0f)
{
  delayms(5);
  if(temp_h!=0x0f)
  {
   temp_h=P3;   //temp_h=P3&0x0f;
   P3=0xf0;     //P3=temp_h|0xf0;
   temp_l=P3&0xf0;
   return(temp_h+temp_l);
  }
}
return(0xff);
}
/*--------------------
加法子函数
-------------------*/
uc add()
{
key=scan();
switch(key)
  {
   case 0x7e:P0=table[0];con_data[0]=0;break;
   case 0x7d: P0=table[1];con_data[1]=1;break;
   case 0x7b: P0=table[2];con_data[1]=2;break;
   case 0x77: P0=table[3];con_data[1]=3;break;
   case 0xbe: P0=table[4];con_data[1]=4;break;
   case 0xbd: P0=table[5];con_data[1]=5;break;
   case 0xbb: P0=table[6];con_data[1]=6;break;
   case 0xb7: P0=table[7];con_data[1]=7;break;
   case 0xde: P0=table[8];con_data[1]=8;break;
   case 0xdd: P0=table[9];con_data[1]=9;break;
  }
con_data[2]=con_data[0]+con_data[1];
return con_data[2];
}
/*-----------------
等于子函数,按键实现
等号功能并显示
------------------*/
void equ()
{
e=add();
if(e>9)
{
  e_shi=e/10;
  e_ge=e%10;
  while(i--)
  {
   P0=table[e_shi];
   P2=0;
   delayms(2);
   P0=table[e_ge];
   P2=1;
   delayms(2);
  }
}
else P0=table[e];
}
/*---------------
主函数
---------------*/
main()
{
P2=0;
while(1)
{
  key=scan();
  switch(key)
  {
   case 0x7e: P0=table[0];con_data[0]=0;break;
   case 0x7d: P0=table[1];con_data[0]=1;break;
   case 0x7b: P0=table[2];con_data[0]=2;break;
   case 0x77: P0=table[3];con_data[0]=3;break;
   case 0xbe: P0=table[4];con_data[0]=4;break;
   case 0xbd: P0=table[5];con_data[0]=5;break;
   case 0xbb: P0=table[6];con_data[0]=6;break;
   case 0xb7: P0=table[7];con_data[0]=7;break;
   case 0xde: P0=table[8];con_data[0]=8;break;
   case 0xdd: P0=table[9];con_data[0]=9;break;
   case 0xdb:add();break;
   //case 0xd7:sub();break;
   //case 0xee:mul();break;
   //case 0xed:div();break;
   //case 0xeb:;break;
   case 0xe7:equ();break;
  }
}
}
问题的水平不是很高,大虾们笑过后要援手哦,不然白笑了~~~

相关帖子

沙发
bluekun|  楼主 | 2011-3-30 20:25 | 只看该作者
帖子是不是太水了~居然木有回的……

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

31

帖子

1

粉丝