|
- void keyscan() // 鍵盤掃描程序
- {
- P1=0xfe; //1111 1110
- if(P1!=0xfe)//p2口最低位非0 執(zhí)行
- {
- if(P1!=0xfe)
- {
- temp=P1&0xf0;//保留高4位的按鍵值
- switch(temp)
- {
- case 0xe0:num=0;//符號列
- break;
- case 0xd0:num=1;//369列
- break;
- case 0xb0:num=2;//258列
- break;
- case 0x70:num=3;//147列
- break;
- }
- }
- while(P1!=0xfe);//下面為判斷按鍵
- if(num==0||num==1||num==2)//如果按下的是'7','8'或'9
- {
- chuqun=chuqun+1;
- if(j!=0)
- {
- Write_LCD_Command(0x01); //清屏命令
- j=0;
- }
- if(flag==0)//沒有按過符號鍵
- {
- a=a*10+table[num];//到table中取將要顯示并參與運算a的值 a的初值為'0',結(jié)果為輸入a值
- }
- else//如果按過符號鍵
- {
- b=b*10+table[num]; //b的初值為'0' ,結(jié)果為輸入b值
- }
- }
- else//如果按下的是'/'
- {
- flag=1;//有按鍵按下標(biāo)志
- fuhao=4;//4表示除號已按
- chuqun=0;
- }
-
- i=table1[num];//送顯示
- Write_LCD_Data(0x30+i);//將數(shù)字轉(zhuǎn)化為字符,對應(yīng)前面的table1中的i-0x30
- delay_ms(300);
- }
- P1=0xfd;
- if(P1!=0xfd)//1111 1101 上次1111 1110 低位向高位移一位 以后類似實現(xiàn)行掃描
- {
- delay_ms(5);//去抖
- if(P1!=0xfd)
- {
- temp=P1&0xf0;
- switch(temp)//判斷按鍵位置 下面是四種情況
- {
- case 0xe0:num=4;
- break;
- case 0xd0:num=5;
- break;
- case 0xb0:num=6;
- break;
- case 0x70:num=7;
- break;
- }
- }
- while(P1!=0xfd);
- if(num==4||num==5||num==6&&num!=7)//如果按下的是'4','5'或'6'
- {
- chuqun=chuqun+1;
- if(j!=0)
- {
- Write_LCD_Command(0x01); //清屏命令
- j=0;
- }
- if(flag==0)//沒有按過符號鍵
- {
- a=a*10+table[num]; //輸入a值
- }
- else//如果按過符號鍵
- {
- b=b*10+table[num]; //輸入b值
- }
- }
- else//如果按下的是'*'
- {
- flag=1;
- fuhao=3;//3表示乘號已按
- chuqun=0;
- }
-
- i=table1[num];//顯示 找對應(yīng)的碼
- Write_LCD_Data(0x30+i);
- delay_ms(300);
- }
復(fù)制代碼 |
|