⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keybordcontrol.c

📁 89C54构成MC4511锁相环稳定性扫描测试仪器
💻 C
字号:
#define uchar unsigned char
#define uint unsigned int 
#include <AT89x51.H>
#include <stdio.h>
#include<intrins.h>


//给出显示闪烁初值
#define DB_val      200


//定义显示口
sfr Disp_data=0x80;


sbit FLASH=P1^0;
/*sbit A=P1^0;      //设置按键输入*/
sbit BC=P1^1;   //选择按键输入
sbit C=P1^2;   //显示使能输出
sbit D=P1^3;   //显示寄器选择输出
sbit E=P1^4;     //显示模式输出
sbit F=P1^5;
sbit G=P1^6;
sbit H=P2^4;


//定义keybordrow add keyboedcol
sfr keybord_row=0xA0;
sfr keybord_col=0xB0;

//定义LED显示字段码
//static struct
 // {
//   uchar assii;
//   uchar stroke;
// } code led_strokes[27]=\
//  {{'0',0x3f},{'1',0x06},{'2',0x5b},{'3'}
 // }


//函数声明
void init_sys(void);   //初始化系统
uchar disp_read(void); //独出显示数据
uchar get_ch(void);    //键盘输入函数
//uchar get_str(uchar * , uint )
void delay(int);       //延迟时间函数
bit kb_hit(void);      //判断是否有键按下
//void put_0ff_leds(void);//关显示
//void put_on_leds(void); //开显示
void monitor(uchar);
void interface_out(void);  //输出接口扫描from 00000 to 11111
void switch_power(void);    //put off switch_power
//void main1(void);


/*********************************************************************
函数原型:void put_0n_leds(void)
功    能:初始化系统
*********************************************************************
void put_on_leds(void)
{
;
}
*/

/*********************************************************************
函数原型:void put_off_leds(void)
功    能:初始化系统
*********************************************************************
void put_off_leds(void)
{
  
  Disp_data=Disp_data&&0x0f;
}
*/


//延时程序
void delay(int delayValue)
{
 int i;
for(i=0;i<delayValue;i++)
{};
}


/*********************************************************************
函数原型:void init_sys(void)
功    能:初始化系统
*********************************************************************/
void init_sys(void)
{
  uint j;
  //系统初始化,开显示并显示8888
  Disp_data=0xF8;
  FLASH=0;
  for(j=0;j<=DB_val;j++)
   {delay(100);};
  //系统初始化,关显示
  Disp_data=disp_read()&0xF0;
  FLASH=1;
  //系统初始化,开显示并显示8888
  for(j=0;j<=DB_val;j++)
   {delay(100);};
  Disp_data=0xF8;
  FLASH=0;
}



/*********************************************************************
函数原型:void disp_read(void)
功    能:初始化系统
*********************************************************************/
uchar disp_read(void)
{
  uchar value;
  Disp_data=0x0FF;
  value=Disp_data;
  return(value);
}



/*********************************************************************
函数原型:void get_ch(void)
功    能:读出按键值
*********************************************************************/
uchar get_ch(void)
{
  uchar row=0,col=0;
  uchar mask;
  uchar rmask;
  uchar pic;
 // uchar pc;
  keybord_row=0xff;
  keybord_col=0xff;
  mask=keybord_row&0xfe;    //使第1列线为0
  rmask=keybord_row&0xdf;
  if(!kb_hit()) return(0);  //无键按下,输入不成功,返回0。
  //分析按键所在的列号。
  keybord_row=mask;         //使第1列线为0
  while(((keybord_col&0x1f)==0x1f)&&(mask>rmask))
    {
     ++col;
     mask=_crol_(mask,1);
     keybord_row=mask;
    }
  //分析按键所在的行号
  pic=keybord_col&0x1f; 
  mask=0x01;
  while(pic&mask)
   {
    ++row;
    mask=_crol_(mask,1);	
   }
  //等待按键释放。
  while((keybord_col&0x1f)!=0x1f);
  keybord_row=keybord_row|0x1f;
  //计算按键列号
  pic=(row*5)+col;
  //P1=~(pic&0x03F);
  switch(pic&0x3f)
   {
     //case 0: break;
   //case 1: P1=~2;
   //case 2: P1=~4;
   //case 3: P1=~8;
  // case 4: P1=~16;
  // case 5: P1=~32;
  // case 6: P1=~64;
  // case 7: P1=~128;
  // case 8: P1=~256;
  // case 9: P1=~512;
 //  case 10: P1=~1024;
 //  case 11: P1=~2048;
     case 12: switch_power();  break;
     case 13: interface_out(); break;
 //  case 14: P1=~16384;
    default: P1=~(pic&0x03F);
   }   
  return(pic);
}



/*********************************************************************
函数原型:* get_str(uchar * str, uchar len);
功    能:
*********************************************************************
uchar get_str(uchar * str, uint len)
{
/*uchar pdata i;
uchar pdata ch;
uchar pdata keybord_buf[14];  //define keybord buffer
uchar pdata ledbuf_pos=0,keybuf_pos=0; //clear display buffer 
set_led_buf(ox00,0,8);
while(keybuf_pos<len)
 {
  put_on_leds();
  ch=get_ch;
/*如果成功,将显示buffer/
 if(ch)
  {
  for(i=ledbuf_pos;i>0;i--)
      led_buf[i]=led_buf[i-1];
  led_buf[0]=ch;
  if(++ledbuf_pos>7) ledbuf_pos=7;
  keybord_buf[keybuf_pos++]=ch;
  }
 }
for(i=0;i<255;i++) put_on_leds();
memcopy(str,keybord_buf,len);
return(str);*
;
}



/*********************************************************************
函数原型:bit kb_hit(void);
功    能:
*********************************************************************/
bit kb_hit(void)
{
  uchar kb_row;
  uchar kb_col;
  keybord_row=0x0ff;                    
  keybord_col=0x0ff;
  kb_row=keybord_row&0xe0;              //往矩正列线送0
  keybord_row=kb_row;  
  kb_col=keybord_col;                        //读出行线状态
  if((keybord_col&0x1f)==0x1f)                    //输入并见检查行线
   return((bit) 0);                          //行线为1则还回0
   delay(500);
  if((keybord_col&0x1f)==0x1f)
  return((bit) 0);
 return((bit) 1);                       
}

/*********************************************************************
函数原型:void monitor(void)
功    能:初始化系统
*********************************************************************/
void monitor(void)
{
//  uchar command;
  //uchar key;
  //get_ch(uchar pc);
  while(1)
  {
   //put_on_leds();
   //if(message_time==0)
   //{message_flag=0;
   //auto_flush=1;
   //}
   //if(get_ch()){;};
   //P1=0xff;
   //key=pic;
   /*switch(pic)
   {
   case 0: P1=~1;
   case 1: P1=~2;
   case 2: P1=~4;
   case 3: P1=~8;
   case 4: P1=~16;
   case 5: P1=~32;
   case 6: P1=~64;
   case 7: P1=~128;
   case 8: P1=~256;
   case 9: P1=~512;
   case 10: P1=~1024;
   case 11: P1=~2048;
   case 12: P1=~4096;
   case 13: P1=~8192;
   case 14: P1=~16384;
   }*/   
   get_ch();
  }
}


/*********************************************************************
函数原型:void interface_out(void)
功    能:初始化系统
*********************************************************************/
void  interface_out(void)
{
  uchar j,k;
  k=P1&0xe0;
  for(j=0;j<64;j++)
   {
   delay(500);
   delay(500);
   delay(500);
   delay(500);
   delay(500);
   delay(500);
   delay(500);
   delay(500);
   delay(500);
   delay(500);
   delay(500);
   delay(500);
   delay(500);
   delay(500);
   delay(500);
   delay(500);
   delay(500);
   delay(500);
   delay(500);
   delay(500);
   delay(500);
   delay(500);
   delay(500);
   delay(500);
   //P1=0xff;
  // k=P1;
   P1=(~(j&0x1f))|k;
   };
}


/*********************************************************************
函数原型:void swtich_power(void)
功    能:初始化系统
*********************************************************************/
void switch_power(void)
{
  F=0;
}

//主菡数
main()
{
  init_sys();
  monitor();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -