📄 key.c
字号:
#include <reg52.h>
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#include <iccard.h>
#define nop _nop_()
bit key_flag;
uchar key_value;
void wt_dog()
{
x5045_cs=1;
nop;nop;nop;
x5045_cs=0;
nop;nop;nop;
x5045_cs=1;
}
void delay(uint16 x)
{
uint16 i,k;
for(i=x;i>0;i--)
{
for(k=5000;k>0;k--);
wt_dog();
}
}
void delayns()
{
uchar i;
for(i=0;i<10;i++);
}
void init_7289()
{
IT1=0;//设置为电平出发
EA=1;
EX1=1;
key_cs=1;
key_flag=0;
key_value=0xaa;
}
void send_key(uchar cmd)
{
uchar i,k;
k=cmd;
for(i=8;i>0;i--)
{
key_clk=0;
delayns();
if(k&0x80)key_dat=1;
else key_dat=0;
key_clk=1;
delayns();
key_clk=0;
delayns();
k<<=1;
}
}
void sendcmd_key(uchar cmd)
{
key_cs=0;
send_key(cmd);
key_cs=1;
}
void senddat_key(uchar cmd,uchar dat)
{
key_cs=0;
send_key(cmd);
delayns();
send_key(dat);
key_cs=1;
}
uchar getkey_key()//
{
uchar j,key;
key=0;
key_cs=0;
send_key(getkey_7289);
key_dat=1;
for(j=8;j>0;j--)
{
key_clk=0;
delayns();
key_clk=1;
delayns();
if(key_dat)key=key*2+1;
else key=key*2;
key_clk=0;
delayns();
}
key_cs=1;
return(key);
}
void disp_key(uchar x)
{
uchar i;
i=x;
sendcmd_key(reset_7289);
senddat_key(disp1_7289|7,i&0x0f);
i>>=4;
senddat_key(disp1_7289|6,i&0x0f);
}
void key_disp(uint32 dat)
{
uchar i;
uint32 k;
k=dat;
i=(uchar)k;
sendcmd_key(reset_7289);
senddat_key(disp1_7289|7,i&0x0f);
k>>=4;
i=(uchar)k;
senddat_key(disp1_7289|6,i&0x0f);
k>>=4;
i=(uchar)k;
senddat_key(disp1_7289|5,i&0x0f);
k>>=4;
i=(uchar)k;
senddat_key(disp1_7289|4,i&0x0f);
k>>=4;
i=(uchar)k;
senddat_key(disp1_7289|3,i&0x0f);
k>>=4;
i=(uchar)k;
senddat_key(disp1_7289|2,i&0x0f);
k>>=4;
i=(uchar)k;
senddat_key(disp1_7289|1,i&0x0f);
k>>=4;
i=(uchar)k;
senddat_key(disp1_7289|0,i&0x0f);
}
void Getkey_IRQ() interrupt 2
{
EX1=0;
if(key_flag==0)
{
key_value=getkey_key();
key_flag=1;
}
while(INT1==0);
EX1=1;
}
void key_main (void)
{
delay(5);
init_7289();
sendcmd_key(reset_7289);
sendcmd_key(test_7289);
delay(20);
delay(20);
sendcmd_key(reset_7289);
senddat_key(disp1_7289|0,0x00);
senddat_key(disp1_7289|1,0x01);
senddat_key(disp1_7289|2,0x02);
senddat_key(disp1_7289|3,0x03);
senddat_key(disp1_7289|4,0x04);
senddat_key(disp1_7289|5,0x05);
senddat_key(disp1_7289|6,0x06);
senddat_key(disp1_7289|7,0x07);
delay(20);
delay(20);
delay(20);
delay(20);
sendcmd_key(reset_7289);
while(1)
{
if(key_flag==1)
{
key_flag=0;
disp_key(key_value);
delay(20);
}
wt_dog();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -