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

📄 zlg7289.c

📁 周立功电子鼠V1.3内部演示版源程序
💻 C
字号:
#include "Zlg7289.h"
/*PC*/
#define ZLG7289_pinCS		GPIO_PIN_0
#define ZLG7289_pinCLK		GPIO_PIN_1
#define ZLG7289_pinDIO		GPIO_PIN_2
/*PB*/
#define KEY					GPIO_PIN_3
/*
函数:ZLG7289_ShortDelay()
功能:短延时
说明:延时(ZLG7289_Delay_t*2+2)个机器周期
*/
void ZLG7289_ShortDelay()
{
	uint32 t = 40;
	while ( --t != 0 );
}
/*
函数:ZLG7289_LongDelay()
功能:长延时
说明:延时(ZLG7289_Delay_t*12+8)个机器周期
*/
void ZLG7289_LongDelay()
{
	uint32 t = 240;
	while ( --t != 0 );
}
/*
函数:ZLG7289_SPI_Write()
功能:向SPI 总线写入1 个字节的数据入。
参数:
dat:要写入的数据
*/
void ZLG7289_SPI_Write(char dat)
{
	unsigned char t = 8;
	do
	{
		if((dat & 0x80)==0x80) 
			GPIOPinWrite(GPIO_PORTC_BASE,ZLG7289_pinDIO, 0xff);
		else
			GPIOPinWrite(GPIO_PORTC_BASE,ZLG7289_pinDIO, 0x00);
		dat <<= 1;
		GPIOPinWrite(GPIO_PORTC_BASE,ZLG7289_pinCLK, 0xff);
		ZLG7289_ShortDelay();
		GPIOPinWrite(GPIO_PORTC_BASE,ZLG7289_pinCLK, 0x00);
		ZLG7289_ShortDelay();
	} while ( --t != 0 );
	//GPIODirModeSet(GPIO_PORTB_BASE,ZLG7289_pinDIO, GPIO_DIR_MODE_IN);  //DIO输入
}
/*
函数:ZLG7289_cmd()
功能:执行ZLG7289 纯指令
参数:
cmd:命令字
*/
void ZLG7289_cmd(unsigned char cmd)
{
	GPIOPinWrite(GPIO_PORTC_BASE,ZLG7289_pinCS, 0x00);
	ZLG7289_SPI_Write(cmd);
	GPIOPinWrite(GPIO_PORTC_BASE,ZLG7289_pinCS, 0xff);
	ZLG7289_LongDelay();
}
/*
函数:ZLG7289_cmd_dat()
功能:执行ZLG7289 带数据指令
参数:
cmd:命令字
dat:数据
*/
void ZLG7289_cmd_dat(unsigned char cmd, unsigned char dat)
{
	GPIOPinWrite(GPIO_PORTC_BASE,ZLG7289_pinCS, 0x00);
	ZLG7289_SPI_Write(cmd);
	ZLG7289_LongDelay();
	ZLG7289_SPI_Write(dat);
	GPIOPinWrite(GPIO_PORTC_BASE,ZLG7289_pinCS, 0xff);
	ZLG7289_LongDelay();
}
/*
函数:ZLG7289_Download()
功能:下载数据
参数:
mod=0:下载数据且按方式0 译码
mod=1:下载数据且按方式1 译码
mod=2:下载数据但不译码
x:数码管编号(横坐标),取值0~7
dp=0:小数点不亮
dp=1:小数点亮
dat:要显示的数据
说明:
译码方式的具体含义请参考数据手册
*/
void ZLG7289_Download(unsigned char mod, unsigned char x, unsigned char dp, unsigned char dat)
{
	unsigned char ModDat[3] = {0x80,0xC8,0x90};
	unsigned char d1;
	unsigned char d2;
	if ( mod > 2 ) mod = 2;
	d1 = ModDat[mod];
	x &= 0x07;
	d1 |= x;
	d2 = dat & 0x7F;
	if ( dp==1 ) d2 |= 0x80;
	ZLG7289_cmd_dat(d1,d2);
}
/*
函数:ZLG7289_Init()
功能:ZLG7289 初始化
参数:
t:SPI 总线的延时值设置,取值1-40(超出范围可能导致错误)
说明:
t的取值可以参照以下公式:t >= 5 * f1 / f2,其中f1 表示80C51 的
晶振频率,f2 表示ZLG7289 的晶振频率
*/
void ZLG7289_Init(void)
{
	//I/O 口初始化
	SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOC );						// 使能GPIO C口外设
	GPIODirModeSet(GPIO_PORTC_BASE,
					 ZLG7289_pinCS
					|ZLG7289_pinCLK
					|ZLG7289_pinDIO,
					 GPIO_DIR_MODE_OUT);
	GPIOPinWrite(GPIO_PORTC_BASE,ZLG7289_pinDIO, 0xff);
	GPIOPinWrite(GPIO_PORTC_BASE,ZLG7289_pinCLK, 0x00);
	GPIOPinWrite(GPIO_PORTC_BASE,ZLG7289_pinCS, 0xff);
	ZLG7289_cmd(0xa4);
}

⌨️ 快捷键说明

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