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

📄 zlg7289.c

📁 周立功的ZLG7289芯片组成的键盘
💻 C
字号:
#include <reg51.h>
#include"zlg7289.h"


//函数:ZLG7289_Delay()
//功能:短延时
//说明:延时长度由Delay_T决定
void ZLG7289_Delay(uchar Delay_T)
{
	uchar i;
	for(i=0;i<Delay_T;i++);
	}


//函数:SPI_WriteOneByte()
//功能:向SPI总线写数据
//说明:写入的数据长度为1字节
void SPI_WriteOneByte(uchar Wdata)
{
	uchar i;
	for(i=0;i<8;i++)
	{
		ZLG7289_DIO = (bit)(Wdata&0x80);
		ZLG7289_CLK = 1;
		Wdata <<= 1;
		ZLG7289_Delay(1);
		ZLG7289_CLK	= 0;
		ZLG7289_Delay(1);
		
		}
	}


//函数:SPI_ReadOneByte()
//功能:从SPI总线读数据
//说明:返回1字节数据
uchar SPI_ReadOneByte()
{
	uchar i,temp;
	ZLG7289_DIO = 1;			//将I/O切换到输入状态
	for(i=0;i<8;i++)
	{
		ZLG7289_CLK = 1;
		ZLG7289_Delay(5);
		temp <<= 1;
		if(ZLG7289_DIO) temp++;
		ZLG7289_CLK	=	0;
		ZLG7289_Delay(5);
		}
	return temp;
	}

//函数:ZLG7289_Instruc()
//功能:执行ZLG7289纯指令
//说明:指令长度为1字节
void ZLG7289_Instruc(uchar Instruc)
{
	uchar i;
	i = IE;
	IE &= 0xfa;							// Disable external interrupt;
	ZLG7289_CS = 0;
	ZLG7289_Delay(5);
	SPI_WriteOneByte(Instruc);
	ZLG7289_CS = 1;
	ZLG7289_Delay(5);
	IE = i;								
	}


//函数:ZLG7289_Instruc_Data
//功能:执行ZLG7289带数据指令
//说明:指令长度以及数据长度均为1字节
void ZLG7289_Instruc_Data(uchar Instruc,uchar Data)
{
	uchar i;
	i = IE;
	IE &= 0xfa;
	ZLG7289_CS = 0;
	ZLG7289_Delay(5);
	SPI_WriteOneByte(Instruc);
	ZLG7289_Delay(5);
	SPI_WriteOneByte(Data);
	ZLG7289_CS = 1;
	ZLG7289_Delay(5);
	IE = i;
	}



//函数:ZLG7289_ReadKey()
//功能:执行ZLG7289读键盘指令
//说明:返回1字节的按键号
//			按键号的范围为:0 ~ 63(即0x0 ~ 0x3f)
//			若没有按按键被按下了,返回255(即0xff)
uchar ZLG7289_ReadKey()
{
	uchar Key;
	ZLG7289_CS = 0;
	ZLG7289_Delay(10);
	SPI_WriteOneByte(0x15);
	ZLG7289_Delay(5);
	Key = SPI_ReadOneByte();
	ZLG7289_Delay(1);
	ZLG7289_CS = 1;
	ZLG7289_Delay(5);
	return Key;
	}


//函数:ZLG7289_Init()
//功能:初始化ZLG7289
//说明:主要是对I/O进行初始化
void ZLG7289_Init()
{
	ZLG7289_CS = 1;
	ZLG7289_CLK = 0;
	ZLG7289_DIO = 1;
	ZLG7289_INT = 1;
	}


//函数:ZLG7289_Reset()
//功能:ZLG7289复位指令
#define ZLG7289_Reset()		ZLG7289_Instruc(0xa4)


//函数:ZLG7289_Test()
//功能:ZLG7289测试指令
#define ZLG7289_Test()		ZLG7289_Instruc(0xbf)


//函数:ZLG7289_SHL()
//功能:ZLG7289左移指令
#define ZLG7289_SHL()			ZLG7289_Instruc(0xa0)


//函数:ZLG7289_SHR()
//功能:ZLG7289右移指令
#define ZLG7289_SHR()			ZLG7289_Instruc(0xa1)


//函数:ZLG7289_ROL()
//功能:ZLG7289循环左移指令
#define ZLG7289_ROL()			ZLG7289_Instruc(0xa2)


//函数:ZLG7289_ROR()
//功能:ZLG7289循环右移指令
#define ZLG7289_ROR()			ZLG7289_Instruc(0xa3)


//函数:ZLG7289_Down_Data()
//功能:ZLG7289下载数据
//说明:形参Decode_mod:模式选择(取值范围:1 ~ 3):1--模式0译码;2--模式1译码;3--不译码
//			Disp_addr:			数码管显示数据的位地址(取值范围:0 ~ 7)
//			Disp_dp:				小数点控制:0--小数点被点亮,1--小数点被熄灭
//			Disp_data:			显示的数据
void ZLG7289_Down_Data(uchar Decode_mod,uchar Disp_addr,bit Disp_dp,uchar Disp_data)
{
	uchar Mode[] = {0x80,0xc8,0x90};
	uchar temp,temp1;
	if(Decode_mod==0x01) 
		temp = Mode[0];
	else if(Decode_mod==0x02)
		temp = Mode[1];
	else if(Decode_mod==0x03)
		temp = Mode[2];
	if(Disp_dp==1)
		temp1 = 0x80;
	else
		temp1 = 0x00;
	ZLG7289_Instruc_Data((temp | Disp_addr),(temp1 | (Disp_data&0x7f)));		
	}


//函数:ZLG7289_Glint
//功能:ZLG7289闪烁控制
//说明:形参temp为8bits数据,
//      从temp的最高位置(MSB)到最低位(LSB)分别代表数码管的第7到第0位
//			0--闪烁,1--不闪烁
#define ZLG7289_Glint(temp)			ZLG7289_Instruc_Data(0x88,(temp))


//函数:ZLG7289_Hide
//功能:ZLG7289消隐控制
//说明:形参temp为8bits数据,
//			从temp的最高位置(MSB)到最低位(LSB)分别代表数码管的第0到第7位
//			0--消隐,1--显示;复位后所有位都不消隐
#define ZLG7289_Hide(temp)			ZLG7289_Instruc_Data(0x98,(temp))


//函数:ZLG7289_Seg_On
//功能:ZLG7289段点亮指令
//说明:形参seg的最高位置(MSB)到最低位(LSB)的格式为“XXd5d4d3d2d1d0”
//			其中“XX”为无关位,d5d4d3d2d1d0为6位段地址。
//			点亮顺序为g、f、e、d、c、b、a、dp
#define ZLG7289_Seg_On(seg)			ZLG7289_Instruc_Data(0xe0,(seg))


//函数:ZLG7289_Seg_Off
//功能:ZLG7289段关闭指令
//说明:形参seg的最高位置(MSB)到最低位(LSB)的格式为“XXd5d4d3d2d1d0”
//			其中“XX”为无关位,d5d4d3d2d1d0为6位段地址。
//			关闭顺序为g、f、e、d、c、b、a、dp
#define ZLG7289_Seg_Off(seg)		ZLG7289_Instruc_Data(0xc0,(seg))

⌨️ 快捷键说明

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