?? 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 + -