/***
注意:时钟必须准确,该程序所使用为11.0592MHz
深圳市方中禾科技有限公司www.fangchip.com
***/
#include<FZH114io.h>
#define OFF 16
sbit TX = P2^1;
unsigned char FZH114DispCode[17]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00}; //0~F字型码
// 0 1 2 3 4 5 6 7 8 9 A B C D E F OFF
/*循环点亮每一段数组*/
unsigned char FZH114perseg[8]={0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
/*所有地址*/
unsigned char FZH114addr[5]={0x08, 0x88, 0x48, 0xc8, 0x28};
void FZH114Send8bit(char sdat)
{
unsigned char i=0, sfalg=0;
//起始位
TX=1; TX=0; delayus(52); //保持52us
//发送8位数据
for(i=0; i<8; i++)
{
if(sdat & 0x01)
{
TX=1;
sfalg++;
}else
{
TX=0;
}
delayus(52);
sdat >>=1;
}
//校验位,按照发送数据中1的个数来判断
if(sfalg%2==0)
{
TX=1;
}
else
{
TX=0;
}
delayus(52);
//停止位
TX=1; delayus(52);
}
/***
函数功能:对应地址发送数据
***/
void FZH114WriteDate(unsigned char saddr, unsigned char sdate)
{
FZH114Send8bit(saddr);
delayus(10);
FZH114Send8bit(sdate);
}
/***
函数功能:自动地址加一模式
注意:显示数据之间的间隔时间不能长于3ms,否则发送数据失效
****/
void FZH114AutoWrite(unsigned char faddr, unsigned char *pdate)
{
char i=0;
FZH114Send8bit(faddr);
for(i=0; i<5; i++)
{
FZH114Send8bit(*pdate);
pdate++;
delayus(10);
}
}
/***
函数功能:固定地址写模式
注意:显示数据之间的间隔时必须大于3ms,否则发送数据失效
****/
void FZH114FixWrite(void)
{
FZH114WriteDate(0x08, FZH114DispCode[1]); //GR1
delayms(5);
FZH114WriteDate(0x88, FZH114DispCode[2]); //GR2
delayms(5);
FZH114WriteDate(0x48, FZH114DispCode[3]); //GR3
delayms(5);
FZH114WriteDate(0xc8, FZH114DispCode[4]); //GR4
delayms(5);
FZH114WriteDate(0x28, FZH114DispCode[5]); //GR5
}
/***
函数功能:逐段点亮每一段
****/
void FZH114PerSegDisp(void)
{
unsigned char m=FZH114perseg[0],faddr=FZH114addr[0];
unsigned char i,j;
for(i=0; i<5; i++)
{
for(j=0; j<8; j++)
{
m = m | FZH114perseg[j];
FZH114WriteDate(faddr,m);
delayms(300);
}
faddr =FZH114addr[i+1];
m=FZH114perseg[0];
}
}
void main(void)
{
/***上电显示0-4***/
FZH114AutoWrite(0x08, FZH114DispCode);
delayms(20); //空闲位大于3ms
/**显示控制命令***/
FZH114WriteDate(0x18, 0xff); //设置为5位8段
delayms(20);
while(1)
{
}
}
评论0