📄 keyscan.c
字号:
//#include<includes.h>
#include<stdio.h>
#include<reg52.h>
#include<intrins.h>
//#include"ziku.h"
#include"LCD19264.c"
#define nop() _nop_() /*定义空指令*/
#define ZERO 0x00 //数字0
#define ONE 0x01 //数字1
#define TWO 0x02 //数字2
#define THREE 0x03 //数字3
#define FOUR 0x04 //数字4
#define FIVE 0x05 //数字5
#define SIX 0x06 //数字6
#define SEVEN 0x07 //数字7
#define EIGHT 0x08 //数字8
#define NINE 0x09 //数字10
#define MAINBOARD 0x0A //主菜单
#define SET 0x0B //设定
#define REPORT 0x0C //报表
#define PARAMETERS 0x0D //参数
#define DOWN 0x0E //下移键
#define INPUT 0x0F //输入键
#define UP 0x11 //上移键
#define CANCEL 0x12 //清零键
#define DAN 0x13 //段位
#define CORRECTE 0x14 //校对
unsigned char keyscan(void); //盘扫描程序
void delay_ms(); //延时程序
sbit P27=P2^7; //第一列
sbit P26=P2^6; //第二列
sbit P37=P3^7; //第三列
sbit P36=P3^6; //第四列
#define IOPORTINIT() {P27=1;P26=1;P37=1;P36=1;P2=P2|0xFF;}
void delay_ms()
{
unsigned int i;
for(i=300;i>0;i--);
}
unsigned char keyscan()
{
/*************************扫描第一行*********************************/
IOPORTINIT();
P2=P2&0xFE; //扫描第一行
if((P27==0)|(P26==0)|(P37==0)|(P36==0)) //有键按下
{
delay_ms(); //延时去抖动
if((P27==0)&(P26==1)&(P37==1)&(P36==1))
{
return 0x0A; //返回”主画面"对应的值
}
if ((P27==1)&(P26==0)&(P37==1)&(P36==1))
{
return 0x0B; //返回 "设定 " 对应的值
}
if((P27==1)&(P26==1)&(P37==0)&(P36==1))
{
return 0x00; //返回 "数字0 " 对应的值
}
if((P27==1)&(P26==1)&(P37==1)&(P36==0))
{
return 0x07; //返回 "数字7 " 对应的值
}
}
/***********************扫描第二行************************************/
IOPORTINIT();
P2=P2&0xFD; //扫描第二行
if((P27==0)|(P26==0)|(P37==0)|(P36==0)) //有键按下
{
delay_ms(); //延时去抖动
if((P27==0)&(P26==1)&(P37==1)&(P36==1))
{
return 0x0C; //返回”报表"对应的值
}
if ((P27==1)&(P26==0)&(P37==1)&(P36==1))
{
return 0x0D; //返回 "参数" 对应的值
}
if((P27==1)&(P26==1)&(P37==0)&(P36==1))
{
return 0x03; //返回 "数字3" 对应的值
}
if((P27==1)&(P26==1)&(P37==1)&(P36==0))
{
return 0x08; //返回 "数字8" 对应的值
}
}
/****************************扫描第三行*******************************/
IOPORTINIT();
P2=P2&0xFB; //扫描第三行
if((P27==0)|(P26==0)|(P37==0)|(P36==0)) //有键按下
{
delay_ms(); //延时去抖动
if((P27==0)&(P26==1)&(P37==1)&(P36==1))
{
return 0x0E; //返回”下移键"对应的值
}
if ((P27==1)&(P26==0)&(P37==1)&(P36==1))
{
return 0x0F; //返回 "输入" 对应的值
}
if((P27==1)&(P26==1)&(P37==0)&(P36==1))
{
return 0x02; //返回 "数字2" 对应的值
}
if((P27==1)&(P26==1)&(P37==1)&(P36==0))
{
return 0x09; //返回 "数字9" 对应的值
}
}
/***************************扫描第四行********************************/
IOPORTINIT();
P2=P2&0xF7; //扫描第四行
if((P27==0)|(P26==0)|(P37==0)|(P36==0)) //有键按下
{
delay_ms(); //延时去抖动
if((P27==0)&(P26==1)&(P37==1)&(P36==1))
{
return 0x11; //返回”上移键"对应的值
}
if ((P27==1)&(P26==0)&(P37==1)&(P36==1))
{
return 0x12; //返回 "清零" 对应的值
}
if((P27==1)&(P26==1)&(P37==0)&(P36==1))
{
return 0x01; //返回 "数字1" 对应的值
}
if((P27==1)&(P26==1)&(P37==1)&(P36==0))
{
return 0x04; //返回 "数字4” 对应的值
}
}
/*****************************扫描第五行*************************************/
IOPORTINIT();
P2=P2&0xEF; //扫描第五行
if((P27==0)|(P26==0)|(P37==0)|(P36==0)) //有键按下
{
delay_ms(); //延时去抖动
if((P27==0)&(P26==1)&(P37==1)&(P36==1))
{
return 0x13; //返回”段位"对应的值
}
if ((P27==1)&(P26==0)&(P37==1)&(P36==1))
{
return 0x14; //返回 "校对" 对应的值
}
if((P27==1)&(P26==1)&(P37==0)&(P36==1))
{
return 0x06; //返回 "数字6" 对应的值
}
if((P27==1)&(P26==1)&(P37==1)&(P36==0))
{
return 0x05; //返回 "数字5" 对应的值
}
}
return 0xff;
}
/*
void xianshi(unsigned char m)
{
switch(m)
{
case 0 : displayalb_at_xyaddr(1,2,&ziku);break;
case 1 : displayalb_at_xyaddr(1,3,&ziku[16]);break;
case 2 : displayalb_at_xyaddr(1,4,&ziku[32]);break;
case 3 : displayalb_at_xyaddr(1,5,&ziku[48]);break;
case 4 : displayalb_at_xyaddr(1,6,&ziku[64]);break;
case 5 : displayalb_at_xyaddr(1,7,&ziku[80]);break;
case 6 : displayalb_at_xyaddr(1,8,&ziku[96]);break;
case 7 : displayalb_at_xyaddr(1,9,&ziku[112]);break;
case 8 : displayalb_at_xyaddr(2,1,&ziku[128]);break;
case 9 : displayalb_at_xyaddr(2,2,&ziku[144]);break;
case 10: displayalb_at_xyaddr(2,3,&ziku[160]);break;
case 11: displayalb_at_xyaddr(2,4,&ziku[176]);break;
case 13: displayalb_at_xyaddr(2,5,&ziku[192]);break;
default:
break;
}
}
*/
void main()
{
unsigned char s;
s=0xff;
LcmInit();
map1_guding();
while(1)
{
s=keyscan();
// xianshi(s);
switch(s)
{
case 11:
displayHZ_at_xyaddr(2,10,&tszf[256]);//显示手指指标
break;
case 20:
all_operate(0x00); // 清除
map2_guding(); //显示画面2
break;
case 12:
all_operate(0x00); // 清除
map3_guding(); //显示画面3
break;
case 13:
all_operate(0x00); // 清除
map18_guding(); //显示画面18
case 19:
all_operate(0x00); // 清除
map19_guding(); //显示画面21
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -