📄 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 + -