FZH119 数码管 驱动程序 修改初始化可支持51 32等多平台单片机

概述
FZH119 是一种LED(发光二极管显示器)驱动控制与用电路,内部集成有MCU 数字接口、数据锁存器、 LED 驱动等电路。本产品性能优良,质量可靠。主要应用于电子产品LED显示屏驱动。采用SOP28的封装形式。
特性说明
采用CMOS工艺
显示模式(8 段×16 位)
辉度调节电路(占空比 8 级可调)
两线串行接口(SCLK,DIN)
振荡方式:内置RC 振荡
内置上电复位电路
封装形式:SOP28 ,TSSOP20
接口说明
微处理器的数据通过两线总线接口和 FZH119 通信,在输入数据时当 CLK 是高电平时,DIN 上的信号 必须保持丌变;只有 CLK 上的时钟信号为低电平时,DIN 上的信号才能改变。数据的输入总是低位在前,高位 在后传输.数据输入的开始条件是 CLK 为高电平时,DIN 由高变低;结束条件是 CLK 为高时,DIN 由低电平 变为高电平。
 指令数据传输过程如下图:

 写 SRAM 数据地址自动加 1 模式:

Command1:设置数据
Command2:设置地址
data1~N:传输显示数据(最多 16 字节,丌能多写)
Command3:控制显示
写 SRAM 数据固定地址模式:

Command1:设置数据
Command2:设置地址
data1:传输显示数据
CommandN:设置地址
dataN:传输显示数据(最多 16 字节,丌能多写)
Command3:控制显示
温馨提示:
FZH119芯片数据线引脚上拉10K 电阻是必要的,如果不接很可能无法显示,同时如果IIC线比较长的话也要接上两个104电容,个人建议一开始就加上。我使用的51单片机电压是3.3V不接上拉无法正常工作。其它平台没有做过测试。
程序对多款FZHxxx系列芯片相互兼容,这是定制芯片封装,其它IC程序一样适用,如不一样用法,修改这个函数即可:fzh_WriteSram( 0x40,START_SRAM,temp_buff,3,fzh_light_grade);
提供参考电路如下:

程序:
IIC驱动参考
#include "FZHxxx.h"
#include "my_iic.h"
#include "intrins.h"


//unsigned char code SEG_CODE[16]={0xBB,0x81,0xEA,0xE3,0xD1,0x73,0x7B,0xA1,0xFB,0xF3,0xF9,0x5B,0x3A,0xCB,0x7A,0x78,};

uint8_t code SEG_CODE[16]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

uint8_t  fzh_light_grade = 0x8c;

int8_t fzh_WriteSram( uint8_t cmd1,uint8_t cmd2,uint8_t* str,uint8_t len,uint8_t cmd3 ) {
    if( ( len==0 )||( len>16 ) ) {
        return -1;
    }
    myI2c_cmdSend( cmd1 );
    myI2c_nbByte(cmd2,str,len );
    myI2c_cmdSend( cmd3 );
    return 0;
}

int8_t fzh_cmdWrite( uint8_t cmd ) {
    myI2c_cmdSend( cmd );
    return 0;
}

int8_t fzh_cmdWriteDat( uint8_t cmd,uint8_t dat ) {
    myI2c_nbByte( cmd,&dat,1 );
    return 0;
}

uint8_t *revstr(uint8_t *str, uint8_t len)
{
    uint8_t    *start = str;
    uint8_t    *end = str + len - 1;
    uint8_t    ch;
    if (str != 0)
    {
        while (start < end)
        {
            ch = *start;
            *start++ = *end;
            *end-- = ch;
        }
    }
    return str;
}

void fzh_desplay( uint8_t nb2,uint8_t nb1, uint8_t nb0 ) {
    uint8_t temp_buff[8];

//	if(nb0>=0x7f){
//	temp_buff[2] = (SEG_CODE[nb0&0x7f]|0x80);
//	}else{
//	temp_buff[2] = SEG_CODE[nb0&0x7f];
//	}
//	if(nb1>=0x7f){
//	temp_buff[1] = (SEG_CODE[nb1&0x7f]|0x80);
//	}else{
//	temp_buff[1] = SEG_CODE[nb1&0x7f];
//	}	
//	if(nb2>=0x7f){
//	temp_buff[0] = (SEG_CODE[nb2&0x7f]|0x80);
//	}else{
//	temp_buff[0] = SEG_CODE[nb2&0x7f];
//	}		
	
	(nb0>=0x7f)? (temp_buff[0] = (SEG_CODE[nb0&0x7f]|0x80)):(temp_buff[0] =SEG_CODE[nb0&0x7f]);
	(nb1>=0x7f)? (temp_buff[1] = (SEG_CODE[nb1&0x7f]|0x80)):(temp_buff[1] = SEG_CODE[nb1&0x7f]);	
	(nb2>=0x7f)? (temp_buff[2] = (SEG_CODE[nb2&0x7f]|0x80)):(temp_buff[2] =SEG_CODE[nb2&0x7f]);
	
	#ifdef USAER_CMD_REV_SHOW
    	revstr(temp_buff,3);
	#endif
    fzh_WriteSram( 0x40,START_SRAM,temp_buff,3,fzh_light_grade); 
}

void fzh_DEC_Number(uint16_t nb,uint8_t dip ){
	uint8_t number_2=0;
	uint8_t number_1=0;
	uint8_t number_0=0;	
	if(nb >999){
	   nb = 999;
	}
    (dip>=2)? (number_2 = (nb/100%10)|0x80):(number_2 = (nb/100%10));
    (dip==1)? (number_1 = (nb/10%10)|0x80):(number_1 = (nb/10%10));	
	number_0 = nb%10;
	fzh_desplay(number_2,number_1,number_0);
}

void fzh_SetLightGrade(uint8_t grade,uint8_t onff){
	if(grade>7)grade=7;
	fzh_light_grade = 0;
	if(onff!=0){
     	fzh_light_grade = FZH_CMD_ON|grade;
	}else {
	   fzh_light_grade = FZH_CMD_FF;
	}
}

void fzh_Init(void){
    myI2C_init();
    fzh_SetLightGrade(USAER_CMD_CYCLE_11_16,USAER_CMD_SHOW_ON);
}


显示驱动

#ifndef __FZHXXX_H
#define __FZHXXX_H
#define cmdData      //010000
#include "sys.h"

enum GRID{
	grid1=0xc0,
	grid2,
	grid3,
	grid4,
	grid5,
	grid6,
	grid7,
	grid8,
	grid9,
	grid10,
	grid11,
	grid12,
	grid13,
	grid14,
	grid15,
	grid16
};

#define FZH_CMD_ON 0x88 
#define FZH_CMD_FF 0x80  
#define USAER_CMD_CYCLE_1_16  0
#define USAER_CMD_CYCLE_2_16  1
#define USAER_CMD_CYCLE_4_16  2
#define USAER_CMD_CYCLE_10_16 3
#define USAER_CMD_CYCLE_11_16 4
#define USAER_CMD_CYCLE_12_16 5
#define USAER_CMD_CYCLE_13_16 6
#define USAER_CMD_CYCLE_14_16 7


#define USAER_CMD_SHOW_ON     1
#define USAER_CMD_SHOW_OFF    0


//与硬件连接相关设置
#define START_SRAM    grid5      //是定开始扫描地址地址
#define USAER_CMD_REV_SHOW    1   //显示置换位置使能位 开启 : [2] [1] [0]  关闭: [0] [1] [2]  
#define USAER_CMD_SIZE        3   //默认数码管位数:3 


#define SEG_NUMBER(mode,y) if(mode) (y|0x80) else y  //未调用接口
	
int8_t fzh_WriteSram(uint8_t cmd1,uint8_t cmd2,uint8_t *str,uint8_t len,uint8_t cmd3 );

int8_t fzh_cmdWrite(uint8_t cmd);
int8_t fzh_cmdWriteDat(uint8_t cmd,uint8_t dat);
/***********************************************************************************************
*
*函数名 :uint8_t *revstr(uint8_t *str, uint8_t len)
*函数功能描述 :数组置换
*函数参数 : *str 带置换的数组 len置换长度  str[0]开始置换len长度
*函数返回值 :无
*作者 :SY
*函数创建日期 :2021-10-12
*
***********************************************************************************************/
uint8_t *revstr(uint8_t *str, uint8_t len);
/***********************************************************************************************
*
*函数名 :void fzh_desplay( uint8_t nb2,uint8_t nb1, uint8_t nb0 )
*函数功能描述 :数据数据显示
*函数参数 : nb2 nb1 nb0 显示的文字支持 0-F 支持拓展,对数据高位置1可显示小数点
*函数返回值 :无
*作者 :SY
*函数创建日期 :2021-10-07
*
***********************************************************************************************/
void fzh_desplay( uint8_t nb2,uint8_t nb1, uint8_t nb0 );
/***********************************************************************************************
*
*函数名 :void fzh_DEC_Number(uint16_t nb,uint8_t dip )
*函数功能描述 :十进制数据显示
*函数参数 : nb 显示的数值  dip 放大的倍数,支持0、1、2
*函数返回值 :无
*作者 :SY
*函数创建日期 :20211007
*
***********************************************************************************************/
void fzh_DEC_Number(uint16_t nb,uint8_t dip );
/***********************************************************************************************
*
*函数名 :void fzh_SetLightGrade(uint8_t grade,uint8_t onff)
*函数功能描述 :亮度设置
*函数参数 :grade:亮度等级 支持7个等级 参考宏定义USAER_CMD_CYCLE_  onff 0:关闭显示 其它:显示
*函数返回值 :无
*作者 :SY
*函数创建日期 :20211007
*
***********************************************************************************************/
void fzh_SetLightGrade(uint8_t grade,uint8_t onff);
/***********************************************************************************************
*
*函数名 :void fzh_Init(void)
*函数功能描述 :数码管初始化数码管显示驱动 并设为等亮度 默认显示
*函数参数 :无
*函数返回值 :无
*作者 :SY
*函数创建日期 :20211007
*
***********************************************************************************************/
void fzh_Init(void);
#endif


int main(void){
  .... //其它驱动
  fzh_Init();
    while(1){
		 fzh_SetLightGrade(USAER_CMD_CYCLE_14_16,USAER_CMD_SHOW_ON);
         fzh_DEC_Number((123),1);  //数码管显示 12.3
   }
return 1;
}

显示效果

 

 

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值