#include<reg51.h> #include<math.h> #define uint unsigned int #define uchar unsigned char uchar code tab[]={0xee,0xed,0xeb,0xe7, 0xde,0xdd,0xdb,0xd7, 0xbe,0xbd,0xbb,0xb7, 0x7e,0x7d,0x7b,0x77,}; //0~f鍵位碼表 uchar code tab1[]={0x88,0Xbe,0Xc4,0X94,0Xb2,0X91,0X81,0Xbc, 0X80,0X90,0xa0,0x83,0xc9,0x86,0xc1,0xe1,0xff}; //0~f字型碼表 void delay(uchar x) //毫秒級延時函數 { uchar y; for(;x>0;x--) for(y=110;y>0;y--); } scanf() //按鍵處理函數 { uchar temp,temp1,i; P0=0xf0; //給P0口賦值為oxf0,用于列掃描 if(P0!=0xf0) //判別是否有鍵按下 { delay(2); if(P0!=0xf0) //再次判別是否有鍵按下 { temp1=P0; //P0值賦給temp1 P0=0x0f; //P0值賦為0x0f,用于行掃描 temp=temp1|P0; //將行列掃描值合并,賦給temp } switch(temp) { case 0xee:i=1; break; case 0xed:i=2; break; case 0xeb:i=3; break; case 0xe7:i=4; break; case 0xde:i=5; break; case 0xdd:i=6; break; case 0xdb:i=7; break; case 0xd7:i=8; break; case 0xbe:i=9; break; case 0xbd:i=0; break; case 0xbb:i=10; break; case 0xb7:i=11; break; case 0x7e:i=12; break; case 0x7d:i=13; break; case 0x7b:i=14; break; case 0x77:i=15; break; } } else return 16; return i; } void display(uint temp) //顯示函數 { uchar i; uchar z[6]; z[0]=16; z[1]=temp/10000; z[2]=temp%10000/1000; z[3]=temp%1000/100; z[4]=temp%100/10; z[5]=temp%10; for(i=0;i<6;i++) { SBUF=tab1[z[i]]; // 根據鍵位值找到鍵碼值,將鍵碼值賦給串行口發送寄存器 while(!TI); //判斷串口數據發送是否完畢 TI=0; //串口數據發送完畢標志清0 } } E(uchar n) { uint t=1; for(;n>0;n--) t=t*10; return t; } void main(void) //主函數 { uint tem,tem1; uchar x,y,fh,j,k=0; uchar zhi[6]; uchar zhi1[6]; while(1) { if(x<5&&!k) { if(scanf()<10) { delay(5); if(scanf()<10) { if(x==0){zhi[0]=scanf();while(scanf()!=16);} if(x==1){zhi[1]=scanf();while(scanf()!=16);} if(x==2){zhi[2]=scanf();while(scanf()!=16);} if(x==3){zhi[3]=scanf();while(scanf()!=16);} if(x==4){zhi[4]=scanf();while(scanf()!=16);} x++; tem=0; for(y=0;y<x;y++) { tem=tem+zhi[y]*E(x-1-y); } display(tem); } } } if(scanf()>11&&scanf()<16) { delay(2); if(scanf()>9&&scanf()<16) { fh=scanf(); while(scanf()!=16); k=1; } } if(j<5&&k) { if(scanf()<10) { delay(2); if(scanf()<10) { if(j==0){zhi1[0]=scanf();while(scanf()!=16);} if(j==1){zhi1[1]=scanf();while(scanf()!=16);} if(j==2){zhi1[2]=scanf();while(scanf()!=16);} if(j==3){zhi1[3]=scanf();while(scanf()!=16);} if(j==4){zhi1[4]=scanf();while(scanf()!=16);} j++; tem1=0; for(y=0;y<j;y++) { tem1=tem1+zhi1[y]*E(j-1-y); } display(tem1); } } } if(scanf()==11) { delay(2); if(scanf()==11) { while(scanf()==11); if(fh==12)tem=tem+tem1; if(fh==13)tem=tem-tem1; if(fh==14)tem=tem*tem1; if(fh==15)tem=tem/tem1; display(tem); j=0; } } } }