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

📄 zlg7289_keyboard.c

📁 此文件是LCM12864在LPC2131上的驱动代码
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                              西安邮电学院嵌入式兴趣小组
**                                      
**                                加气站电子结算系统小组
**
**--------------File Info-------------------------------------------------------------------------------
** File name:           main.c
** Last modified Date:  2007-02-28
** Last Version:        1.0
** Descriptions:        The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:          Bai Chao gang
** Created date:        2007-01-31
** Version:         	1.0
** Descriptions:        The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "config.h"
#include "ZLG7289_KeyBoard.h" 
 
 
/********************************************************************************************************* 
函数名:ZLG7289_ShortDelay(uint32 n)
参数: j----代表延时的长短
功能:延时 
说明:j=7时,此延时函数大约延时1us
*********************************************************************************************************/ 
 void ZLG7289_ShortDelay(uint32 j) 
{    
         for(;j>0;j--);      
}

/********************************************************************************************************* 
函数名:ZLG7289_Init()
参数: 无
功能:初始化键盘所用到的ARM端口 
说明:
*********************************************************************************************************/

void ZLG7289_Init(void) 
{ 
  
//I/O口初始化 
  PINSEL0=0x00000000;
  PINSEL1=0x00000000;
  
  IO0DIR |= ZLG7289_pinCS; 
  IO0SET |= ZLG7289_pinCS; 
  
  IO0DIR |= ZLG7289_pinCLK;
  IO0CLR |= ZLG7289_pinCLK;
  
  IO0DIR |= ZLG7289_pinDIO;
  IO0SET|= ZLG7289_pinDIO;
  
  
  IO0DIR |= ZLG7289_pinINT;
  IO0SET|= ZLG7289_pinINT;
  
  ZLG7289_Reset();
  ZLG7289_Test();
  ZLG7289_ShortDelay(5000000);
  ZLG7289_Reset();
} 
 
/********************************************************************************************************* 
函数:ZLG7289_SPI_Write()                   arm的GPIO输出数据,7289读入数据
功能:向SPI总线写入1个字节的数据 
参数: 
 dat:要写入的数据 
*********************************************************************************************************/ 
 void ZLG7289_SPI_Write(uint8 dat) 

{ 
  uint8 t=8;
 
  IO0DIR |= ZLG7289_pinDIO;     //方向设置为输出
  

  do 
 { 
  if((dat&0x80) == 0x80)       //在数据左移的过程中,如果最高位为1,则输出高,否则输出低  
   {
     
     IO0SET = ZLG7289_pinDIO;  //输出高电平
   } 
 else
   {
      IO0CLR = ZLG7289_pinDIO; //输出低电平
   }
  
  dat <<= 1;           //数据左移
  
  ZLG7289_ShortDelay(80);
  
  IO0DIR |= ZLG7289_pinCLK;   //方向为输出
  IO0SET |= ZLG7289_pinCLK;   //时钟上升沿
 
  ZLG7289_ShortDelay(160);    //高电平延时一段时间
  
  IO0CLR|= ZLG7289_pinCLK;    //低电平
  ZLG7289_ShortDelay(160);    //低电平延时一段时间
 } while ( --t != 0 ); 
} 
 
 
/********************************************************************************************************** 
函数:ZLG7289_SPI_Read() 
功能:从SPI总线读 1个字节的数据 
返回: 
**********************************************************************************************************/ 

 uint8 ZLG7289_SPI_Read()
{ 
  uint8 dat; 
  uint8 t = 8; 
  
  IO0DIR &=~(~ZLG7289_pinDIO);     //读 DIO引脚要置1以切换到输入状态 
  IO0SET|= ZLG7289_pinDIO;         //ZLG7289_pinDIO置1切换到输入状态
  do 
 { 
    IO0SET|=ZLG7289_pinCLK;        
    ZLG7289_ShortDelay(160); 
    dat <<= 1;                     //dat左移
   if ((IO0PIN & ZLG7289_pinDIO) == ZLG7289_pinDIO)   //如果引脚为1的话,恒为输入状态
     { dat++; }                                       // 则dat确定为循环左移                                  
  
  IO0CLR|= ZLG7289_pinCLK;         //清ZLG7289_pinCLK  
  ZLG7289_ShortDelay(160); 
 } while ( --t != 0 ); 
  
  return dat; 
} 


 
/********************************************************************************************************** 
函数:ZLG7289_cmd() 
功能:执行ZLG7289纯指令 
参数: 
 cmd:命令字 
**********************************************************************************************************/ 
 
 void ZLG7289_cmd(uint8 cmd) 
{ 
 
   
   IO0DIR |= ZLG7289_pinCS;  
   IO0CLR |= ZLG7289_pinCS;
   ZLG7289_ShortDelay(500); 
   
   
   ZLG7289_SPI_Write(cmd);   //  
 
   
   IO0SET|= ZLG7289_pinCS; 
   ZLG7289_ShortDelay(500);
  
  
} 
 
 
/********************************************************************************************************** 
函数:ZLG7289_cmd_dat() 
功能:执行ZLG7289带数据指令 
参数: 
 cmd:命令字 
 dat:数据 
**********************************************************************************************************/ 
 void ZLG7289_cmd_dat(uint8 cmd, uint8 dat) 
{ 
   
   
   IO0DIR |= ZLG7289_pinCS;     
   IO0CLR|= ZLG7289_pinCS;   // 0片选有效
  
   ZLG7289_ShortDelay(500); 
  
   ZLG7289_SPI_Write(cmd); 
   ZLG7289_ShortDelay(500); 
  
   ZLG7289_SPI_Write(dat); 
   
   IO0DIR |= ZLG7289_pinCS;   
   
   
   IO0SET|= ZLG7289_pinCS;   //1片选无效
   ZLG7289_ShortDelay(500); 
  
} 

/********************************************************************************************************* 
函数名:uint8 Get_Key(void)
功能:执行ZLG7289键盘命令
说明:外部函数调用此函数,返回按键的键值,是和外部的接口函数 
返回值: 
  返回读 0---31
  如果返回0xFF则表示没有键按下 
*********************************************************************************************************/ 
 uint8 Get_Key(void) 
{ 
  uint8 key; 
  IO0DIR|= ZLG7289_pinCS;    
  IO0CLR |= ZLG7289_pinCS;  
  
  ZLG7289_ShortDelay(500);   
  ZLG7289_SPI_Write(0x15);    
  
  ZLG7289_ShortDelay(500); 
  
  key = ZLG7289_SPI_Read(); 
  
  IO0SET |= ZLG7289_pinCS;
 // ZLG7289_ShortDelay(500000); 
 
  return (key); 
}  
 
 /********************************************************************************************************* 
函数名:void ZLG7289_Download(uint8 mod,uint8 x,uint8 dp,uint8 dat)
功能:下载数据
参数:
      mod=0:下载数据且按方式0 译码
      mod=1:下载数据且按方式1 译码
      mod=2:下载数据但不译码
      x:数码管编号(横坐标),取值0~7
      dp=0:小数点不亮
      dp=1:小数点亮
      dat:要显示的数据
说明:
      译码方式的具体含义请参考数据手册 
*********************************************************************************************************/ 
 void ZLG7289_Download(uint8 mod,uint8 x,uint8 dp,uint8 dat)
{
   uint8 ModDat[3]={0x80,0xc8,0x90};  
   uint8 d1;
   uint8 d2;
   d1 = ModDat[mod]; 
   x &= 0x07;  
   d1 |= x;  //显示位选择
   d2  = dat & 0x7f;   
   if(dp)
    d2 |= 0x80;
   ZLG7289_cmd_dat(d1,d2);
}
/*******************************************************************************************************
*****                                   end file
********************************************************************************************************/
 uint8  ZLG7289_Key(void)
{   
   uint8 k;

   if((IO0PIN & ZLG7289_pinINT) == 0 )
   {
      k = Get_Key();
      ZLG7289_ShortDelay(5000);
      return k;
   
   }
   
   return 0xff;
   
}











⌨️ 快捷键说明

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