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

📄 zlg7289.c

📁 zlg7289是一款很好的键盘驱动芯片
💻 C
字号:
/*ZLG7289.c
数码管显示与键盘管理芯片ZLG7289 的MSP430驱动程序(C430)
Copyright (c) 2005,广州周立功单片机发展有限公司
All rights reserved.
本程序仅供学习参考,不提供任何可靠性方面的担保;请勿用于商业目的。
*/

#include "ZLG7289.h"
//定义一个全局变量,用于延时
//该变量在调用函数ZLG7289_Init()时被初始化

unsigned char ZLG7289_Delay_t;

/*宏定义:ZLG7289_ShortDelay()
功能:短延时
说明:延时(ZLG7289_Delay_t*2+2)个机器周期*/

extern void ZLG7289_ShortDelay() 
{
    unsigned char t;
    t = ZLG7289_Delay_t;
    while ( --t != 0 );
}

/*宏定义:ZLG7289_LongDelay()
功能:长延时
说明:延时(ZLG7289_Delay_t*12+8)个机器周期*/

extern void ZLG7289_LongDelay() 
{
    unsigned char t;
    t = ZLG7289_Delay_t * 6;
    while ( --t != 0 );
}

/*
函数:ZLG7289_SPI_Write()
功能:向SPI 总线写入1 个字节的数据
参数:
dat:要写入的数据
*/

void ZLG7289_SPI_Write(unsigned char dat)
{
	unsigned char t = 8;
	do
	{
		if (((dat & 0x80)>>7) == 1)
		{
		        SETDAT;
		}
		else    CLRDAT;
		        
		dat <<= 1;
		SETCLK;
		ZLG7289_ShortDelay();
		CLRCLK;
		ZLG7289_ShortDelay();
	} while ( --t != 0 );
}

/*函数:ZLG7289_SPI_Read()
功能:从SPI 总线读取1 个字节的数据
返回:
读取到的数据*/

unsigned char ZLG7289_SPI_Read(void)
{
	unsigned char dat;
	unsigned char t = 8;
	
	DATA_IN; //读取数据之前DIO 引脚要切换到输入状态
	do
	{
		SETCLK;
		ZLG7289_ShortDelay();
		dat <<= 1;
		if ( !(DATA_0) ) dat++;
		
		CLRCLK;
		ZLG7289_ShortDelay();
	} while ( --t != 0 );
	DATA_OUT;
	return dat;
}

/*
函数:ZLG7289_cmd()
功能:执行ZLG7289 纯指令
参数:
cmd:命令字
*/

void ZLG7289_cmd(unsigned char cmd)
{
	CLRCS;
	ZLG7289_LongDelay();
	ZLG7289_SPI_Write(cmd);
	SETCS;
	ZLG7289_LongDelay();
}

/*
函数:ZLG7289_cmd_dat()
功能:执行ZLG7289 带数据指令
参数:
cmd:命令字
dat:数据
*/

void ZLG7289_cmd_dat(unsigned char cmd, unsigned char dat)
{
	CLRCS;
	ZLG7289_LongDelay();
	ZLG7289_SPI_Write(cmd);
	ZLG7289_LongDelay();
	ZLG7289_SPI_Write(dat);
	SETCS;
	ZLG7289_LongDelay();
}

/*
函数:ZLG7289_Show()
功能:在指定位显示指定段码
参数:
add:数码管编号(横坐标),取值0~7

coding=0:下载数据且按方式0 译码
coding=1:下载数据且按方式1 译码
coding=2:下载数据但不译码

d:要显示的数据

dp=0:小数点不亮
dp=1:小数点亮

说明:
译码方式的具体含义请参考数据手册
*/

void ZLG7289_Show(unsigned char add,unsigned char coding,unsigned char d,unsigned char dp)
{
	unsigned char ModDat[3] = {0x80,0xC8,0x90};
	unsigned char d1;
	unsigned char d2;
	if ( coding > 2 ) coding = 2;
	d1 = ModDat[coding];
	add &= 0x07;
	d1 |= add;
	d2 = d & 0x7F;
	if ( dp ) d2 |= 0x80;
	ZLG7289_cmd_dat(d1,d2);
}
/*----闪烁控制----*/
void ZLG7289_Flash(unsigned char led)
{	ZLG7289_cmd_dat(0x88,led);
}
/*----消隐控制----*/
void ZLG7289_Stash(unsigned char led)
{	ZLG7289_cmd_dat(0x98,led);
}
/*----段点亮控制----*/
void ZLG7289_Light(unsigned char led)
{	ZLG7289_cmd_dat(0xE0,led);
}
/*----段关闭控制----*/
void ZLG7289_Close(unsigned char led)
{	ZLG7289_cmd_dat(0xC0,led);
}

/*
功能:执行ZLG7289 键盘命令
返回:
返回读到的按键值:0~63
如果返回0xFF 则表示没有键按下
*/
unsigned char ZLG7289_ReadKey(void) 
{
	unsigned char key;
	CLRCS;
	ZLG7289_LongDelay();
	ZLG7289_SPI_Write(0x15);
	ZLG7289_LongDelay();
	key = ZLG7289_SPI_Read();
	SETCS;
	ZLG7289_LongDelay();
	return key;
}






/*
函数:ZLG7289_Init()
功能:ZLG7289 初始化
参数:
t:SPI 总线的延时值设置,取值1-40(超出范围可能导致错误)
说明:
t的取值可以参照以下公式:t >= 5 * f1 / f2,其中f1 表示80C51 的
晶振频率,f2 表示ZLG7289 的晶振频率
*/

void ZLG7289_Init(void)
{
	unsigned char x;
	
	//I/O 口初始化
	SETCS;
	CLRCLK;
	SETDAT;
	
	
	//延时初始化
	ZLG7289_Delay_t = TIMEINIT;
	
	//点亮所有数码管
	for ( x=0; x<8; x++ )
	{
		ZLG7289_Show(x,1,8,1);
	}
}

⌨️ 快捷键说明

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