📄 zlg7289.c
字号:
#include <msp430x14x.h>
#include "ZLG7289.h"
unsigned char ZLG7289_ReadKey(void);
void ZLG7289_PrintUcharHEX(unsigned char Data);
void ZLG7289_PrintUintHEX(unsigned int Data,unsigned char Offset);
void main(void)
{
CloseWDT; //停止看门狗
ZLG7289_Init();
Z7279_INT_DIR &= ~ZLG7289_KEY;
Z7279_INT_IE |= ZLG7289_KEY;
Z7279_INT_IES |= ZLG7289_KEY;
_BIS_SR(GIE);
ZLG7289_RESET;
ZLG7289_Delayt(10);
ZLG7289_Show(2,1,8);
while(1);
}
#pragma vector=PORT2_VECTOR
__interrupt void PORT2_ISR (void)
{
unsigned char keyword;
keyword = ZLG7289_ReadKey();
_NOP();
ZLG7289_PrintUcharHEX(keyword);
Z7279_INT_IFG = 0;
}
void ZLG7289_Init(void)
{
//ZLG7289_DIR |= (ZLG7289_CS + ZLG7289_CLK + ZLG7289_DAT);
ZLG7289_CS_HI;
ZLG7289_CLK_LO;
ZLG7289_RESET;
}
//模拟SPI通信
void ZLG7289_SPI_Write(unsigned char dat)
{
unsigned char itemp;
ZLG7289_CS_LO;
ZLG7289_Delayt(1);
for(itemp=0;itemp<8;itemp++)
{
if((dat<<itemp) & BIT7)
{ZLG7289_DAT_HI;}
else
{ZLG7289_DAT_LO;}
ZLG7289_Delayt(1);
ZLG7289_CLK_HI;
ZLG7289_Delayt(1);
ZLG7289_CLK_LO;
}
ZLG7289_CS_HI;
}
unsigned char ZLG7289_SPI_Read(void)
{
unsigned char itemp,dat;
ZLG7289_DIR &= ~ZLG7289_DAT;
ZLG7289_Delayt(1);
for(itemp=0;itemp<8;itemp++)
{
ZLG7289_CLK_HI;
ZLG7289_Delayt(1);
ZLG7289_CLK_LO;
dat<<=1;
if((ZLG7289_IN&ZLG7289_DAT)==ZLG7289_DAT)
dat |= BIT0;
else
dat &= ~BIT0;
}
ZLG7289_DIR |= ZLG7289_DAT;
ZLG7289_CS_HI;
for(itemp=0;itemp<16;itemp++)
if(dat==Keys[itemp])
break;
return itemp;
}
//向ZLG7289发送命令
void ZLG7289_cmd(unsigned char dat)
{
ZLG7289_SPI_Write(dat);
}
//向ZLG7289发送命令.数据
void ZLG7289_cmd_dat(unsigned char add,unsigned char dat)
{
ZLG7289_SPI_Write(add);
ZLG7289_Delayt(1);
ZLG7289_SPI_Write(dat);
ZLG7289_CS_HI;
}
//向ZLG7289发送命令后,读取按键键值,并查表返回结果
unsigned char ZLG7289_ReadKey(void)
{
unsigned char itemp;
ZLG7289_SPI_Write(0x15);
// ZLG7289_DIR &= ~ZLG7289_DAT;
ZLG7289_Delayt(1);
itemp=ZLG7289_SPI_Read();
return itemp;
}
//按照编码方式显示字符
void ZLG7289_Show(unsigned char add,unsigned char coding,unsigned char d)
{
ZLG7289_cmd_dat(Code[coding]+add,d);
}
void ZLG7289_PrintUcharHEX(unsigned char Data)
{
ZLG7289_RESET;
ZLG7289_Show(0,1,Data%16);
ZLG7289_Show(1,1,Data/16);
}
void ZLG7289_PrintUintHEX(unsigned int Data,unsigned char Offset)
{
unsigned char i;
if(Offset>8) Offset%=8;
//// ZLG7289_RESET;
/*
ZLG7289_Show(0,1,Data%0x0010);
ZLG7289_Show(1,1,(Data/0)%0x0010);
ZLG7289_Show(2,1,Data%16);
ZLG7289_Show(3,1,Data/16);
*/
for(i=0;i<4;i++)
{
ZLG7289_Show((8-Offset-4)+i,1,Data%0x0010);
Data/=0x0010;
}
}
void ZLG7289_Delayt(unsigned int dtime)
{
unsigned int itemp,jtemp;
for(itemp=0;itemp<dtime;itemp++)
for(jtemp=0;jtemp<DelayConst;jtemp++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -