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

📄 key.c

📁 12232液晶驱动和时间显示。矩阵键盘源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "MAIN.H"
#include "KEY.H"

#include <string.h>


//x\y\z\a\b\c\d:PF1\PF2\PF3\PF4\PF5\PF6\PF7
#define x(n)	{if(n) PIN_KEY1=1; else PIN_KEY1=0;}
#define y(n)	{if(n) PIN_KEY2=1; else PIN_KEY2=0;}
#define z(n)	{if(n) PIN_KEY3=1; else PIN_KEY3=0;}



void buzzer_driver_key(void)
{
 flag_key_active=1;
 count_key_timeout=0;
 if(flag_key_buzzer==1)
    {
     PIN_BUZZER=0;
     delay_ms(30);
    }
 PIN_BUZZER=1;
}

void init_key(void)
{
 uchar temp=0;
 uchar temp_buffer[6]={1,2,3,4,5,6};
 PIN_KEY1=1;
 PIN_KEY2=1;
 PIN_KEY3=1;
 PIN_KEY4=1;
 PIN_KEY5=1;
 PIN_KEY6=1;
 PIN_KEY7=1;
 flag_key_buzzer=1;

 //Write_Byte_AT24LC(0x55,code_point_type);
 temp=Read_Byte_AT24LC(code_point_type);
 if(temp==0xff)
   {
    code_sys[0]=0;code_sys[1]=0;code_sys[2]=0;
    code_sys[3]=0;code_sys[4]=0;code_sys[5]=0;
   }

 else if(temp==0x55)
   {
     Read_Buffer_AT24LC(code_sys,6,code_point_addr);
     delay_10us(1);
   }

 else
   {
     PIN_BUZZER=0;
     delay_ms(delay_5);
     PIN_BUZZER=1;
     delay_ms(delay_5);
     PIN_BUZZER=0;
     delay_ms(delay_5);
     PIN_BUZZER=1;
     delay_ms(delay_5);
     PIN_BUZZER=0;
     delay_ms(delay_5);
     PIN_BUZZER=1;
   }

 return;

}



void led_driver_nomarl(void)
{
//    flag_key_buzzer=1;
    PIN_BUZZER=  1;
    PIN_LED_PWR= 0;
    PIN_LED_MODE=1;
    PIN_LED_OPEN=1;
    if(count_temp_led++==80)
       {
        status_machine=m_status_normal_recy;
        count_temp_led=0;
       }
}

void led_driver_recy(void)
{
    PIN_BUZZER=  1;
    PIN_LED_PWR= 1;
    PIN_LED_MODE=1;
    PIN_LED_OPEN=1;
    if(count_temp_led++==80)
       {
        status_machine=m_status_normal;
        count_temp_led=0;
       }

}

void led_driver_mode(void)
{
    PIN_LED_PWR= 0;
    PIN_LED_MODE=0;
    PIN_LED_OPEN=0;

    flag_key_buzzer=  0;

    status_machine=m_status_mode;
}

void led_driver_moded(void)
{

    PIN_BUZZER=  0;
    PIN_LED_PWR= 0;
    PIN_LED_MODE=0;
    PIN_LED_OPEN=1;
    delay_ms(100);
    PIN_BUZZER=  1;
    status_machine=m_status_moded;
}

void led_driver_config(void)
{
    PIN_BUZZER=  1;
    PIN_LED_PWR= 1;
    PIN_LED_MODE=0;
    PIN_LED_OPEN=1;
    status_machine=m_status_config;
}

void led_driver_success(void)
{
    PIN_BUZZER=  0;
    PIN_LED_PWR= 0;
    PIN_LED_MODE=0;
    PIN_LED_OPEN=1;
    delay_ms(20);
    status_machine=m_status_success;
}

void led_driver_error(void)
{
    flag_key_buzzer=1;
    flag_key_active=0;
    PIN_BUZZER=  0;
    PIN_LED_PWR= 1;
    PIN_LED_MODE=0;
    PIN_LED_OPEN=1;
    status_machine=m_status_error;
}

void led_driver_complete(void)
{
    PIN_BUZZER=  1;
    PIN_LED_PWR= 0;
    PIN_LED_MODE=0;
    PIN_LED_OPEN=1;
    status_machine=m_status_complete;
}



uchar key_scan(void)
{
uchar key=0xff;
x(0);
{
delay_ms(delay_5);
	if(PIN_KEY4==0)
		{
			delay_ms(key_delay);
			if(PIN_KEY4==0)
			{key=0x01	; buzzer_driver_key(); x(1); return key;}
		}
	if(PIN_KEY5==0)
		{
			delay_ms(key_delay);
			if(PIN_KEY5==0)
			{key=0x04	; buzzer_driver_key(); x(1); return key;}
		}
	if(PIN_KEY6==0)
		{
			delay_ms(key_delay);
			if(PIN_KEY6==0)
			{key=0x07	; buzzer_driver_key(); x(1); return key;}
		}
	if(PIN_KEY7==0)
		{
			delay_ms(key_delay);
			if(PIN_KEY7==0)
			{key=10        	; buzzer_driver_key(); x(1); return key;}//'*'
		}
	x(1);
}

y(0);
{
delay_ms(delay_5);
	if(PIN_KEY4==0)
		{
			delay_ms(key_delay);
			if(PIN_KEY4==0)
			{key=0x02	; buzzer_driver_key(); y(1); return key;}
		}
	if(PIN_KEY5==0)
		{
			delay_ms(key_delay);
			if(PIN_KEY5==0)
			{key=0x05	; buzzer_driver_key(); y(1); return key;}
		}
	if(PIN_KEY6==0)
		{
			delay_ms(key_delay);
			if(PIN_KEY6==0)
			{key=0x08	; buzzer_driver_key(); y(1); return key;}
		}
	if(PIN_KEY7==0)
		{
			delay_ms(key_delay);
			if(PIN_KEY7==0)
			{key=0x00	; buzzer_driver_key(); y(1); return key;}
		}
	y(1);
}

z(0);
{
delay_ms(delay_5);
	if(PIN_KEY4==0)
		{
			delay_ms(key_delay);
			if(PIN_KEY4==0)
			{key=0x03	; buzzer_driver_key(); z(1); return key;}
		}
	if(PIN_KEY5==0)
		{
			delay_ms(key_delay);
			if(PIN_KEY5==0)
			{key=0x06	; buzzer_driver_key(); z(1); return key;}
		}
	if(PIN_KEY6==0)
		{
			delay_ms(key_delay);
			if(PIN_KEY6==0)
			{key=0x09	; buzzer_driver_key(); z(1); return key;}
		}
	if(PIN_KEY7==0)
		{
			delay_ms(key_delay);
			if(PIN_KEY7==0)
			{key=11         ; buzzer_driver_key(); z(1); return key;}//'#'
		}
	z(1);
}
return key;
}



void key_process(void)
{
  uchar idata i=0;
  uchar idata j=0;
  uchar idata flags=0;
  uchar idata key=0xff;
  uchar idata temp=0xff;
  uint  idata temp_addr;
  uchar idata temp_door_delay[3];
//  uchar idata temp_buffer[count_byte_page];

 if(flag_key_active==0)//第一次按键
 {
  key=key_scan();

  if(key==0xff)//无效按键或无按键
  {
        return;
  }
  if(key==10)
  {
        flag_key_active=0;
        return;
  }
  if(key==11)//进入设置状态
  {
        tick_count_temp=tick_count;
        flag_key_buzzer=0;
  }

  else//密码开门
  {
   if(status_reader==r_status_null)
   {
    i=1;
    status_machine=m_status_null;
    reader_1.dat=(reader_1.dat<<4) | (key&0x0000000f);
    while(flag_key_active)
    {
      key=key_scan();
      if(key==10)
        {

⌨️ 快捷键说明

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