📄 config.c
字号:
key_xd_delay();////键消抖延时/////
if((P07&P06&P05&P04)==0)
{
//////////////////////////////////////////////////////////////////////////////////
////模块功能:确定出按下的键在那一行,通过变量row的值去体现/////////////////////////////////////////////////////////////////////////
P0=0xfe;
while(1)
{
if((P07&P06&P05&P04)==1)
{
row++;
if(row>=4){row=0;P0=0xfe;}
P0=_crol_(P0,1);//|0x08)&0xe8;////#include <intrins.h>//将数据向左循环移动1位////
continue;
}
else break;
}
////////////////////////////////////////////////////////////////////////////////
/////模块功能:确定出按下的键在那一列,由此确定按下的键,返回键号key_code////////////////////////////////////////////////////////////////////////
switch(row)
{
case 0: if(P07==0) key_code=0x04;
else{
if(P06==0) key_code=0x08;
else{
if(P05==0) key_code=0x0B;
else key_code=0x0F;
}
}
break;
case 1: if(P07==0) key_code=0x03;
else{
if(P06==0) key_code=0x07;
else{
if(P05==0) key_code=0x00;
else key_code=0x0E;
}
}
break;
case 2: if(P07==0) key_code=0x02;
else{
if(P06==0) key_code=0x06;
else{
if(P05==0) key_code=0x09;
else key_code=0x0D;
}
}
break;
case 3: if(P07==0) key_code=0x01;
else{
if(P06==0) key_code=0x05;
else{
if(P05==0) key_code=0x0A;
else key_code=0x0C;
}
}
break;
}
}
else key_code=0xff;////键盘干扰返回0xff///
P0=0xf0; /////////////恢复正常赋值//////////////
while((P07&P06&P05&P04)==0) ;/////等待键释放/////
return(key_code);//////正常键盘的返回值0-15///
}
//////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////
//键消抖延时函数//
void key_xd_delay(void)
{
uchar i;
for(i=300;i>0;i--);
}
/////////////////////写入数字函数/0-9////调用该函数的前提是: 必须有键按下/////////////////////////////////////////////
uchar Key_Write_shuzi(uchar LCM_x,uchar LCM_y)/////并返回写入的数字////////////////
{//////获取按下的键值//在液晶上显示//并将获取的键值返回/////
uchar keynum1,kt;
keynum1=Get_KeyNum();
// while((P07&P06&P05&P04)==0) ;/////等待键释放后执行键功能函数//如果键盘扫描函数中没有做处理//这里不可少///
switch(keynum1)
{
case 0x00: LCD_Write_word(LCM_x,LCM_y,"0%",1);///光标显示//
kt=0;
break;
case 0x01: LCD_Write_word(LCM_x,LCM_y,"1%",1);
kt=1;
break;
case 0x02: LCD_Write_word(LCM_x,LCM_y,"2%",1);
kt=2;
break;
case 0x03: LCD_Write_word(LCM_x,LCM_y,"3%",1);
kt=3;
break;
case 0x04: LCD_Write_word(LCM_x,LCM_y,"4%",1);
kt=4;
break;
case 0x05: LCD_Write_word(LCM_x,LCM_y,"5%",1);
kt=5;
break;
case 0x06: LCD_Write_word(LCM_x,LCM_y,"6%",1);
kt=6;
break;
case 0x07: LCD_Write_word(LCM_x,LCM_y,"7%",1);
kt=7;
break;
case 0x08: LCD_Write_word(LCM_x,LCM_y,"8%",1);
kt=8;
break;
case 0x09: LCD_Write_word(LCM_x,LCM_y,"9%",1);
kt=9;
break;
default :
kt=250;////按下非数字键返回数值250///
break;////////
}
return(kt);
}
/////////////////操作模式函数/////调用该函数的前提是: 必须有键按下////////////////////
/////////多个功能//确定//箭头标向下移动/////////////////////////////////////////
uchar Operate_Model(void)
{
uchar keynum,kt;
keynum=Get_KeyNum();
//while((P07&P06&P05&P04)==0);/////等待键释放后执行键功能函数//如果键盘扫描函数中没有做处理//这里不可少///
switch(keynum)
{
case 0x0C: kt=44;////向前翻////
break;
case 0x0D: kt=11;////向上翻///
break;
case 0x0E: kt=33;////向下翻////
break;
case 0x0F: kt=66;////向后翻////
break;
case 0x0A: kt=77;////取消////
break;
case 0x0B: kt=88;////确定////
break;
default: break;
}
return(kt);
}
///////////////////光标设置函数////////////////////////////////////////////
void Cursor_configure(uchar LCM_x,uchar LCM_y,uchar flash_time,uchar high,uchar disp)
{
LCD_Write_Funtion(0x60,LCM_x);//光标地址定位
LCD_Write_Funtion(0x70,LCM_y);//光标地址定位
LCD_Write_Funtion(0x80,flash_time) ;//光标闪烁时间
LCD_Write_Funtion(0x11,high);//光标高度和行距设定
LCD_Write_Funtion(0x10,disp);//写光标是否自动移位//光标是否显示//光标是否闪烁//光标是否自适应宽度//
}
////////////////////光标提示显示输入1位的数据函数////调用该函数的前提是: 必须有键按下/////////////////////////////////////////////////////
uchar Disp_inputdata_1(uchar LCM_x1,uchar LCM_y1,uchar LCM_x2,uchar LCM_y2,y_data)////y_data是要输入的数字//
{///uchar LCM_x1,uchar LCM_y1指定位置输入1位数字//uchar LCM_x2,uchar LCM_y2指定下一个需要输入数据的地方///////
/////////////////并返回输入的数据//////////
uchar datt;
a1=Key_Write_shuzi(LCM_x1,LCM_y1);
LCD_Disp_Frame_S();
Cursor_configure(LCM_x2,(LCM_y2+16),0x20,0x20,0x6f);//光标配置//光标显示//
if(a1==250) datt=y_data;
if(a1!=250) datt=a1;
a1=0;
return(datt);//正常情况//应该是0-9的数据//
}
////////////////////光标提示显示输入2位的数据函数////调用该函数的前提是: 必须有键按下/////////////////////////////////////////////////////
uchar Disp_inputdata_2(uchar LCM_x1,uchar LCM_y1,uchar LCM_x2,uchar LCM_y2,y_data)///////光标跳到下一个需要输入数据的地方//
{
uchar datt;
if(gg==0)///gg是全局变量///
{
a1=Key_Write_shuzi(LCM_x1,LCM_y1);
LCD_Disp_Frame_S();
Cursor_configure((LCM_x1+1),(LCM_y1+16),0x20,0x20,0x6f);//光标配置//
gg=1;
return(a1);////////
}
else
{
b1=Key_Write_shuzi((LCM_x1+1),LCM_y1);
LCD_Disp_Frame_S();
Cursor_configure(LCM_x2,(LCM_y2+16),0x20,0x20,0x6f);//光标配置//
if((a1==250)&&(b1==250)) datt=y_data;
if((a1==250)&&(b1!=250)) datt=10*(y_data/10)+b1;
if((a1!=250)&&(b1==250)) datt=10*a1+y_data%10;
if((a1!=250)&&(b1!=250)) datt=10*a1+b1;
a1=0;b1=0;gg=0;
return(datt);
}
}
///////////////////////////////////////////////////////////////////////////////////////
////////////////////光标提示显示输入3位的数据函数////调用该函数的前提是: 必须有键按下/////////////////////////////////////////////////////
uint Disp_inputdata_3(uchar LCM_x1,uchar LCM_y1,uchar LCM_x2,uchar LCM_y2,y_data)/////////
{////////uchar LCM_x1,uchar LCM_y1//表示输入3位数据的位置////uchar LCM_x2,uchar LCM_y2//光标跳到下一个需要输入数据的位置//
uint datt;
if(gg==0)///gg是全局变量///
{
a1=Key_Write_shuzi(LCM_x1,LCM_y1);
LCD_Disp_Frame_S();
Cursor_configure((LCM_x1+1),(LCM_y1+16),0x20,0x20,0x6f);//光标配置//
gg=1;
return(a1);////////
}
else
{
if(gf==0)///gf是全局变量///
{
b1=Key_Write_shuzi((LCM_x1+1),LCM_y1);
LCD_Disp_Frame_S();
Cursor_configure((LCM_x1+2),(LCM_y1+16),0x20,0x20,0x6f);//光标配置//
gf=1;
return(b1);////////
}
else
{
c1=Key_Write_shuzi((LCM_x1+2),LCM_y1);
LCD_Disp_Frame_S();
Cursor_configure(LCM_x2,(LCM_y2+16),0x20,0x20,0x6f);//光标配置//
if((a1==250)&&(b1==250)&&(c1==250)) datt=y_data; ////000//
if((a1==250)&&(b1==250)&&(c1!=250)) datt=100*(y_data/100)+10*(y_data%100/10)+c1; //001
if((a1==250)&&(b1!=250)&&(c1==250)) datt=100*(y_data/100)+10*b1+y_data%100%10; //010
if((a1==250)&&(b1!=250)&&(c1!=250)) datt=100*(y_data/100)+10*b1+c1; //011
if((a1!=250)&&(b1==250)&&(c1==250)) datt=100*a1+y_data%100/10+y_data%100%10; //100//
if((a1!=250)&&(b1==250)&&(c1!=250)) datt=100*a1+10*(y_data%100/10)+c1; ///101//
if((a1!=250)&&(b1!=250)&&(c1==250)) datt=100*a1+10*b1+y_data%100%10; ///110//
if((a1!=250)&&(b1!=250)&&(c1!=250)) datt=100*a1+10*b1+c1;
a1=0;b1=0;c1=0;gg=0;gf=0;
return(datt);
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -