📄 zlg7289.c
字号:
#include "zlg7289.h"
//------------------------------------------------------------
void Delay_Nms(unsigned int ms)
{
while (ms--)
_delay_ms(1);
}
void Delay_Nus(unsigned int us)
{
while (us--)
_delay_us(1);
}
//-------------------------------------------------------------
void ZLG7289_SPI_Write(uchar dat)
{
unsigned char i;
ZLG7289_DATA_PORT_H ;
ZLG7289_DATA_DDR_OUT ;
for (i=0;i<8;i++)
{
ZLG7289_CLK_PORT_L ;
Delay_Nus(5);
if(dat & 0x80)
ZLG7289_DATA_PORT_H ;
else
ZLG7289_DATA_PORT_L ;
ZLG7289_CLK_PORT_H ;
Delay_Nus(5);
dat <<= 1;
}
}
////////////////////////////////////////////////////
/*
函数:ZLG7289_SPI_Read()
功能:从SPI 总线读取1 个字节的数据
返回:
读取到的数据
*/
uchar ZLG7289_SPI_Read(void)
{
unsigned char i;
uchar dat=0 ;
ZLG7289_DATA_PORT_H ;
ZLG7289_DATA_DDR_IN ;//需要有一个上升沿作为输入输出的转变
for (i=0;i<9;i++)
{
ZLG7289_CLK_PORT_H;
Delay_Nus(5);
dat = dat<<1;
if(ZLG7289_DATA_PINA)dat++;
ZLG7289_CLK_PORT_L;
Delay_Nus(5);
}
return(dat);
}
/*
功能:执行ZLG7289 键盘命令
返回:
返回读到的按键值:0~63
如果返回0xFF 则表示没有键按下
*/
uchar ZLG7289_Key(void)
{
uchar key=0;
ZLG7289_CS_PORT_L ;
Delay_Nus(25);
ZLG7289_SPI_Write(0x15);
Delay_Nus(25);
key = ZLG7289_SPI_Read();
ZLG7289_CS_PORT_H ;
Delay_Nus(25);
return key;
}
/*
函数:ZLG7289_Init()
功能:ZLG7289 初始化
参数:
t:SPI 总线的延时值设置,取值1-40(超出范围可能导致错误)
说明:
t的取值可以参照以下公式:t >= 5 * f1 / f2,其中f1 表示80C51 的
晶振频率,f2 表示ZLG7289 的晶振频率
*/
void ZLG7289_Init(void)
{
ZLG7289_CS_DDR_OUT ;
ZLG7289_CLK_DDR_OUT ;
ZLG7289_DATA_DDR_OUT ;
ZLG7289_KEY_DDR_IN ;
ZLG7289_CS_PORT_H ;
ZLG7289_KEY_PORT_R ;
ZLG7289_CLK_PORT_L ;
ZLG7289_DATA_PORT_H ;
Delay_Nus(25);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -