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

📄 zlg7289.c

📁 读写zlg7289的程序
💻 C
字号:
#ifndef	KEY_C
#define	KEY_C
#include "config.h"
/***********************************************/
//extern void Delay10ms(uint times);
#define  De1us()		nop();nop();nop();nop()
#define	KEY_DELAY5US()		De1us();De1us();De1us();De1us();De1us()
void KeyDelay10us(uchar i){
	while(i--){
		KEY_DELAY5US();
		KEY_DELAY5US();
	}
}
/***********************************************/
//#define SOFT_RESET_ZLG7289		//定义键盘的复位要通过软件来进行
#ifdef SOFT_RESET_ZLG7289
	#define	RESET_KEY();		sbitKeyRset=0;RESET_OUTPUT();	Delay10ms(3);sbitKeyRset=1;RESET_OUTPUT();Delay10ms(3);		//KEY芯片复位
#endif
#define	KEY_SEL();			pinKeyEn=0;
#define	KEY_NO_SEL();		pinKeyEn=1;
/*****************************************/
/*****************zlg7289控制命令字************************/
#define	RESET_ZLG7289	0xa4		//芯片状态清除
#define READ_KEY		0x15		//读键值
/***************************************

** 函数名称: KeySendByte
** 功能描述: 发送一个字节到zlg7289A中
				高位在前

*****************************************/
void	KeySendByte(uchar x){
uchar	idata	ucByte=8;
	KEY_SEL();		//选中芯片
	for(;ucByte>0;ucByte--){
		if(x & 0x80)
			pinKeyData=1;
		else
			pinKeyData=0;
		x<<=1;
		KEY_DELAY5US();
		pinKeyClk=1;
		KeyDelay10us(1);
		pinKeyClk=0;
		KeyDelay10us(1);
	}
	pinKeyData=0;
}
/***************************************
** 函数名称: KeyRcvByte
** 功能描述: 从zlg7289A中接收一个字节
				高位在前

*****************************************/
uchar  KeyRcvByte(void){
uchar	idata	ucByte=8;
uchar	idata	x=0;
	pinKeyData=1;
	KEY_SEL();
//	KeyDelay10us(7);
	for(;ucByte>0;ucByte--){
		pinKeyClk=1;
		KeyDelay10us(1);
		x<<=1;
		if(pinKeyData)
			x|=1;

		pinKeyClk=0;
		KeyDelay10us(1);
	}
	pinKeyData=0;
	KEY_NO_SEL();
	return x;
}
/*---------------------用户函数-----------------*/
/***************************************
** 函数名称: InitKey
** 功能描述: 初始化zlg7289A

*****************************************/
void	InitKey(){
	pinKeyInt=pinKeyClk=pinKeyData=1;
#ifdef  SOFT_RESET_ZLG7289
	RESET_KEY();
	Delay10ms(5);
#endif
	KeySendByte(RESET_ZLG7289);
	KEY_NO_SEL();
}
/***************************************
** 函数名称: TestDisplay
** 功能描述: 测试LED指令

*****************************************/
void TestDisplay(){
	KeySendByte(0xbf);
}
/***************************************
** 函数名称: RcvKeyVaule
** 功能描述: 接收键值

*****************************************/
uchar RcvKeyVaule(){
	KeySendByte(READ_KEY);
	return (KeyRcvByte());
}

/**************************************************/
/**************************************************/
/**************************************************/
/*****************LED显示部分************************/
/***************************************
** 函数名称: DisplayData
** 功能描述: 显示数据
** 输 入: dp:=1,显示点
		   addr:要显示的位
		   		1-8;
		   	disData:数据
		   	输入数据	  显示内容
		   	00--09h :     	0-9
		   	0A				--
		   	0B				E
		   	0c				H
		   	0d				L
		   	0e				P
		   	0f				空(不显示)


*****************************************/
#define		HIDE_DATA	0x0f		//不显示
#define		DISPLAY_DP	1			//显示DP
void DisplayData(bit dp,uchar addr,uchar disData){
	if(addr==0 || addr>8)return;
	if(disData>0x0f)return;
	addr-=1;
	KeySendByte(0x80+addr);
	nop();nop();nop();nop();
	if(dp)
		disData+=0x80;
	KeySendByte(disData);
}
/***************************************
** 函数名称: HideDisplay
** 功能描述: 隐藏其中的位
** 输 入: hideData:要隐藏的数据,
			以BIT为单位,
			bit 7 6 ....0
		控制位  8 7.....1
		要消隐其中一位,把它写1,显示写0

*****************************************/
void HideDisplay(uchar hideData){
	hideData&=0x3f;
	hideData^=0x3f;
	KeySendByte(0x98);
	nop();nop();nop();nop();
	KeySendByte(hideData);
}
/***************************************
** 函数名称: FlashDisplay
** 功能描述: 闪烁显示其中的位
** 输 入: flashData:闪烁显示的数据,
			以BIT为单位,
			bit 7 6 ....0
		控制位  8 7.....1
		要闪烁其中一位,把它写1,不闪烁写0

*****************************************/
void FlashDisplay(uchar flashData){
	KeySendByte(0x88);
	nop();nop();nop();nop();
	KeySendByte(flashData);
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -