📄 zlg7289.c
字号:
#include "reg24le1.h"
#include "Sys.h"
#include "Zlg7289.h"
//键盘相关的函数的定义部分
#define SCLK P00
#define IO P01
#define CS P02
#define INT P03
typedef char int8 ;
typedef unsigned char uint8 ;
//延时函数
void __delayNuS(char x)
{
for(;x>0;x--)
{
;
}
}
//I/O口初始化
void IO_CONFIG()
{
P0DIR&=0XFE; //设置成输出
P0DIR&=0XFB; //设置成输出
P0DIR|=0X08; //设置成输入
INT=1;
CS=1;
SCLK=1;
}
//ZLG7289模拟SPI读的函数
int8 __zlg7289SPIRead (void)
{
unsigned char cDat = 0;
unsigned char cT = 8;
P0DIR|=0X02; //设置输入模式
/*
* 循环读一个字节的数据
*/
do {
SCLK=1;
__delayNuS(5);
cDat <<= 1;
if(IO) {
cDat++;
}
SCLK=0;
__delayNuS(5);
} while (--cT != 0);
return cDat;
}
//ZLG7289模拟SPI写的函数
void __zlg7289SPIWrite (int8 cDat)
{
int8 cT = 8;
P0DIR&=0XFD; /* 设置DIO端口为输出模式 */
/*
* 循环写一个字节的数据
*/
do {
if((cDat & 0x80) == 0x80) {
IO=1;
} else {
IO=0;
}
cDat <<= 1;
SCLK=1;
__delayNuS(5);
SCLK=0;
__delayNuS(5);
} while (--cT != 0);
}
//Zlg写指令
void zlg7289Cmd (int8 cCmd)
{
CS=0;
__delayNuS(5);
__zlg7289SPIWrite(cCmd);
__delayNuS(5);
CS=1;
}
//Zlg写数据
void zlg7289CmdDat (uint8 cCmd, int8 cDat)
{
CS=0;
__delayNuS(5);
__zlg7289SPIWrite(cCmd);
__delayNuS(5);
__zlg7289SPIWrite(cDat);
__delayNuS(5);
CS=1;
}
//Zlg的LED显示
void zlg7289Download (uint8 ucMod, int8 cX, int8 cDp, int8 cDat)
{
uint8 ucModDat[3] = {0x80,0xC8,0x90};
uint8 ucD1;
uint8 ucD2;
if (ucMod > 2) {
ucMod = 2;
}
ucD1 = ucModDat[ucMod];
cX &= 0x07;
ucD1 |= cX;
ucD2 = cDat & 0x7F;
if (cDp == 1) {
ucD2 |= 0x80;
}
zlg7289CmdDat(ucD1, ucD2);
}
//Zlg的键盘读取函数
int8 zlg7289Key (void)
{
int8 cKey;
CS=0;
__delayNuS(25);
__zlg7289SPIWrite(0x15);
__delayNuS(15);
cKey = __zlg7289SPIRead();
CS=1;
__delayNuS(5);
return cKey;
}
//Zlg7289的复位
void zlg7289Reset()
{
zlg7289Cmd(0xA4); //通过软复位的地址
}
//Zlg7289的初始化
void zlg7289Init (void)
{
IO_CONFIG();
zlg7289Reset(); /* 复位ZLG7289 */
}
char key(void)
{
static char key;
P0CON=0XD3;
if(INT==0)
key=zlg7289Key();
if(key!=0xff)
{
zlg7289Download(1,0,0,(key/10));
zlg7289Download(1,1,0,(key%10));
return key;
}
}
char press(void)
{
static char num=0;
P0DIR|=0X80;
P0CON=0XD7;
if(!P07)
{
delay(5);
if(!P07)
{
while(!P07);
P06=!P06;
num++;
}
}
if(num==15)
num=0;
return num;
}
unsigned char getkey(char * ps)
{
P1DIR=0XFF;
P1=0XFF;
//扫描按键1
P1CON=0XD0;
if(P10==0)
{
delay(5);
if(P10==0)
{
while(!P10);
return next;
}
}
//扫描按键2
P1CON=0XD1;
if(P11==0)
{
delay(5);
if(P11==0)
{
while(!P11);
return back;
}
}
//扫描按键3
P1CON=0XD2;
if(P12==0)
{
delay(5);
if(P12==0)
{
while(!P12);
return volp;
}
}
//扫描按键4
P1CON=0XD3;
if(P13==0)
{
delay(5);
if(P13==0)
{
while(!P13);
return vold;
}
}
//扫描按键5
P1CON=0XD4;
if(P14==0)
{
delay(5);
if(P14==0)
{
while(!P14);
if(ps[0])
return play;
else if(ps[1])
return stop;
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -