关注分享主机优惠活动
国内外VPS云服务器

FZH119数码管驱动程序经过修改和初始化,支持51、32等多平台单片机。

摘要:数据始终先输入低位,最后输入高位。 数据输入的起始条件是电平由高电平变为高电平时。 终止条件是高电平由低电平变为高电平时。

概述

FZH119 这是一种LED(发光二极管显示屏)驱动控制及应用电路,集成了MCU数字接口、数据锁存器、LED驱动器等电路。 该产品性能优良,质量可靠。 主要用于电子产品中的LED显示驱动。 采用SOP28封装格式。
功能说明
Ø 采用 CMOS 技术
Ø 显示模式(8 段 x 16 位)
Ø 亮度调节电路(占空比8级可调)
Ø 两线串行接口(SCLK、DIN)
Ø 振荡方式:内置RC振荡
Ø 内置上电复位电路
Ø 封装格式:SOP28 、TSSOP20
界面说明

微处理器数据通过两线总线接口传递 FZH119 . 在通信和数据输入过程中,当CLK为高电平时,DIN信号不应改变。只有当CLK时钟信号为低电平时,DIN信号才应改变。数据输入为低电平。启动条件数据输入是在 CLK 为高电平时 DIN 从高到低跳变
命令数据传输过程如下 / div>

写入SRAM的数据地址自动递增1模式:

命令1:设置数据
命令2:地址设置
data1~N:发送显示数据(最多16字节,不能再多)
命令 3:显示控制
SRAM 数据的固定地址写入模式:

命令1:配置设置数据
命令2:设置地址
data1:发送显示数据
CommandN:地址设置
dataN:发送显示数据(最多16字节,更多)
Command3:
程序:
IIC驱动参考
#include "my_iic.h"#include "sys.h"#include "intrins.h"#define out_H 1#define out_L 0void myI2C_lay_us(unsigned int us ){ while ( us--){ _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); );_nop_();_nop_();_nop_(); }}#if(1)/**************************** ****** ** ************** ************************** ********* *** *********** *******函数名称: * 函数描述: * 函数参数: * 函数返回值: * 作者: *函数创建日期:20210928 * 函数修改日期:* 限定符:* 修改原因:* 版本:*历史版本:************************ ****************************************************** ****** ***** *********/空白 myI2c_Start(void){ MY_SCL_Port = out_H; myI2C_delay_us(2); MY_SDA_port = output_L; }/​​ ** ****************************************************** **************************************************函数名称:*函数描述:*函数参数:*函数返回值:*作者:*函数创建日期:20210928*函数修改日期:*修改者:*修改原因:*版本:*历史版本:** *** ****************** ************************************** ****************************************************/void myI2c_Stop(void){//myI2C_delay_us(200);MY_SCL_Port = out_L;//myI2C_delay_us(2);MY_SDA_Port = out_L;myI2C_delay_us(2 ) );MY_SCL_Port = out_H;// myI2C_delay_us(2);MY_SDA_Port = out_H; myI2C_delay_us(2);}/************************* ********** * ****************** ****************** ********** ** **************** **********函数名称: * 函数描述: * 函数参数: * 函数返回值: * 作者: * 函数创建日期: 20210928 * 函数修改日期: * 限定符: * 更改原因: * 版本: * 历史版本: **************** ****************************************************** ************************************************** *** ***/void myI2c_sendByte(unsigned char dat){ char i=0;for(i=0;i<8;i++ ){ MY_SCL_Port = out_L; myI2C_delay_us(1); if(dat&0x01 ){ MY_SDA_Port = out_H ; }else { MY_SDA_Port = out_L;}myI2C_delay_us(1); MY_SCL_Port = 输出H; myI2C_delay_us(2);}MY_SCL_Port = out_L;myI2C_delay_us(2);}#endif#if(0) //2021-09-29 20:00void myI2c_Start(void){ MY_SDA_Port = out_H; MY_SCL_Port = 输出 H; _nop_();_nop_(); ;_nop_(); MY_SDA_Port = out_L;_nop_();_nop_();_nop_();_nop_(); MY_SCL_Port = out_L;_nop_();_nop_();}void myI2c_Stop(void){MY_SCL_Port = out_H;// _nop_( );_nop_();MY_SDA_Port = out_L;_nop_();_nop_();MY_SDA_Port = out_H;/ /_nop_();_nop_();MY_SCL_Port = out_L;_nop_();_nop_(); }void myI2c_sendByte(unsigned char dat){ char i=0;for(i=0;i>=1;}MY_SCL_Port = out_L;_nop_();_nop_();_nop_();MY_SDA_Port = out_L;}#endifvoid myI2c_cmdSend(unsigned char cmd) { myI2c_Start ();e(cmd); myI2c_nbByte(unsigned char cmd,unsigned char *str,unsigned char len){ unsigned char i=0; myI2c_sendByte(cmd); len;i++){myI2c_sendByte(str[i]); 不同的开发板配置自己的初始化部分。  例如,51单片机可以将相应的IO设置为高电平或干脆将其关闭。   /* 注意,__BANK_SFRB1 的 p4 */P4OE &= (~0xFD);P4OE |= 0xFD;P4IE |= 0x02;P4PU |= 0x18; }头文件 ----[ k4] ----------------[k4 ]----------[ ------ ----------------[ k4 ]----------- ]----- ---------#ifndef _MY_IIC_H#define _MY_IIC_H#定义MY_SDA_端口 P44#定义MY_SCL_Port P43void myI2c_Start(void);void myI2c_Stop(void);void myI2C_init(void);void myI2c_cmdSend(unsigned char cmd);void myI2c_nbByte(unsigned char cmd,unsigned char *str,unsigned char len);#endif 

显示驱动

#include "FZHxxx.h"#include "my_iic.h"#include " intrins.h "UINT8_T 代码 SEG_CODE [16] = {0x3F, 0x06, 0x4F, 0x66,0x6d, 0x7d, 0x07,0x7f, 0x67, 0x39,0x5e, 0x79,0x71}; _t fzh_light_grade = 0x8c; int8_t _WriteS内存(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_cmdSend( cmd3 ); 返回 0;}int8_t fzh_cmdWrite( uint8_t cmd ) { myI2c_cmdSend( cmd );fzh_cmdWriteDat( uint8_t cmd,uint8_t dat ) { myI2c_nbByte( cmd,&dat,1 ); return 0;}void fzh_desplay( uint8_t nb2,uint8_t nb1, uint8_t nb0 ) { uint8_t temp_buff[8]; uint8_t 数字大小 = 大小( SEG_CODE) ; if( 数字大小 >(nb0&0x7f)) {nb0 &= ~0x7f; nb0 |= 数字大小; if( 数字大小 >nb1 ){nb1 &= ~0x7f; nb2 ) {nb2 & = ~0x7f; nb2 |= 数字大小; }(nb0>=0x7f)? temp_buff[0] = (SEG_CODE[nb0]|0x80):SEG_CODE[nb0];(nb1>=0x7f)? [0] = (SEG_CODE [nb1]|0x80):SEG_CODE[nb1];(nb2>=0x7f)? temp_buff[0] = (SEG_CODE[nb2]|0x80):SEG_CODE[nb2]; temp_buff,3,fzh_light_grade); //命令1 命令2 数据数据长度 命令3 //打开显示 11, 16}void fzh_DEC_Number(uint16_t nb,uint8_t dial ){uint8_t number_2=0;uint8_tnumber_1=0;uint8_tnumber_0=0;//65536 999 0.99 9.99 if(nb >999){ nb = 999;} (dip>=2)? (number_2 = (nb/100%10)| 0x80) :(number_2 = (nb/100%10)); (dip==1)? (number_1 = (nb/100%10)|0x80):(number_1 = (nb/100%10)); 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 | {fzh_light_grade = fzh_cmd_ff;}} VOID FZH_INIT (VOID) {Myi2c_init() E_11_16, user_cmd_show_on);} 头文件 - - - - - [ k4][ k4]-[k4 ]----[ k4]-----------[ k4]---------------- -------------[ k4]---------------- --------#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 START_SRAM Grid5#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_1 6 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 SEG_NUMBER( mode,y ) if(mode) (y|0x80) else y //接口 int8_t fzh_WriteSram(uint8_t cmd1,uint8_t c 未调用md2,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);/******************** ****************************************************** * ******************************************函数名称:void fzh_desplay( uint8_t nb2 , uint8_t nb1, uint8_t nb0 )* 功能说明:数据数据显示 * 功能参数:nb2 nb1 nb0 显示的文本支持0-F,支持扩展。  数据顶部可显示小数点 *函数返回值:无 *创建者: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 dial)* 函数描述:十进制数据显示* 函数参数:nb 显示值倾角放大倍数,支持 0、1、2* 函数返回值:无 * 作者:SY* 函数创建日期:20211007 **************************************************************************** * **************************/void fzh_DEC_Number(uint16_t nb,uint8_t dial);/************ ************** * ***** ***************************** ********************** ** ****************************** **************函数名称: void fzh_SetLightGrade(uint8_t Grade, uint8_t onff)*函数功能说明:亮度设置* 函数参数: Grade:亮度级别支持7级。  参考宏定义 USAER_CMD_CYCLE_ onff 0:显示关闭 其他:显示 *函数返回值:无 *创建者:SY *函数创建日期:20211007******** ************* ** ************************************************** ** ******************************/void fzh_SetLightGrade(uint8_t 等级,uint8_t onff)/******** ****** ****************************************** * **** ******** ****************************************函数名称:void fzh_Init( void)* 函数说明:数码管初始化数码管显示驱动,并将默认显示设置为相同亮度 * 函数参数:无 * 函数返回值:无 * 作者:SY * 函数创建日期:20211007* ***** ****************************************************** ************************************************/void fzh_Init(void);#endif

未经允许不得转载:主机频道 » FZH119数码管驱动程序经过修改和初始化,支持51、32等多平台单片机。

评论 抢沙发

评论前必须登录!