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

📄 zlg7289.c

📁 国产芯片周力功zlg7289驱动程序
💻 C
字号:
#include "zlg7289.h"

//定义一个全局变量,用于延时   
//该变量在调用函数zlg7289_init()时被初始化   
char zlg7289_delay_t; 

 /*
 *函数名:	zlg7289_spi_init
 *功能:初始化spi总线
 *参数:
 *   t:延时时间
 *说明:
 *    # t的取值可以参照以下公式:t>=5*f1/f2  
  * 其中f1表示C51的晶振频率,f2表示ZLG7289 的晶振频率 
 */
void zlg7289_spi_init(uchar t) {
	zlg_cs=1;
	zlg_clk=0;
	zlg_dio=0;
	zlg7289_delay_t=t;
	IT0=1;
	EX0=1;
}

/*
 *函数名:	zlg7289_write
 *功能: 向总线写入一个字节
 *参数:
 *     d:要写入的一个字节
 */
void zlg7289_write(uchar d){
    uchar i;
	for(i=0;i<8;i++){
	   if(d&0x80)
	      zlg_dio=1;
	   else
	      zlg_dio=0;
	   d<<=1;
	   zlg_clk=1;
	   zlg7289_short_delay();
	   zlg_clk=0;
	   zlg7289_short_delay();
	   
	}
}

/*
 *函数名:	zlg7289_read
 *功能: 从总线读入一个字节
 *返回:
 *  返回读取的一个字节
 */
uchar zlg7289_read(){
	uchar i,v=0;
	zlg_dio = 1;//读取数据之前DIO引脚要置1以切换到输入状态  
	for(i=0;i<8;i++){
	    zlg_clk=1;
		zlg7289_short_delay();
		v<<=1;
		if(zlg_dio)
		   v++;
		zlg_clk=0;
		zlg7289_short_delay();
	}
	return v;
}


/*
 *函数名:	zlg7289_readkey
 *功能: 读取键值
 *返回:
 *    返回读取的键值
 */
uchar zlg7289_readkey(){
	uchar  key;
	zlg_cs=0;
	zlg7289_long_delay();
	zlg7289_write(0x15);
	zlg7289_short_delay();
	key=zlg7289_read();
	zlg_cs=1;
	zlg7289_long_delay();
	return key;
}

/*  
 *函数:zlg7289_cmd()  
 *功能:执行zlg7289不带数据指令  
 *参数:  
 *cmd:命令字    
 */   
 void zlg7289_cmd(uchar cmd){ 
 	EX0=0;//关闭外部中断0  
	zlg_cs=0; 
	zlg7289_long_delay();
	zlg7289_write(cmd);//写命令
	zlg_cs=1;
	zlg7289_long_delay();  
	EX0 =1;//开启外部中断0
 }

/*  
 *函数:zlg7289_cmd_with_data()  
 *功能:执行zlg7289 带数据指令  
 *参数:  
 *cmd:命令字  
 *d:数据  
 */   
void zlg7289_cmd_with_data(uchar cmd, uchar d) {   
	EX0=0;//关闭外部中断0  
	zlg_cs=0; 
	zlg7289_long_delay();
	zlg7289_write(cmd);//写命令
	zlg7289_short_delay();;   
	zlg7289_write(d);//写数据
	zlg_cs=1;
	zlg7289_long_delay();  
	EX0 =1;//开启外部中断0
}


/*  
 *函数:zlg_Download()  
 *功能:下载数据  
 *参数:  
 *mod:
 *    mod=0下载数据且按方式0 译码  
 *    mod=1下载数据且按方式0 译码  
 *    mod=2下载数据但不译码 
 *index:
 *   数码管编号(横坐标),0~7  
 *dp:
 *   dp=0小数点不亮 ,dp=1小数点亮
 *d:
 *   要显示的数据    
 *说明:
 *   方式0译码:
 *       命令1 0 0 0 0 a2 a1 a0数据dp x x x d3 d2 d1 d0  显示0-9 - E H L P 空 
 *   方式1译码:
 *       命令1 1 0 0 1 a2 a1 a0数据dp x x x d3 d2 d1 d0  显示0-F十六进制     
 *   方式2译码:
 *       命令1 0 0 1 0 a2 a1 a0数据dp a b c d e f g  将dp-g中位值为1的点亮
 *   a2 a1 a0为数码管编号,d3 d2 d1 d0为数据     
 */   
void zlg_download(uchar mod,uchar index , bit dp,uchar d){   
	code char  mode_data[3]={0x80,0xC8,0x90};  //存放在程序存储区 
	uchar cmd;     
	if(mod > 2) mod = 2;   
	cmd=mode_data[mod];   
	index&=0x07;   
	cmd|=index;   
	d=d&0x7f;   
	if(dp)d|=0x80;   
	zlg7289_cmd_with_data(cmd,d);   
}    

⌨️ 快捷键说明

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