📄 zlg7289.c
字号:
#include <reg52.h>
#include <ZLG7289.h>
//定义一个全局变量,用于延时
//该变量在调用函数ZLG7289_Init()时被初始化
unsigned char ZLG7289_Delay_t;
/*
宏定义:ZLG7289_ShortDelay()
功能:短延时
说明:延时(ZLG7289_Delay_t*2+2)个机器周期
*/
ZLG7289_ShortDelay()
{
unsigned char t=ZLG7289_Delay_t;
while(--t!=0);
}
/*
宏定义:ZLG7289_LongDelay()
功能:长延时
说明:延时(ZLG7289_Delay_t*12+8)个机器周期
*/
ZLG7289_LongDelay()
{
unsigned char t = ZLG7289_Delay_t*6;
while(--t!=0);
}
/*
函数: ZLG7289_SPI_Write()
功能: 向SPI总线写入1个字节的数据
参数:
dat:要写入的数据
*/
void ZLG7289_SPI_Write(char dat)reentrant
{
unsigned char t = 8;
do
{
ZLG7289_pinDIO = (bit)(dat & 0x80);
dat<<=1;
ZLG7289_pinCLK = 1;
ZLG7289_shortDelay();
ZLG7289_pinCLK = 0;
ZLG7289_shortDelay();
}while(--t !=0 );
}
/*
函数: ZLG7289_SPI_Read()
功能: 从SPI总线读取1个字节的数据
返回:
读取到的数据
*/
char ZLG7289_SPI_Read() reentrant
{
char dat;
unsigned char t = 8;
ZLG7289_pinDIO = 1; //读取数据之前DIO 引脚要置1一切换到输入状态
do
{
ZLG7289_pinCLK = 1;
ZLG7289_ShortDelay();
dat<<=1;
if(ZLG7289_pinDIO) dat++;
ZLG7289_pinCLK = 0;
ZLG7289_ShortDelay();
} while(--t!=0);
return dat;
}
/*
函数: ZLG7289_cmd()
功能: 执行ZLG7289纯指令
参数:
cmd: 命令字
*/
void ZLG7289_cmd(char cmd)
{
char sav = IE;
IE &=0xFA; //关闭外部中断
ZLG7289_pinCS=0;
ZLG7289_LongDelay();
ZLG7289_SPI_Write(cmd);
ZLG7289_pinCS = 1;
ZLG7289_LongDelay();
IE = sav; //恢复IE
}
/*
函数: ZLG7289_cmd_dat()
功能: 执行ZLG7289带数据指令
参数:
cmd: 命令字
dat:数据
*/
void ZLG7289_cmd_dat(char cmd,char dat)
{
char sav = IE;
IE &=0xFA; //关闭外部中断
ZLG7289_pinCS = 0;
ZLG7289_LongDelay();
ZLG7289_SPI_Write(cmd);
ZLG7289_LongDelay();
ZLG7289_SPI_Write(dat);
ZLG7289_pinCS = 1;
ZLG7289_LongDelay();
IE = sav; //恢复IE
}
/*
功能:执行ZLG7289键盘命令
返回:
返回读到的键值:0~63
如果返回0xFF则表示没有键按下
*/
char ZLG7289_Key()reentrant
{
char key;
ZLG7289_pinCS = 0;
ZLG7289_LongDelay();
ZLG7289_SPI_Write(0x15);
ZLG7289_LongDelay();
key = ZLG7289_SPI_Read();
ZLG7289_pinCS = 1;
ZLG7289_LongDelay();
return key;
}
/*
函数:ZLG7289_Init()
功能:ZLG7289初始化
参数:
t: SPI总线的延时值设置,取值1—40(超出范围可能导致错误)
说明
t 的取值可以参照以下公式:t >=5*f1/f2,其中f1表示80c51的晶振频率,f2表示ZLG7289的晶振频率
*/
void ZLG7289_Init(unsigned char t)
{
unsigned char x;
//I/O口初始化
ZLG7289_pinCS = 1;
ZLG7289_pinCLK = 0;
ZLG7289_pinDIO = 1;
ZLG7289_pinINT = 1;
//延时初始化
ZLG7289_Delay_t = t;
}
void main()
{
while(1){
unsigned char key_value;
ZLG7289_Init();
key_value = ZLG7289_Key();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -