文档介绍:#include <> #include "" #include "" #include "" #define uchar unsigned char #define uint unsigned int uchar num; // 存放按键标识 uchar denghao=0,flag=0,fuhao,key; //denghao 存放是否按下等号键, flag 存放是否按下符号键, fuhao 存放按下是什么符号, key 存放按键 ASCII 码值 long a,b,c; // 加数 a、b 结果为 c uchar code table[]={ // 键盘显示编码,加上 0x30 ,为对应的 ASCII 码 0x2f-0x30 7, 8, 9, 0x2f-0x30, //1、2、3、+; 0x2a-0x30 4, 5, 6, 0x2a-0x30, //4、5、6、-; 0x2d-0x30 1, 2, 3, 0x2d-0x30, //7、8、9、*; 0x2b-0x30 0x2f-0x30, 0x2a-0x30, 0, 0x2b-0x30}; //0、=、 CE 、/; 0x01-0x30, 0, 0x3d-0x30, 0x2f-0x30}; //0、=、 CE 、/; void keyscan() { uchar temp; KEY_8=0xfe; //1111 1110 temp=KEY_8; temp=temp&0xf0; while(temp!=0xf0) { delay_nms(20); temp=KEY_8; temp=temp&0xf0; while(temp!=0xf0) { temp=KEY_8; switch(temp) { case 0xee:num=0;break; //1110 1110 case 0xde:num=1;break; //1101 1110 case 0xbe:num=2;break; //1011 1110 case 0x7e:num=3;break; //0111 1110 } while(temp!=0xf0) // 等待按键释放{ temp=KEY_8; temp=temp&0xf0; }} if(num==0||num==1||num==2) // 判断是按下 1,2,3 { if(flag==0) // 如果没有按符号键, 符号前的数值为 a a=a*10+table[num]; else if(flag==1) // 如果按了符号键, 符号后的数值为 b b=b*10+table[num]; if(denghao==1) // 如果之前按了'='号, 再按键时清屏,进行下一次计算{ denghao=0; LCD_init(); LCD_write_str(0,0,"JIsuanqitest"); (0x80+0x40); // 清屏}} else if(num==3) // 判断是否按下+ { flag=1; fuhao=4; } key=table[num]; // 显示按下的键 write_dat(0x30+key); } KEY_8=0xfd; // 1111 1101 temp=KEY_8; temp=temp&0xf0; whi