📄 zlg7289.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 + -