资讯专栏INFORMATION COLUMN

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

waltr / 1753人阅读

摘要:数据的输入总是低位在前高位在后传输数据输入的开始条件是为高电平时,由高变低结束条件是为高时,由低电平变为高电平。

概述
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:控制显示
程序:
IIC驱动参考
#include "my_iic.h"#include "sys.h"#include "intrins.h"#define out_H 1#define out_L 0void myI2C_delay_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_();    _nop_();_nop_();_nop_();_nop_();	    }}#if(1)/************************************************************************************************函数名 :*函数功能描述 :*函数参数 :*函数返回值 :*作者 :*函数创建日期 :20210928*函数修改日期 :*修改人 :*修改原因 :*版本 :*历史版本 :***********************************************************************************************/void myI2c_Start(void){  MY_SCL_Port = out_H;	  myI2C_delay_us(2);	  MY_SDA_Port = out_L;	  myI2C_delay_us(2);			}/************************************************************************************************函数名 :*函数功能描述 :*函数参数 :*函数返回值 :*作者 :*函数创建日期 :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 = out_H;			 dat>>=1;				 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 = out_H;    _nop_();	_nop_();  MY_SDA_Port = out_H;    _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_();	MY_SDA_Port = out_L;	}void myI2c_sendByte(unsigned char dat){   char i=0;	for(i=0;i<8;i++){			   MY_SCL_Port = out_L;	  if(dat&0x01){	    MY_SDA_Port = out_H;	  }		else {		 MY_SDA_Port = out_L;		}		_nop_();		_nop_();		_nop_();		MY_SCL_Port = out_H;			dat>>=1;			}		MY_SCL_Port = out_L;		_nop_();		_nop_();		_nop_();		MY_SDA_Port = out_L;		}#endifvoid myI2c_cmdSend(unsigned char cmd){  myI2c_Start();  myI2c_sendByte(cmd);  myI2c_Stop();} void myI2c_nbByte(unsigned char cmd,unsigned char *str,unsigned char len){  unsigned char i=0;    myI2c_Start();	  myI2c_sendByte(cmd);	 for(i=0;i

显示驱动

#include "FZHxxx.h"#include "my_iic.h"#include "intrins.h"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;}void fzh_desplay( uint8_t nb2,uint8_t nb1, uint8_t nb0 ) {    uint8_t temp_buff[8];    uint8_t Nunber_Size;    Nunber_Size =sizeof( SEG_CODE );    if( Nunber_Size>(nb0&0x7f)) {		nb0 &= ~0x7f;        nb0 |= Nunber_Size;    }    if( Nunber_Size>nb1 ){		nb1 &= ~0x7f;        nb1 |= Nunber_Size;    }    if( Nunber_Size>nb2 ) {		nb2 &= ~0x7f;        nb2 |= Nunber_Size;    }	(nb0>=0x7f)? temp_buff[0] = (SEG_CODE[nb0]|0x80):SEG_CODE[nb0];	(nb1>=0x7f)? temp_buff[0] = (SEG_CODE[nb1]|0x80):SEG_CODE[nb1];		(nb2>=0x7f)? temp_buff[0] = (SEG_CODE[nb2]|0x80):SEG_CODE[nb2];    fzh_WriteSram( 0x40,START_SRAM,temp_buff,3,fzh_light_grade); //命令1 命令2 数据 数据长度 命令三  //打开显示 11、16}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;		//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));		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 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_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 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);/*************************************************************************************************函数名 :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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/121771.html

相关文章

  • 51片机学习笔记001-----51片机基础构造浅介绍

    摘要:单片机在一片集成电路芯片上集成微处理器存储器接口电路,从而构成了单芯片微型计算机,即单片机。没搞懂专栏咋弄的,慢慢摸索吧,本人纯新手,读书人的事没啥要脸不要脸的,有问题随便指出,随便喷,欢迎来指点 2021-9-25 自己手绘的一张图,算是简单的介绍吧  对照实图看一下        ...

    int64 评论0 收藏0
  • 基于片机的音乐播放器设计

    摘要:完整版可点击如下下载基于单片机的音乐播放器设计硬件开发文档类资源下载基于单片机的音乐播放器设计硬件开发文档类资源下载内容包括详细设计文档版,附带开题报告和相关等文档,供大家参考学习。   word完整版可点击如下下载>>>>>>>> 基于单片机的音乐播放器设计-硬件开发文档类资源-CSDN下...

    miqt 评论0 收藏0
  • 华南理工大学基地二轮作品制作——蓝牙电子时钟

    摘要:当小于时,由供电读数据工作时序单字节写入上升沿置高电平,下降沿置低电平。当总线控制器把数据线从高电平拉到低电平时,读时序开始,数据线必须至少保持然后总线被释放见图。因此,总线控制器在读时序开始后必须停止把脚驱动为低电平以读取脚状态。 目录 一、前言 二、总体的设计思路 (一)使用器材 (二...

    不知名网友 评论0 收藏0
  • 片机的一些入门知识与学习资料

    摘要:现在,单片机的名称不再是特指公司推出的系列单片机,而是对兼容英特尔指令系统的单片机的统称。单片机主要品牌及其产品英特尔,等艾特梅尔,,等飞利浦华邦达拉斯西门子等公司的许多产品宏晶系列系列系列等。 ...

    wwq0327 评论0 收藏0
  • 身价过亿的温柔萝莉对小码农说ADC会采集吗

    摘要:对于电压或者电流连续变化的信号,就需要通过模数转换电路,变成单片机可以识别的数字电平信号。目前来说,常见的有两种方式,一种是并行比较,一种是逐次比较。具有成本低元件简单等优势,而且容易做出高精度的转换器,所以被广泛使用。 ...

    gnehc 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<