IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> FZH119 数码管 驱动程序 修改初始化可支持51 32等多平台单片机 -> 正文阅读

[嵌入式]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:控制显示
程序:
IIC驱动参考
#include "my_iic.h"
#include "sys.h"
#include "intrins.h"




#define out_H 1
#define out_L 0

void 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:00

void 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;	
	
}

#endif


void 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<len;i++){
	   myI2c_sendByte(str[i]);
	 }
      myI2c_Stop();
}

不同的开发板自行配置初始化部分 如51单片机可以把对应的IO置高或者直接全部只是掉
void myI2C_init(void){

	P4 = 0xFF;              /* attention, p4 on __BANK_SFRB1 */
	P4OE &= (~0xFD);
	P4OE |= 0xFD;
	
	P4IE |= 0x02;
	P4PU |= 0x18; 
}


头文件--------------------------------------------------------------------------------

#ifndef _MY_IIC_H
#define _MY_IIC_H

#define MY_SDA_Port  P44
#define MY_SCL_Port  P43

void 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 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


  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-08 11:56:38  更:2021-10-08 11:57:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:02:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码