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

📄 zlg7289.c

📁 菜鸟,详细NRF24E1运用,程序,电路
💻 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 + -