📄 key.c
字号:
#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 + -