
任务描述单片机连接8位共阳极数码管和4*4矩阵键盘利用矩阵键盘定义0~9数字键并定义、-、*、/、等五个功能键。编程实现简易计算器功能完成两个1位十进制数的四则运算。加法计算器讲解数字键统一编程功能键独立讨论。/************************* 项目名称项目三简易计算器 任务名称任务3-3加法计算器 任务描述单片机连接8位共阳极数码管和4*4矩阵键盘 利用矩阵键盘定义0~9数字键并定义、-、*、/、等五个功能键。 编程实现简易计算器功能完成两个1位十进制数的四则运算。 *************************/ #includereg51.h #includeintrins.h //51单片机寄存器定义头文件 sbit row0P1^0; sbit row1P1^1; sbit row2P1^2; sbit row3P1^3; sbit col0P1^4; sbit col1P1^5; sbit col2P1^6; sbit col3P1^7; int n;//存放按键编号 int m1,m2;//存放两个加数 int dis[2];//存放结果的十位和个位 int seg[]{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//定义0~9共阳极七段码 void key1();//等待按键按下无限查询 void key2();//扫描按键位置行列扫描 void key3();//处理按键请求显示编号 void display();//显示两位结果子函数 /**********************************************/ void delay(int i) { int k,j; for(k0;ki;k) for(j0;j100;j); } /**********************************************/ void main() { while(1) { key1(); key2(); key3(); } } /**********************************************/ void key1() { while(1) { P10x0f; if(P1!0x0f)//有变化一定是有按键按下导致某行某列短路 break;//退出查询 } } /**********************************************/ void key2() { P10xff;//行列都写1 col00;//清零0列 if(row00) n0; if(row10) n1; if(row20) n2; if(row30) n3; P10xff;//行列都写1 col10;//清零1列 if(row00) n4; if(row10) n5; if(row20) n6; if(row30) n7; P10xff;//行列都写1 col20;//清零2列 if(row00) n8; if(row10) n9; if(row20) m1n;//键保存数字1 if(row30) {m2n;n10;}//保存数字2并n10 } /**********************************************/ void key3() { if(n10)//按下数字键显示数字 { P20xfe;//1111 1110 P0seg[n]; } else//按下等号键 display();//显示两位结果 } /**********************************************/ void display() { int i,j; dis[0](m1m2)/10;//求和并拆字得到十位显示值 dis[1](m1m2)%10;//求和并拆字得到个位显示值 while(1) { for(i0,j0xfd;i2;i)//1111 1101 { P2j; P0seg[dis[i]]; delay(2); j_cror_(j,1); } } }