📄 key920.c
字号:
#include <pic.h>
#define PORTBIT(add,bit) ((unsigned)(&add)*8+(bit))
static bit CS_7289 @ PORTBIT(PORTC,5);
static bit CLK_7289 @ PORTBIT(PORTC,4);
static bit SDA_7289 @ PORTBIT(PORTD,3);
static bit KEY_7289 @ PORTBIT(PORTD,2);
static bit led2 @ PORTBIT(PORTC,1);
static bit led1 @ PORTBIT(PORTC,2);
long int i,sum;
void Port_Init_7289(void);
void CS_7289_Enable(void);
void CS_7289_Disable(void);
void CLK_7289_HI(void);
void CLK_7289_LO(void);
void delay_short(void);
void delay_long(void);
void KEY_Reset(void);
void KEY_cmd(char cmd);
void data_write_7289(char);
char read_key(void);
char KEY_value(void);
void Port_Init_7289(void)
{
TRISC = 0X00; //
return;
}
void CS_7289_Enable(void)
{
CS_7289 = 1; //cs(p6.4)口置1
return;
}
void CS_7289_Disable(void)
{
CS_7289 = 0; //cs口置0
return;
}
void CLK_7289_HI(void)
{
CLK_7289 = 1; //时钟置高(1)
return;
}
void CLK_7289_LO(void)
{
CLK_7289 = 0; //时钟置低(0)
return;
}
void delay_short(void)
{
int t;
for(t=0;t<10;t++);
}
void delay_long(void)
{
int t;
for(t=0;t<80;t++);
}
/*复位(清除)函数 */
void KEY_Reset(void)
{
KEY_cmd(0xA4);
}
/*
函数:KEY_cmd()
功能:执行ZLG7289纯指令
参数:
cmd:命令字
*/
void KEY_cmd(char cmd)
{
CS_7289_Disable();
delay_long();
data_write_7289(cmd);
CS_7289_Enable();
delay_long();
}
/*函数:data_write_7289()
功能:向SPI总线写入1个字节的数据
参数:
nVal:要写入的数据
*/
void data_write_7289(char nVal) // 写指令和写数据函数
{
char j;
char nTemp = nVal;
char nSend;
TRISD = 0X00; // 设置SDA为输出管脚,KEY为输入
NOP();
NOP();
NOP();
NOP();
for(j=0;j<8;j++)
{
nSend = (nTemp & 0x80);
if(nSend == 0x80)
{
SDA_7289 = 1;
}
else
{
SDA_7289 = 0;
}
nTemp<<=1; //左移一位
CLK_7289_HI();
delay_short();
CLK_7289_LO();
delay_short();
}
}
/*
函数:read_key()
功能:从SPI总线读取1个字节的数据
返回:
读取到的数据
*/
char read_key()
{
char j;
char nTemp = 0;
TRISD = 0X08; //设置SDA为输入管脚
NOP();
NOP();
NOP();
NOP();
for(j=0;j<8;j++)
{
CLK_7289_HI();
nTemp = nTemp<<1;
if(SDA_7289)
nTemp = nTemp + 1;
delay_short();
CLK_7289_LO();
delay_short();
delay_short();
}
return(nTemp);
}
//读取键值
char KEY_value(void)
{
char keyvalue;
CS_7289_Disable();
delay_long();
data_write_7289(0x15);
delay_long();
keyvalue = read_key();
CS_7289_Enable();
delay_short();
return keyvalue;
}
void main( void )
{
// WDTCTL = WDTPW + WDTHOLD; //关看门狗
unsigned char tst = 0xff;
led2 = 0;
led1 = 1;
Port_Init_7289();
KEY_Reset();
while(1)
{
TRISD = 0X04; //识别键值
KEY_7289 = 1;
delay_short();
if(KEY_7289 == 0)
{
tst = KEY_value();
switch(tst)
{
case 0: led2 = 1;
break;
case 1: led2 = 0;
break;
default: break;
}
KEY_7289 = 1;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -