|
- 数码管集成编译不成功,求助
- /**
- * @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
复制代码 |
|