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

📄 zlg7289.c

📁 键盘显示芯片ZLG7289的51驱动程序
💻 C
字号:
#include<reg52.h>
#include<intrins.h>


sbit dio=P0^2;
sbit clk=P0^1;
sbit CS_7289=P0^0;

sbit EOC = P2^7;
sbit TLC2543_CLK  = P2^6;
sbit TLC2543_DIN  = P2^5;
sbit TLC2543_DO = P2^4;
sbit TLC2543_CS  = P2^3;


unsigned char DisBuffer[8];


void delay(unsigned int i)
{
	while(i--);
}


// 其中 port 为通道: 通道0:port = 0x01 通道1:port = 0x02 通道2:port = 0x04 ...
unsigned int read2543(unsigned char port) 
{ 
unsigned int i; 
unsigned int ad_value=0; 

TLC2543_CLK=0; 
TLC2543_CS=0; 
EOC=1; 
port<<=4; 
for(i=0;i<12;i++) 
{ 
  if(TLC2543_DO) ad_value|=0x01; 
  TLC2543_DIN=(bit)(port&0x80); 
  TLC2543_CLK=1; 
  _nop_(); 
  _nop_(); 
  _nop_(); 
  TLC2543_CLK=0; 
  _nop_(); 
  _nop_(); 
  _nop_(); 
  port=port<<1; 
  ad_value=ad_value<<1; 
}
  
TLC2543_CS=1; 
ad_value=ad_value>>1; 
return ad_value; 
}


//发送8位数据
void SendByte(unsigned char dat)
{
	 unsigned char i;
	 //CS_7289=0;
	 		 
	 for(i=0;i<8;i++)
	 {
	 	
		if(dat&0x80)
		{
			dio=1;
		}else
			{
			 dio=0;
			}
		clk=1;
		delay(3);
		clk=0; 
		dat<<=1;
	 }
	 dio=0;
	 //CS_7289=1;
}
//发送纯命令
void SendCom(unsigned char com)
{
	  CS_7289=0;
	  delay(1);
	  SendByte(com);
	  CS_7289=0;
}
//发送带数据的命令
void SendComData(unsigned char com,unsigned char dat)
{
	  CS_7289=0;
	  delay(1);
	  SendByte(com);
	  SendByte(dat);
	  CS_7289=1;	
} 
unsigned char ReadKey(void)
{
	unsigned char i;
	unsigned char key;
	CS_7289=0;
	SendByte(0x15);
	for(i=0;i<8;i++)
	{
		key<<=1;
		clk=0;
		delay(1);
		clk=1;
		delay(1);
		key |= dio;
	}
	return key;
}  
//led数码管位置,dat显示数据
void ZLG7289Dis(unsigned char led,unsigned char dat)
{

	 SendComData(0x87-led,dat);
}
//消隐
void ZLG7289DisOFF(unsigned char led)
{
	//SendComData(0x98,0x80>>led); //方式0
	SendComData(0xcf,0x80>>led);  //方式1
}
//点亮数码管的小数点
void ZLG7289DP(unsigned char led)
{		
	SendComData(0xe0,0x3f-led*8);
}
//小数点关闭
void ZLG7289DP_OFF(unsigned char led)
{		
	SendComData(0xc0,0x3f-led*8);
}
//数码管闪烁
void ZLG7289Flash(unsigned char led)
{
	 SendComData(0x88,0x80>>led);
}
void ZLG7289Reset(void)
{
	SendCom(0xa4);
}
void ZLG7289MOVL(void)
{
	SendCom(0xa1);
}

void ZLGDIS(void)
{
	unsigned char i;

	//ZLG7289Reset();
	for(i=0;i<8;i++)
	{
		if(DisBuffer[i]>=0 &&DisBuffer[i]<=9)
		{
			ZLG7289Dis(i,DisBuffer[i]);
		}else if(DisBuffer[i]>=10 && DisBuffer[i]<=19)
				{	
					ZLG7289Dis(i,DisBuffer[i]-10);
					ZLG7289DP(i); //小数
				 }	else ZLG7289DisOFF(i);		
	} 

}
main()
{
	unsigned int i;
	unsigned int va;
	delay(1000);
	ZLG7289Reset();
	DisBuffer[0]=22;
	DisBuffer[1]=22;
	DisBuffer[2]=22;
	DisBuffer[3]=22;
	DisBuffer[4]=22;
	DisBuffer[5]=22;
	DisBuffer[6]=50;
	DisBuffer[7]=40;
	
	while(1)
	{
		for(i=0;i<30000;i++);
		va=read2543(0x0d);
		va*=1.2;
		DisBuffer[1]=(va/1000)%10;
		DisBuffer[2]=(va/100)%10;
		DisBuffer[3]=(va/10)%10;
		DisBuffer[4]=va%10;
		ZLGDIS();
		ZLG7289Dis(0,0);

				
	}
}

⌨️ 快捷键说明

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