⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zlg7289.c

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