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

📄 main.c

📁 ZLG7289键盘显示接口芯片是一个很常用的接口芯片
💻 C
字号:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int

sbit zlg7289_cs=P1^3;
sbit zlg7289_clk=P1^2;
sbit zlg7289_dio=P1^1;
sbit zlg7289_int=P1^0;

void delayus(uchar x)        //t=6*x+14 us  (x>0)
{
   while(x--)
   ;
   }
 
void delayms(uint x)      
{
   uchar i;
   while(x--)
   for(i=0;i<125;i++)
   ;
   }

void delay()        //延时8us
{
   _nop_();
   //_nop_();
   //_nop_();
   //_nop_();
   }

//写纯指令一个字节
void write_cmd(uchar dat)
{
  uchar i;
  bit flag;
  flag=EA;
  EA=0;               //关掉中断
  zlg7289_cs=0;
  zlg7289_clk=0;
  delayus(10);
  for(i=0;i<8;i++)
  {
    zlg7289_dio=(bit)(dat&0x80);
    zlg7289_clk=1;
    delay();          //延时约8us
	zlg7289_clk=0;
	delay();
	dat<<=1;
	}
   zlg7289_cs=1;
  EA=flag;
 }

//写带数据的指令
void write_cmd_dat(uchar cmd,uchar dat)
{
   uchar i;
   bit  flag;
   flag=EA;
   EA=0;
   zlg7289_cs=0;
   zlg7289_clk=0;
   delayus(10);
   for(i=0;i<8;i++)
   {
     zlg7289_dio=(bit)(cmd&0x80);
     zlg7289_clk=1;
     delay();          //延时约8us
	 zlg7289_clk=0;
	 delay();
     cmd<<=1;
	 }
    delay();
	for(i=0;i<8;i++)
	{
	  zlg7289_dio=(bit)(dat&0x80);
	  zlg7289_clk=1;
      delay();          //延时约8us
	  zlg7289_clk=0;
	  delay();
      dat<<=1;
	  }
   zlg7289_cs=1;
   EA=flag;
}

//读取键盘
uchar read_key()
{
   uchar i,cmd=0x15,key=0;
   bit flag;
   flag=EA;
   EA=0;
   zlg7289_cs=0;
   zlg7289_clk=0;
   delayus(10);
   for(i=0;i<8;i++)
   {
     zlg7289_dio=(bit)(cmd&0x80);
     zlg7289_clk=1;
     delay();          //延时约8us
	 zlg7289_clk=0;
	 delay();
     cmd<<=1;
	 }
   delay();
   for(i=0;i<8;i++)
   {
	 zlg7289_clk=1;
	 delay();
	 if(zlg7289_dio)  key|=0x01;
	 key<<=1;
	 zlg7289_clk=0;
	 delay();
	 }
   key=key>>1;
   zlg7289_cs=1;
   return key;
 }
//对数码管的数据下载  mod:是下载译码方式0,1,2  x:数码管的编号  
//dp:小数点的点亮    dat:显示数据 
void zlg7289_download(uchar mod,uchar x,bit dp,uchar dat)
{
   uchar cmdh=0,cmdl=0;
   uchar code  mode[3]={0x80,0xc8,0x90};
   cmdh=mode[mod];
   x=x&0x07;
   cmdh|=x;
   cmdl=dat&0x0f;
   if(dp)  cmdl|=0x80;
   write_cmd_dat(cmdh,cmdl);
   }

void init_zlg7289()
{
   uchar i;
   zlg7289_cs=1;        //io口初始化
   zlg7289_clk=0;
   zlg7289_dio=1;
   zlg7289_int=1;
   for(i=0;i<8;i++)
   {
     zlg7289_download(1,i,1,7);
	 }
}



void main()
{
   uchar i,j,date=0;
   delayus(100);
   init_zlg7289();
   
   for(j=0;j<20;j++)
   {
    for(i=0;i<8;i++)
	  zlg7289_download(1,i,1,date);
    if((++date)==16)
	  date=0;
	delayms(1000);
     }
  //write_cmd(0xa4);          //清除显示
  //write_cmd(0xbf);
  
  delayms(3000);
  for(i=0;i<8;i++)
	  zlg7289_download(1,i,1,9);
  while(1)
  {


 }





⌨️ 快捷键说明

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