标题:
单片机数码管集成编译不成功,求助
[打印本页]
作者:
fdc2011
时间:
2021-4-16 10:24
标题:
单片机数码管集成编译不成功,求助
数码管集成编译不成功,求助
/**
* @file FD612.C 数码管显示驱动芯片 客户代码
* @brief FD612 的驱动
* @author ywaby
* @version 1B3
* @date 2014-03-31
* @note
* @details
* @copyright Copyright (c) 2013 by FUZHOU FUDA HISI MICROELECTRONICS CO.,LTD.
*/
#include"FD612.H"
/** @addtogroup FD612_DRIVER FD612 驱动
@{
*/
#define FD612_DELAY_LOW FD612_DELAY_1US ///<时钟低电平延时
#define FD612_DELAY_HIGH FD612_DELAY_1US ///<时钟高电平延时
#define FD612_DELAY_WAIT FD612_DELAY_1US ///<数据读取等待时间
#define FD612_DELAY_SU_STA FD612_DELAY_1US ///<起始信号建立时间
#define FD612_DELAY_HD_STA FD612_DELAY_1US ///<起始信号保持时间
#define FD612_DELAY_SU_STO FD612_DELAY_1US ///<停止信号建立时间
/** @addtogroup FD612_FUNCTION 函数
@{
*/
/** @addtogroup FD612_COMMUNICATION 通信时序
@{
*/
/**
* @brief 启动FD612通信
* @param void
* @return void
* @note 在SCL高电平期间捕获到SDA的下降沿,FD612开始通信
*/
static void FD612_Start( void )
{
FD612_SDA_SET;
FD612_SCL_SET;
FD612_SDA_D_OUT; //设置SDA为输出方向
FD612_SCL_D_OUT; //设置SCL为输出方向
FD612_DELAY_SU_STA;
FD612_SDA_CLR; //发送起始信号
FD612_DELAY_HD_STA;
FD612_SCL_CLR;
FD612_DELAY_LOW;
}
/**
* @brief 停止FD612通信
* @param void
* @return void
* @note 在SCL高电平期间捕获到SDA的上升沿,FD612停止通信
*/
static void FD612_Stop( void )
{
FD612_SCL_SET; /* 设置SCL为高电平 */
FD612_SDA_CLR; /* 设置SDA为低电平 */
FD612_SDA_D_OUT; /* 设置SDA为输出方向 */
FD612_DELAY_SU_STO; /* 停止信号建立时间: */
FD612_SDA_SET; /* 设置SDA为高电平 */
FD612_SDA_D_IN; /* 设置SDA为输入方向 */
}
/**
* @brief 发送一个字节数据给FD612,并读取应答位
* @param dat 发送的一字节数据
* @retval bit
* @return 读取的ACK应答位
* @note 数据传输低位在前,高位在后
*/
static bit FD612_WrByte( uint8 dat )
{
uint8 i; /* 移位写出的位数寄存器 */
bit ACKTemp=0;
FD612_SDA_D_OUT; /* 设置SDA为输出方向 */
for( i = 0; i != 8; i++ ) /* 输出8 bit的数据 */
{
if( dat & 0x80 )
{
FD612_SDA_SET; /* 设置SDA为高电平 */
}
else
{
FD612_SDA_CLR; /* 设置SDA为低电平 */
}
FD612_SCL_SET; /* 设置SCL为高电平 */
dat <<= 1; /* 输出数据右移一位,数据从高到低的输出 */
FD612_DELAY_HIGH; /* SCL时钟高电平时间:*/
FD612_SCL_CLR; /* 设置SCL为低电平 */
FD612_DELAY_LOW;
}
//////读取ACK位/////
FD612_SDA_SET; /* 设置SDA为高电平 */
FD612_SDA_D_IN; /* 设置SDA为输入方向 */
FD612_SCL_SET; /* SCL时钟的高电平时间:*/
if(FD612_SDA_IN==0) ACKTemp=0; /* 读入1 bit值 */
else ACKTemp=1;
FD612_DELAY_HIGH; /* SCL时钟高电平时间*/
FD612_SCL_CLR; /* SCL时钟的低电平*/
FD612_DELAY_LOW;
return ACKTemp ;
}
/**
* @brief 从FD612读取一个字节数据
* @param MSACK 发送的ACK值 发送不应答位 ACK=1;发送应答位 ACK=0
* @retval uint8
* @return 读取的一字节数据
* @note 数据传输高位在前,低位在后
*/
static uint8 FD612_RdByte( bit MSACK )
{
uint8 i;
uint8 dat=0; /* 移位读入的位数寄存器i */
FD612_SDA_SET; /* 设置SDA为高电平 */
FD612_SDA_D_IN; /* 设置SDA为输入方向 */
for( i = 0; i != 8; i++ ) /* 读入8 bit的数据 */
{
FD612_SCL_SET; /* 设置SCL为高电平 */
FD612_DELAY_HIGH; /* SCL时钟高电平时间:*/
dat <<= 1; /* 读入数据右移一位,数据从高到低的读入 */
if( FD612_SDA_IN ) dat++; /* 读入1 bit值 */
FD612_SCL_CLR; /* 设置SCL为低电平 */
FD612_DELAY_LOW;
}
//////发送ACK位/////
if(MSACK==0) /* 发送ACK应答位*/
FD612_SDA_CLR;
else FD612_SDA_SET;
FD612_SDA_D_OUT; /* 设置SDA为输出方向 */
FD612_SCL_SET; /* 设置SCL为高电平 */
FD612_DELAY_HIGH; /* SCL 时钟高电平时间:*/
FD612_SCL_CLR; /* 设置SCL为低电平 */
FD612_DELAY_LOW;
return dat; /* 返回接收到的数据 */
}
/* @} FD612_COMMUNICATION */
/** @addtogroup FD612_API_FUNTION 应用函数
@{
*/
/**
* @brief 向FD612发送一字节的命令
* @param CMD 发送一字节的命令
* @return void
* @note CMD是控制命令中的宏
* @par Example
* @code
* FD612_Command(FD612_7SEG_CMD);
* @endcode
*/
void FD612_Command( uint8 CMD )
{
FD612_Start();
FD612_WrByte(CMD);
FD612_Stop();
}
/**
* @brief 刷新FD612的显示数据
* @param void
* @return void
* @note 使用该函数需要打开 FD612_DISP_BUFF_EN
*/
void FD612_DispDataRefresh(void)
{
uint8 i;
FD612_Command(FD612_ADDR_INC_DIGWR_CMD);
FD612_Start();
FD612_WrByte(FD612_DIGADDR_WRCMD|FD612_DISP_MIN_ADDR) ;
for(i=FD612_DISP_MIN_ADDR;i<=FD612_DISP_MAX_ADDR;i++)
FD612_WrByte(FD612_DispBuff.DispData[i]) ;[/i][i]
FD612_Stop();
}
/**
* @brief 刷新FD612的相关数据
* @param void
* @return void
* @note
* @note 使用该函数需要打开 FD612_DISP_BUFF_EN
*/
void FD612_Refresh(void)
{
FD612_Command(FD612_DispBuff.DispSEG_MODE);
FD612_DispDataRefresh();
FD612_Command(FD612_DispBuff.DispState);
}
/* @} FD612_API_FUNTION */
#if FD612_DECODE_TAB_EN!=0
#define FD612_DECODE_TAB_NUM 64///<FD612_DecodeTab[]的字符个数
typedef struct
{
uint8 Character; ///<字符
uint8 Bitmap; ///<字符对应的码值
} Struct_LED_Bitmap; ///<数码管的码值和字符的对应结构体,用于查表
///<数码管的码值和字符的对应表格,用于查表
Struct_LED_Bitmap FD612_DecodeTab[FD612_DECODE_TAB_NUM] = {
{'0', FD612_DISP_0_DATA}, {'1', FD612_DISP_1_DATA}, {'2', FD612_DISP_2_DATA}, {'3', FD612_DISP_3_DATA},
{'4', FD612_DISP_4_DATA}, {'5', FD612_DISP_5_DATA}, {'6', FD612_DISP_6_DATA}, {'7', FD612_DISP_7_DATA},
{'8', FD612_DISP_8_DATA}, {'9', FD612_DISP_9_DATA}, {'a', FD612_DISP_a_DATA}, {'A', FD612_DISP_A_DATA},
{'b', FD612_DISP_b_DATA}, {'B', FD612_DISP_B_DATA}, {'c', FD612_DISP_c_DATA}, {'C', FD612_DISP_C_DATA},
{'d', FD612_DISP_d_DATA}, {'D', FD612_DISP_D_DATA}, {'e', FD612_DISP_e_DATA}, {'E', FD612_DISP_E_DATA},
{'f', FD612_DISP_f_DATA}, {'F', FD612_DISP_F_DATA}, {'g', FD612_DISP_g_DATA}, {'G', FD612_DISP_G_DATA},
{'h', FD612_DISP_h_DATA}, {'i', FD612_DISP_i_DATA}, {'j', FD612_DISP_j_DATA}, {'k', FD612_DISP_k_DATA},
{'l', FD612_DISP_l_DATA}, {'m', FD612_DISP_m_DATA}, {'n', FD612_DISP_n_DATA}, {'o', FD612_DISP_o_DATA},
{'p', FD612_DISP_p_DATA}, {'q', FD612_DISP_q_DATA}, {'r', FD612_DISP_r_DATA}, {'s', FD612_DISP_s_DATA},
{'t', FD612_DISP_t_DATA}, {'u', FD612_DISP_u_DATA}, {'v', FD612_DISP_v_DATA}, {'w', FD612_DISP_w_DATA},
{'x', FD612_DISP_x_DATA}, {'y', FD612_DISP_y_DATA}, {'z', FD612_DISP_z_DATA},
{'H', FD612_DISP_H_DATA}, {'I', FD612_DISP_I_DATA}, {'J', FD612_DISP_J_DATA}, {'K', FD612_DISP_K_DATA},
{'L', FD612_DISP_L_DATA}, {'M', FD612_DISP_M_DATA}, {'N', FD612_DISP_N_DATA}, {'O', FD612_DISP_O_DATA},
{'P', FD612_DISP_P_DATA}, {'Q', FD612_DISP_Q_DATA}, {'R', FD612_DISP_R_DATA}, {'S', FD612_DISP_S_DATA},
{'T', FD612_DISP_T_DATA}, {'U', FD612_DISP_U_DATA}, {'V', FD612_DISP_V_DATA}, {'W', FD612_DISP_W_DATA},
{'X', FD612_DISP_X_DATA}, {'Y', FD612_DISP_Y_DATA}, {'Z', FD612_DISP_Z_DATA},
};
/**
* @brief 数码管的查表函数
* @param cTemp 查找的字符
* @retval uint8
* @return 字符对应的数码管码值
* @note 使用该函数需要打开 FD612_DECODE_TAB_EN
* @par Example
* @code
* char CTmp;
* CTmp=DispGetCode('S');
* @endcode
*/
uint8 DispGetCode(char cTemp)
{
uint8 i, Bitmap=0x00;
for(i=0; i<FD612_DECODE_TAB_NUM; i++)
{
if(FD612_DecodeTab[i].Character == cTemp)[/i][i]
{
Bitmap = FD612_DecodeTab[i].Bitmap;[/i][i]
break;
}
}
return Bitmap;
}
#endif
#if FD628_NEGA_DISP==0
typedef struct
{
uint8 NegaAddr; ///<对应的共阴数码管数据地址
uint8 BitAddr; ///<对应段地址
} Struct_PotiveTNage_Bitmap; ///<数码管的码值和字符的对应结构体,用于查表
///<共阳对应共阴的表格,用于查表,根据具体的应用电路进行修改
Struct_PotiveTNage_Bitmap FD612_PotiveTNage_Bitmap[12][8] = {
{ {0x04,0x01},{0x05,0x01},{0x06,0x01},{0x07,0x01}, {0x08,0x01},{0x09,0x01},{0x0a,0x01},{0x0b,0x01}},
{ {0x04,0x02},{0x05,0x02},{0x06,0x02},{0x07,0x02}, {0x08,0x02},{0x09,0x02},{0x0a,0x02},{0x0b,0x02}},
{ {0x04,0x04},{0x05,0x04},{0x06,0x04},{0x07,0x04}, {0x08,0x04},{0x09,0x04},{0x0a,0x04},{0x0b,0x04}},
{ {0x04,0x08},{0x05,0x08},{0x06,0x08},{0x07,0x08}, {0x08,0x08},{0x09,0x08},{0x0a,0x08},{0x0b,0x08}},
{ {0x00,0x01},{0x01,0x01},{0x02,0x01},{0x03,0x01}, {0x08,0x10},{0x09,0x10},{0x0a,0x10},{0x0b,0x10}},
{ {0x00,0x02},{0x01,0x02},{0x02,0x02},{0x03,0x02}, {0x08,0x20},{0x09,0x20},{0x0a,0x20},{0x0b,0x20}},
{ {0x00,0x04},{0x01,0x04},{0x02,0x04},{0x03,0x04}, {0x08,0x40},{0x09,0x40},{0x0a,0x40},{0x0b,0x40}},
{ {0x00,0x08},{0x01,0x08},{0x02,0x08},{0x03,0x08}, {0x08,0x80},{0x09,0x80},{0x0a,0x80},{0x0b,0x80}},
{ {0x00,0x10},{0x01,0x10},{0x02,0x10},{0x03,0x10}, {0x04,0x10},{0x05,0x10},{0x06,0x10},{0x07,0x10}},
{ {0x00,0x20},{0x01,0x20},{0x02,0x20},{0x03,0x20}, {0x04,0x20},{0x05,0x20},{0x06,0x20},{0x07,0x20}},
{ {0x00,0x40},{0x01,0x40},{0x02,0x40},{0x03,0x40}, {0x04,0x40},{0x05,0x40},{0x06,0x40},{0x07,0x40}},
{ {0x00,0x80},{0x01,0x80},{0x02,0x80},{0x03,0x80}, {0x04,0x80},{0x05,0x80},{0x06,0x80},{0x07,0x80}}
};
/** @addtogroup FD612_API_FUNTION
@{
*/
/** @addtogroup FD612_PT_API 共阳数码管应用函数
@{
*/
/**
* @brief 共阳数码管的某一位写入显示数据
* @param Addr 共阳数码管的位
* @param Dat 显示的数据
* @retval void
* @return
* @note 使用该函数需要打开 FD612_DECODE_TAB_EN FD612_DISP_BUFF_EN FD628_NEGA_DISP
* @par Example
* @code
* PotiveTNage(1,0X3F); //第一位数码管显示‘0’
* @endcode
*/
void FD612_PotiveTNage(uint8 Addr,uint8 Dat){
uint8 i;
for(i=0;i<8;i++){
if(Dat&(0x01<<i))
FD612_DispBuff.DispData[FD612_PotiveTNage_Bitmap[Addr][i].NegaAddr]|=FD612_PotiveTNage_Bitmap[Addr][i].BitAddr;[/i][/i][i][i]
else
FD612_DispBuff.DispData[FD612_PotiveTNage_Bitmap[Addr][i].NegaAddr]&=(~FD612_PotiveTNage_Bitmap[Addr][i].BitAddr); [/i][/i][i][i]
}
}
/**
* @brief FD612 某个显示地址开始显示相应的字符串
* @param Addr 字符串显示的起始地址
* @param PStr 指向相应的字符串
* @retval uint8
* @return 返回函数执行结果,0为执行成功,1为起始地址超出最大地址
* @note 使用该函数需要打开 FD612_DECODE_TAB_EN
* @par Example
* @code
* FD612_DispString(FD612_DIG3_ADDR,"FD612");
* @endcode
*/
#if FD612_DECODE_TAB_EN!=0
uint8 FD612_DispString( uint8 Addr,char *PStr)
{
uint8 i;
if (Addr>FD612_DISP_MAX_ADDR)return 1;
for(i=0;i+Addr<=FD612_DISP_MAX_ADDR;i++)
{
if(PStr[i]=='\0')break;//判断是否到达字符串的尾部[/i][i]
FD612_PotiveTNage(i+Addr,DispGetCode(PStr[i]));[/i][i]
}
FD612_Refresh();
return 0;
}
#endif
#else
/* @} FD612_PT_API */
/** @addtogroup FD612_NG_API 共阴数码管应用函数
@{
*/
/**
* @brief 向共阴数码管某个显示地址写入一字节的显示数据
* @param Addr 写入的显示地址
* @param DispData 写入的显示数据
* @return void
* @note 地址固定方式写入显示数据
* @par Example
* @code
* FD612_SingleDisp(FD612_DIG3_ADDR,FD612_DISP_0);
* @endcode
*/
void FD612_SingleDisp(uint8 Addr,uint8 DispData)
{
FD612_Command(FD612_ADDR_STATIC_DIGWR_CMD);
FD612_DispBuff.DispData[Addr]=DispData;
FD612_Start();
FD612_WrByte(FD612_DIGADDR_WRCMD|Addr ) ;
FD612_WrByte(DispData ) ;
FD612_Stop();
}
/**
* @brief FD612 某个显示地址开始显示相应的字符串
* @param Addr 字符串显示的起始地址
* @param PStr 指向相应的字符串
* @retval uint8
* @return 返回函数执行结果,0为执行成功,1为起始地址超出最大地址
* @note 使用该函数需要打开 FD612_DECODE_TAB_EN
* @par Example
* @code
* FD612_DispString(FD612_DIG3_ADDR,"FD612");
* @endcode
*/
#if FD612_DECODE_TAB_EN!=0
uint8 FD612_DispString( uint8 Addr,char *PStr)
{
uint8 i;
if (Addr>FD612_DISP_MAX_ADDR)return 1;
FD612_Command(FD612_ADDR_INC_DIGWR_CMD);
FD612_Start();
FD612_WrByte(FD612_DIGADDR_WRCMD|Addr) ;
for(i=0;i+Addr<=FD612_DISP_MAX_ADDR;i++)
{
if(PStr[i]=='\0')break;//判断是否到达字符串的尾部[/i][i]
FD612_DispBuff.DispData[i+Addr]=DispGetCode(PStr[i]);[/i][i]
FD612_WrByte(FD612_DispBuff.DispData[i+Addr]) ;
}
FD612_Stop();
return 0;
}
#endif
/* @} FD612_NG_API */
#endif
/**
* @brief 初始化FD612
* @param void
* @return void
* @note 用户程序开始时调用该函数对FD612进行初始化
* @note 用户可以根据需要进行修改
* @par Example
* @code 共阴参考
uint8 i;
FD612_8SEG_MODE;
for(i=0;i<12;i++){
FD612_DispBuff.DispData[i]= 0X00;[/i][i]
}
FD612_DispBuff.DispData[FD612_DIG1_ADDR]=FD612_DISP_F;
FD612_DispBuff.DispData[FD612_DIG2_ADDR]=FD612_DISP_d;
FD612_DispString(FD612_DIG3_ADDR,"612");
FD612_DispStateWr(FD612_INTENS8|FD612_DISP_ON);
FD612_Refresh();
* @endcode
* @code 共阳参考
uint8 i;
FD612_8SEG_MODE;
for(i=0;i<12;i++){
FD612_DispBuff.DispData[i]= 0X00;[/i][i]
}
FD612_PotiveTNage(FD612_DIG1_ADDR,FD612_DISP_F);
FD612_PotiveTNage(FD612_DIG2_ADDR,FD612_DISP_d);
FD612_DispString(FD612_DIG3_ADDR,"612");
FD612_DispStateWr(FD612_INTENS8|FD612_DISP_ON);
FD612_Refresh();
* @endcode
*/
void FD612_Init( void)//<共阳参考
{
}
/* @} FD612_API_FUNTION */
/* @} FD612_FUNTION */
/* @} FD612_DRIVER */
/******************* (C) COPYRIGHT 2013 FDHISI *****END OF FILE****/
//海矽数显宝移植生成
#ifndef __FD612_H__
#define __FD612_H__
#include "intrins.h"
#include "STC12LE5A60S2.H"
typedef char sint8;
typedef short int sint16;
typedef long int sint32;
typedef unsigned char uint8;
typedef unsigned short uint16;
typedef unsigned long uint32;
typedef bit boolean; //bit可用unsigned char 替代
typedef bit BOOLEAN; //bit可用unsigned char 替代
//DelayConfig2:适用于2线协议的配置, 例如:FD632
//时钟:11.0592MHz
//8051指令集:STC-Y3
//适用单片机:STC12Cxx/STC12LExx/STC11Fxx/STC11Lxx/STC10Fxx/STC10Lxx等
#define DELAY {unsigned char i;_nop_();i = 16;while (--i);} ///<延时时序宏,控制SCL以及SDA的速率,建议在5uS以上
//IoConfig2:适用于2线协议的配置, 例如:FD632
sbit I2C_SCL = P0 ^ 0;
sbit I2C_SDA = P0 ^ 1;
#define FD612_SCL_SET {I2C_SCL = 1;} ///<将SCL设置为高电平
#define FD612_SCL_CLR {I2C_SCL = 0;} ///<将SCL设置为低电平
#define FD612_SCL_D_OUT {} ///<设置SCL为输出方向,对于双向I/O需切换为输出
#define FD612_SDA_SET {I2C_SDA = 1;} ///<将SDA设置为高电平
#define FD612_SDA_CLR {I2C_SDA = 0;} ///<将SDA设置为低电平
#define FD612_SDA_IN {I2C_SDA = 1;} ///<当SDA设为输入方向时,读取的电平值
#define FD612_SDA_D_OUT {} ///<设置SDA为输出方向,对于双向I/O需切换为输出,建议不要设置成推挽,避免ACK处的阶梯状波形出现。
#define FD612_SDA_D_IN I2C_SDA ///<设置SDA为输入方向,对于双向I/O需切换为输入
//数码管码字定义,可根据相应硬件连接对应
#define DISP_BIT_A (1<<0) //<对应A段,根据硬件的连接配置
#define DISP_BIT_B (1<<1) //<对应B段,根据硬件的连接配置
#define DISP_BIT_C (1<<2) //<对应C段,根据硬件的连接配置
#define DISP_BIT_D (1<<3) //<对应D段,根据硬件的连接配置
#define DISP_BIT_E (1<<4) //<对应E段,根据硬件的连接配置
#define DISP_BIT_F (1<<5) //<对应F段,根据硬件的连接配置
#define DISP_BIT_G (1<<6) //<对应G段,根据硬件的连接配置
#define DISP_BIT_DP (1<<7) //<对应dp段,根据硬件的连接配置
/********FD612.C的内部宏定义 *********/
#define FD612_DELAY_1US DELAY ///< 延时的宏定义,最小延时时间为1uS
#define FD628_NEGA_DISP 1 ///<1为共阴数码管,0为共阳数码管
#define FD612_DECODE_TAB_EN 1 ///<是否开启FD612_DecodeTab[]功能 0为关闭,关闭该功能可以省CODE
#define FD612_COMBINA_SW_EN 1 ///<是否开启组合键功能 0为关闭,关闭该功能可以省RAM
/* @} FD612_REMOVE_CHANGE */
/**
* @addtogroup FD612_REMOVE_CHANGEABLE 可以修改
* 根据应用需要进行相应的修改
* 可以修改的函数 FD612_Init();FD612_Refresh();
* @{
*/
/* @} FD612_REMOVE_CHANGEABLE */
/* @} FD612_REMOVE */
/** @addtogroup FD612_APP 应用相关
* @{
*/
/** @addtogroup FD612_APP_MACRO 宏定义
* @{
*/
/* ********数码管显示字符宏定义 ******** */
#define FD612_DISP_NONE_DATA 0X00
#define FD612_DISP_0_DATA DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F
#define FD612_DISP_1_DATA DISP_BIT_B|DISP_BIT_C
#define FD612_DISP_2_DATA DISP_BIT_A|DISP_BIT_B|DISP_BIT_D|DISP_BIT_E|DISP_BIT_G
#define FD612_DISP_3_DATA DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_G
#define FD612_DISP_4_DATA DISP_BIT_B|DISP_BIT_C|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_5_DATA DISP_BIT_A|DISP_BIT_C|DISP_BIT_D|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_6_DATA DISP_BIT_A|DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_7_DATA DISP_BIT_A|DISP_BIT_B|DISP_BIT_C
#define FD612_DISP_8_DATA DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_9_DATA DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_A_DATA DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_a_DATA DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_G
#define FD612_DISP_B_DATA DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_b_DATA DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_C_DATA DISP_BIT_A|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F
#define FD612_DISP_c_DATA DISP_BIT_D|DISP_BIT_E|DISP_BIT_G
#define FD612_DISP_d_DATA DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_G
#define FD612_DISP_D_DATA DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F
#define FD612_DISP_E_DATA DISP_BIT_A|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_e_DATA DISP_BIT_A|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_F_DATA DISP_BIT_A|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_f_DATA FD612_DISP_F_DATA
#define FD612_DISP_G_DATA DISP_BIT_A|DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_g_DATA DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_H_DATA DISP_BIT_B|DISP_BIT_C|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_h_DATA DISP_BIT_C|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_I_DATA DISP_BIT_B|DISP_BIT_C
#define FD612_DISP_i_DATA DISP_BIT_C
#define FD612_DISP_J_DATA DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_E
#define FD612_DISP_j_DATA FD612_DISP_J_DATA
#define FD612_DISP_L_DATA DISP_BIT_D|DISP_BIT_E|DISP_BIT_F
#define FD612_DISP_l_DATA FD612_DISP_J_DATA
#define FD612_DISP_N_DATA DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_E|DISP_BIT_F
#define FD612_DISP_n_DATA DISP_BIT_C|DISP_BIT_E|DISP_BIT_G
#define FD612_DISP_O_DATA DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F
#define FD612_DISP_o_DATA DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_G
#define FD612_DISP_P_DATA DISP_BIT_A|DISP_BIT_B|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_p_DATA DISP_BIT_A|DISP_BIT_B|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_Q_DATA DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_q_DATA DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_R_DATA DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_r_DATA DISP_BIT_B|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_S_DATA DISP_BIT_A|DISP_BIT_C|DISP_BIT_D|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_s_DATA DISP_BIT_A|DISP_BIT_C|DISP_BIT_D|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_T_DATA DISP_BIT_A|DISP_BIT_E|DISP_BIT_F
#define FD612_DISP_t_DATA DISP_BIT_D|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_U_DATA DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F
#define FD612_DISP_u_DATA DISP_BIT_C|DISP_BIT_D|DISP_BIT_E
#define FD612_DISP_Y_DATA DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_y_DATA DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_F|DISP_BIT_G
#define FD612_DISP_Z_DATA DISP_BIT_A|DISP_BIT_B|DISP_BIT_D|DISP_BIT_E|DISP_BIT_G
#define FD612_DISP_z_DATA DISP_BIT_A|DISP_BIT_B|DISP_BIT_D|DISP_BIT_E|DISP_BIT_G
/********ACK位********/
#define FD612_NACK 1///<无应答信号
#define FD612_ACK 0///<有应答信号
#define FD612_DISP_MAX_ADDR 11 ///<FD612显示地址的最大值
#define FD612_DISP_MIN_ADDR 0 ///<FD612显示地址的最小值
/** @addtogroup FD612_APP_MACRO_CMD 控制命令
* @{
*/
//显示模式命令设置
#define FD612_8SEG_CMD 0x00 ///<8段12位
#define FD612_7SEG_CMD 0x03 ///<7段10位
//数据命令设置
#define FD612_ADDR_INC_DIGWR_CMD 0x40 ///< 自动地址增加,写数据
#define FD612_ADDR_STATIC_DIGWR_CMD 0x4c ///< 固定地址模式。写显示
//地址命令设置
/**
* @brief 写入显示数据的地址的命令
* @note 使用方法:FD612_DIGADDR_WRCMD|相应的地址
* @par Example
* @code
* FD612_Command(FD612_DIGADDR_WRCMD|FD612_DIG5_ADDR);
* @endcode
*/
#define FD612_DIGADDR_WRCMD 0xc0
//显示位相应的地址
#define FD612_DIG1_ADDR 0x00
#define FD612_DIG2_ADDR 0x01
#define FD612_DIG3_ADDR 0x02
#define FD612_DIG4_ADDR 0x03
#define FD612_DIG5_ADDR 0x04
#define FD612_DIG6_ADDR 0x05
#define FD612_DIG7_ADDR 0x06
#define FD612_DIG8_ADDR 0x07
#define FD612_DIG9_ADDR 0x08
#define FD612_DIG10_ADDR 0x09
#define FD612_DIG11_ADDR 0x0A
#define FD612_DIG12_ADDR 0x0B
//显示亮度和显示开关之间用或的关系
#define FD612_INTENS1 0x80 ///< 1级亮度
#define FD612_INTENS2 0x81 ///< 2级亮度
#define FD612_INTENS3 0x82 ///< 3级亮度
#define FD612_INTENS4 0x83 ///< 4级亮度
#define FD612_INTENS5 0x84 ///< 5级亮度
#define FD612_INTENS6 0x85 ///< 6级亮度
#define FD612_INTENS7 0x86 ///< 7级亮度
#define FD612_INTENS8 0x87 ///< 8级亮度
#define FD612_DISP_ON 0x88 ///<打开FD612显示
#define FD612_DISP_OFF 0x80 ///<关闭FD612显示
/* @} FD612_APP_MACRO_CMD */
/** @brief FD612 8段12位模式显示 */
#define FD612_8SEG_MODE do{ \
FD612_DispBuff.DispSEG_MODE=FD612_8SEG_CMD; \
FD612_Command(FD612_8SEG_CMD); \
} while(0)
/** @brief FD612 7段10位模式显示 */
#define FD612_7SEG_MODE do{ \
FD612_DispBuff.DispSEG_MODE=FD612_7SEG_CMD; \ \
FD612_Command(FD612_7SEG_CMD); \
}while(0)
/**
* @brief FD612显示亮度和显示开关控制
* @note 显示亮度和显示开关之间使用或的关系
* @par Example
* @code
* FD612_DispStateWr(FD612_INTENS6|FD612_DISP_ON);
* @endcode
*/
#define FD612_DispStateWr(DispStateTemp) do{ \
FD612_DispBuff.DispState=DispStateTemp; \
FD612_Command(DispStateTemp); \
}while(0)
/* @} FD612_APP_MACRO */
/** @addtogroup FD612_APP_DATA 相关数据
* @{
*/
extern uint8 DISP_TAB[0x10]; ///<数码管码值表
/* @} FD612_APP_DATA */
/** @addtogroup FD612_APP_FUNC 相关函数
* @{
*/
void FD612_Command(uint8 CMD ); //发送一字节的命令
void FD612_Init(void); //初始化FD612芯片
#if FD612_DECODE_TAB_EN!=0
uint8 DispGetCode(char cTemp); //数码管的查表函数
uint8 FD612_DispString( uint8 Addr,char *PStr); //某个显示地址开始显示相应的字符串
#endif
#if FD628_NEGA_DISP==1
void FD612_SingleDisp(uint8 addr,uint8 dat); //向共阴数码管某个显示地址写入一字节的显示数据
#else
void FD612_PotiveTNage(uint8 addr,uint8 dat); //向共阳数码管某个显示地址写入一字节的显示数据
#endif
void FD612_Refresh(void); //刷新FD612的相关数据
void FD612_DispDataRefresh(void); //刷新FD612的显示数据
/* @} FD612_APP_FUNC */
/**
* @addtogroup FD612_APP_DATA 相关数据
* @{
*/
typedef struct {
uint8 DispData[FD612_DISP_MAX_ADDR-FD612_DISP_MIN_ADDR+1]; ///<12位显示数据缓存器
uint8 DispState; ///<显示亮度和开关状态缓存器
uint8 DispSEG_MODE; ///<显示位段模式缓存器
} FD612_Struct_DispBuff;
/**
* @brief 显示数据和状态缓存器
* @note 可以通过宏FD612_DISP_BUFF_EN开启和关闭该功能
* @note 使用刷新功能必须先打开该功能
*/
extern FD612_Struct_DispBuff FD612_DispBuff;
/* @} FD612_APP_DATA */
/* @} FD612_APP */
/* @} FD612_DRIVER */
#endif
复制代码
数码管显示.rar
2021-4-16 10:23 上传
点击文件名下载附件
982.54 KB, 下载次数: 3
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1