单片机中用矩阵键盘实现计算器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算器

1.程序要求:

用矩阵按键实现简单的加减乘除运算。

2.程序代码:

#include

#include

sbit col_1=P1^4;

sbit col_2=P1^5;

sbit col_3=P1^6;

sbit col_4=P1^7;

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管

unsigned char keynum,flag;

unsigned char num1,num2,flag1,flag2,flag3,flag4;

void keyscan(void);

void display();

void keyfind(unsigned char);

void keyprocess(void);

void delay(unsigned int z) //延时1ms

{

unsigned int x,y;

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

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

}

void main(void)

{

while(1)

{

keyscan(); //按键扫描函数

keyprocess(); //数据处理

display(); //数据显示

}

}

void keyscan(void)

{

col_1=0;

col_2=0;

col_3=0;

col_4=0;

if ((P1&0x0f)!=0x0f) //判断行线是否全为1,不是则处理{

col_1=0; //第一列输出'0'

col_2=1;

col_3=1;

col_4=1;

keyfind(0);

col_1=1; //第二列输出'0'

col_2=0;

col_3=1;

col_4=1;

keyfind(4);

col_1=1; //第三列输出'0'

col_2=1;

col_3=0;

col_4=1;

keyfind(8);

col_1=1; //第四列输出'0'

col_2=1;

col_3=1;

col_4=0;

keyfind(12);

col_1=0; //列线输出全为'0'

col_2=0;

col_3=0;

col_4=0;

flag++; //每按一下标志位加1

while(((P1&0x0f)!=0x0f)); //等待按键释放

}

}

void keyfind(unsigned char col_dat)

{

unsigned char temp;

temp=(~P1)&0x0f; //求取各行状态

switch(temp) //键值计算

{

case 1:

keynum=1+col_dat;

case 2:

keynum=2+col_dat;

break;

case 4:

keynum=3+col_dat;

break;

case 8:

keynum=4+col_dat;

break;

}

}

void keyprocess(void)

{

switch(keynum)

{

case 1:if(flag==1) //flag=1表示是第一次按下,按得是被除数num1=7; //第一个键按下对应是数字7

if(flag==3) //flag=3表示是第三次按下,按的是除数

num2=7;

break;

case 2:if(flag==1)

num1=4;

if(flag==3)

num2=4;

break;

case 3:if(flag==1)

num1=1;

if(flag==3)

num2=1;

break;

case 5:if(flag==1)

num1=8;

if(flag==3)

num2=8;

break;

case 6:if(flag==1)

num1=5;

if(flag==3)

num2=5;

case 7:if(flag==1)

num1=2;

if(flag==3)

num2=2;

break;

case 8:if(flag==1)

num1=0;

if(flag==3)

num2=0;

break;

case 9:if(flag==1)

num1=9;

if(flag==3)

num2=9;

break;

case 10:if(flag==1)

num1=6;

if(flag==3)

num2=6;

break;

case 11:if(flag==1)

num1=3;

if(flag==3)

num2=3;

break;

case 4:

flag1=1;//“C”清除键按下,用flag1=1来记下

break;

case 12:

flag1=2;//“=”等号键按下,用flag1=2标记下

break;

case 13:

flag2=1;//“/”除号键按下,用flag2=1来标记

break;

case 14:

flag2=2;//“*”

break;

case 15:

flag2=3;//“-”

break;

case 16:

flag2=4;//“+”

break;

相关文档
最新文档