1. 首页
  2. 课程学习
  3. 嵌入式
  4. zlg7289 c程序

zlg7289 c程序

上传者: 2022-06-30 07:29:23上传 RAR文件 23.85 KB 热度 14次

zlg7289 c程序

#include"msp430x14x.h"

#include"IO.h"

#define DELAY_1US     _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP()

void Delay(unsigned int t)                  //延时 t us

{

 unsigned int  i;

 for (i=0;i

  DELAY_1US;

}

/*

函数:ZLG7289_SPI_Write()

功能:向SPI 总线写入1 个字节的数据

参数:

dat:要写入的数据

*/

void ZLG7289_SPI_Write(char dat)           //5

{

 unsigned char t = 8;

 ZLG7289_OperateIO &=~ZLG7289_CLK;   //clk=0

 do

 {

  if(dat&0x80)

   ZLG7289_OperateIO  |=ZLG7289_DAT;

  else

   ZLG7289_OperateIO  &=~ZLG7289_DAT;

  ZLG7289_OperateIO |=ZLG7289_CLK;    //clk=1

  dat <<= 1;

  Delay(4);

  ZLG7289_OperateIO &=~ZLG7289_CLK;   //clk=0

  Delay(4);

   }while ( --t != 0 );

}

/*

函数:ZLG7289_SPI_Read()

功能:从SPI 总线读取1 个字节的数据

返回:

读取到的数据

*/

unsigned char ZLG7289_SPI_Read()

{

 unsigned char dat=0x00;

 unsigned char t = 8;

 ZLG7289_OperateIO &=~ZLG7289_CLK;  //clk=0

 //ZLG7289_DAT = 1; //读取数据之前DIO 引脚要置1 以切换到输入状态

 do

 {

  ZLG7289_OperateIO  |=ZLG7289_CLK;    //clk=1

  Delay(4); 

  dat <<= 1;

  if ((ZLG7289_OperateIO_IN&ZLG7289_DAT))

   dat++;

  ZLG7289_OperateIO  &=~ZLG7289_CLK;  //clk=0

  Delay(4);

 }while ( --t != 0 );

 return dat;

}

/*

函数:ZLG7289_cmd()

功能:执行ZLG7289 纯指令

参数:

cmd:命令字

*/                                                //6

void ZLG7289_cmd(char cmd)

{

 ZLG7289_OperateIO_DIR |=ZLG7289_DAT;     //output

 ZLG7289_OperateIO &=~ZLG7289_CS;     //CS=0

 Delay(24);

 ZLG7289_SPI_Write(cmd);

 ZLG7289_OperateIO |=ZLG7289_CS;     //CS=1

 ZLG7289_OperateIO_DIR &=~ZLG7289_DAT;     //input

}

/*

函数:ZLG7289_cmd_dat()

功能:执行ZLG7289 带数据指令

参数:

cmd:命令字

dat:数据

*/

void ZLG7289_cmd_dat(char cmd, char dat)

{

 ZLG7289_OperateIO_DIR |=ZLG7289_DAT;     //output

 ZLG7289_OperateIO &=~ZLG7289_CS;     //CS=0

 Delay(24);

 ZLG7289_SPI_Write(cmd);

 Delay(14);

 ZLG7289_SPI_Write(dat);

 ZLG7289_OperateIO |=ZLG7289_CS;     //CS=1

 ZLG7289_OperateIO_DIR &=~ZLG7289_DAT;   //input

}

/*

函数:ZLG7289_Download()

功能:下载数据

参数:

mod=0:下载数据且按方式0 译码

mod=1:下载数据且按方式1 译码

mod=2:下载数据但不译码

x:数码管编号(横坐标),取值0~7

dp=0:小数点不亮                                  //7

dp=1:小数点亮

dat:要显示的数据

说明:

译码方式的具体含义请参考数据手册

*/

void ZLG7289_Download(unsigned char mod, char x,char dp, char dat)

{

 char ModDat[3] = {0x80,0xC8,0x90};

 char d1;

 char d2;

 if ( mod > 2 )

  mod = 2;

 d1  = ModDat[mod];

 x   = x  & 0x07;

 d1  = d1 | x;

 d2  = dat & 0x7F;

 if ( dp )

  d2 =d2 | 0x80;

 ZLG7289_cmd_dat(d1,d2);

}

/*

功能:执行ZLG7289 键盘命令

返回:

返回读到的按键值:0~63

如果返回0xFF 则表示没有键按下

*/

unsigned char ZLG7289_Key()

{

 unsigned char key;

 ZLG7289_OperateIO_DIR |=ZLG7289_DAT;     //output

 ZLG7289_OperateIO &=~ZLG7289_CS;     //CS=0

 Delay(24);

 ZLG7289_SPI_Write(0x15);

 ZLG7289_OperateIO_DIR &=~ZLG7289_DAT;     //input

 Delay(14);

 key = ZLG7289_SPI_Read();

 ZLG7289_OperateIO |=ZLG7289_CS;     //CS=0

 return key;

}

void ZLG7289_iniTIal(void)

{

 ZLG7289_OperateIO_DIR  |=  ZLG7289_CS+ZLG7289_CLK+ZLG7289_KEY;

 ZLG7289_OperateIO      |=  ZLG7289_CS+ZLG7289_KEY;

 ZLG7289_OperateIO      &=~ ZLG7289_CLK;

 ZLG7289_OperateIO_DIR  &=~ ZLG7289_KEY;   //INPUT

       

 ZLG7289_OperateIE      |=  ZLG7289_KEY;   //enable interrupt

 ZLG7289_OperateIES     |=  ZLG7289_KEY;   //failing

}

下载地址
用户评论