|
- 數碼管集成編譯不成功,求助
- /**
- * @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
|