【单片机】51单片机计算器代码和电路图
文章目录
【单片机】51单片机计算器代码和电路图
一、问题描述
二、具体实现
1.完整代码带注释
2.电路图
总结
一、问题描述
通过AT89C51单片机16位矩阵键盘设计简易计算器(仅能实现加减操作)
二、具体实现
1.完整代码带注释
#include<reg51.h> #define uint unsigned int #define uchar unsigned char uchar code table[]= {0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe, 0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};//显示数字0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f uchar code address[]={0xfe,0xfd};//位选1,2 //1111 1110数码管显示第一位 //1111 1101数码管显示第二位 uchar code KEY_TABLE[] = {0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd, 0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};//(反转法)矩阵键盘的各个按键的计算值 void delay(int k) { for( ; k>0; k--); } void delay1() { uint n = 50000;while(n--); } void delay2() { uint n = 10000;while(n--); } main() { uchar temp,key,num,i; int sum,sign,j,a[16],k=0; while(1) { P3 = 0xf0;//1111 0000 if(P3 != 0xf0) { delay2(); if(P3 != 0xf0) { temp = P3; P3 = 0x0f;//0000 1111 key = temp|P3;//低四位改变,若有键按下,得出低四位的值。xxxx 1111 for(i=0; i<16; i++) if(key == KEY_TABLE[i]) { num = i;//0,1,2,3,,15 delay(200); //0-14显示 if(num>=0 && num<=14) { a[k++]=num;//a[0]=0 P2 = address[0];//位选为0xfe,显示第一位数字 P1 = table[num];//显示数字num delay(2000); } else if(num==15)//按下15等号键进行判断 { //判断输入的值是否合法 if(a[0]>=0 && a[0]<=9 && (a[2]>=0 && a[2]<=9) && (a[1]==10 || a[1]==11))//1+2(第一位数字a[0],第二个运算符a[1]+-,第三位数字a[2]) sign=1;//合法 else sign=3;//不合法 for(j=0;j<3;j++)//A+B循环三次,两个数字和一个运算符 { if(a[j]==12||a[j]==13||a[j]==14)//如果是12,13,14位,无效键 sign=0; } } if(sign==1)//合法 { if(a[1]==10)//按下加号键 sum=a[0]+a[2];//实现加法 else if(a[1]==11)//按下减号键 sum=a[0]-a[2];//实现减法 } } delay1(); } } //合法 if(sign == 1) { if(sum<10)//0-9 { P2=address[0];//位选为0xfe,显示第一位数字 P1=table[sum];//显示数字table[sum] } else { for(i=0;i<100;i++) { P2=address[1];//位选为0xfd,显示第二位数字 P1=table[sum/10]; delay(1000); P2=address[0];//位选为0xfe,显示第一位数字 P1=table[sum%10]; delay(1000); } } } //不合法键判断 if(sign == 3) { P2=address[0];//位选为0xfe,显示第一位数字 P1=table[15];//显示字符f P2=address[1];//位选为0xfd,显示第二位数字 P1=table[15];//显示字符f } //无效键判断 if(sign == 0) { P2=address[0];//位选为0xfe,显示第一位数字 P1=table[0];//显示字符f P2=address[1];//位选为0xfd,显示第二位数字 P1=table[0];//显示字符f } } }
2.电路图
初始界面
实现加法操作
总结
全网最详细代码,直接拿去用,感谢大家对我的关注!