標(biāo)題:
單片機數(shù)碼管集成編譯不成功,求助
[打印本頁]
作者:
fdc2011
時間:
2021-4-16 10:24
標(biāo)題:
單片機數(shù)碼管集成編譯不成功,求助
數(shù)碼管集成編譯不成功,求助
/**
* @file FD612.C 數(shù)碼管顯示驅(qū)動芯片 客戶代碼
* @brief FD612 的驅(qū)動
* @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 驅(qū)動
@{
*/
#define FD612_DELAY_LOW FD612_DELAY_1US ///<時鐘低電平延時
#define FD612_DELAY_HIGH FD612_DELAY_1US ///<時鐘高電平延時
#define FD612_DELAY_WAIT FD612_DELAY_1US ///<數(shù)據(jù)讀取等待時間
#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 函數(shù)
@{
*/
/** @addtogroup FD612_COMMUNICATION 通信時序
@{
*/
/**
* @brief 啟動FD612通信
* @param void
* @return void
* @note 在SCL高電平期間捕獲到SDA的下降沿,F(xiàn)D612開始通信
*/
static void FD612_Start( void )
{
FD612_SDA_SET;
FD612_SCL_SET;
FD612_SDA_D_OUT; //設(shè)置SDA為輸出方向
FD612_SCL_D_OUT; //設(shè)置SCL為輸出方向
FD612_DELAY_SU_STA;
FD612_SDA_CLR; //發(fā)送起始信號
FD612_DELAY_HD_STA;
FD612_SCL_CLR;
FD612_DELAY_LOW;
}
/**
* @brief 停止FD612通信
* @param void
* @return void
* @note 在SCL高電平期間捕獲到SDA的上升沿,F(xiàn)D612停止通信
*/
static void FD612_Stop( void )
{
FD612_SCL_SET; /* 設(shè)置SCL為高電平 */
FD612_SDA_CLR; /* 設(shè)置SDA為低電平 */
FD612_SDA_D_OUT; /* 設(shè)置SDA為輸出方向 */
FD612_DELAY_SU_STO; /* 停止信號建立時間: */
FD612_SDA_SET; /* 設(shè)置SDA為高電平 */
FD612_SDA_D_IN; /* 設(shè)置SDA為輸入方向 */
}
/**
* @brief 發(fā)送一個字節(jié)數(shù)據(jù)給FD612,并讀取應(yīng)答位
* @param dat 發(fā)送的一字節(jié)數(shù)據(jù)
* @retval bit
* @return 讀取的ACK應(yīng)答位
* @note 數(shù)據(jù)傳輸?shù)臀辉谇,高位在?br />
*/
static bit FD612_WrByte( uint8 dat )
{
uint8 i; /* 移位寫出的位數(shù)寄存器 */
bit ACKTemp=0;
FD612_SDA_D_OUT; /* 設(shè)置SDA為輸出方向 */
for( i = 0; i != 8; i++ ) /* 輸出8 bit的數(shù)據(jù) */
{
if( dat & 0x80 )
{
FD612_SDA_SET; /* 設(shè)置SDA為高電平 */
}
else
{
FD612_SDA_CLR; /* 設(shè)置SDA為低電平 */
}
FD612_SCL_SET; /* 設(shè)置SCL為高電平 */
dat <<= 1; /* 輸出數(shù)據(jù)右移一位,數(shù)據(jù)從高到低的輸出 */
FD612_DELAY_HIGH; /* SCL時鐘高電平時間:*/
FD612_SCL_CLR; /* 設(shè)置SCL為低電平 */
FD612_DELAY_LOW;
}
//////讀取ACK位/////
FD612_SDA_SET; /* 設(shè)置SDA為高電平 */
FD612_SDA_D_IN; /* 設(shè)置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讀取一個字節(jié)數(shù)據(jù)
* @param MSACK 發(fā)送的ACK值 發(fā)送不應(yīng)答位 ACK=1;發(fā)送應(yīng)答位 ACK=0
* @retval uint8
* @return 讀取的一字節(jié)數(shù)據(jù)
* @note 數(shù)據(jù)傳輸高位在前,低位在后
*/
static uint8 FD612_RdByte( bit MSACK )
{
uint8 i;
uint8 dat=0; /* 移位讀入的位數(shù)寄存器i */
FD612_SDA_SET; /* 設(shè)置SDA為高電平 */
FD612_SDA_D_IN; /* 設(shè)置SDA為輸入方向 */
for( i = 0; i != 8; i++ ) /* 讀入8 bit的數(shù)據(jù) */
{
FD612_SCL_SET; /* 設(shè)置SCL為高電平 */
FD612_DELAY_HIGH; /* SCL時鐘高電平時間:*/
dat <<= 1; /* 讀入數(shù)據(jù)右移一位,數(shù)據(jù)從高到低的讀入 */
if( FD612_SDA_IN ) dat++; /* 讀入1 bit值 */
FD612_SCL_CLR; /* 設(shè)置SCL為低電平 */
FD612_DELAY_LOW;
}
//////發(fā)送ACK位/////
if(MSACK==0) /* 發(fā)送ACK應(yīng)答位*/
FD612_SDA_CLR;
else FD612_SDA_SET;
FD612_SDA_D_OUT; /* 設(shè)置SDA為輸出方向 */
FD612_SCL_SET; /* 設(shè)置SCL為高電平 */
FD612_DELAY_HIGH; /* SCL 時鐘高電平時間:*/
FD612_SCL_CLR; /* 設(shè)置SCL為低電平 */
FD612_DELAY_LOW;
return dat; /* 返回接收到的數(shù)據(jù) */
}
/* @} FD612_COMMUNICATION */
/** @addtogroup FD612_API_FUNTION 應(yīng)用函數(shù)
@{
*/
/**
* @brief 向FD612發(fā)送一字節(jié)的命令
* @param CMD 發(fā)送一字節(jié)的命令
* @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的顯示數(shù)據(jù)
* @param void
* @return void
* @note 使用該函數(shù)需要打開 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的相關(guān)數(shù)據(jù)
* @param void
* @return void
* @note
* @note 使用該函數(shù)需要打開 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[]的字符個數(shù)
typedef struct
{
uint8 Character; ///<字符
uint8 Bitmap; ///<字符對應(yīng)的碼值
} Struct_LED_Bitmap; ///<數(shù)碼管的碼值和字符的對應(yīng)結(jié)構(gòu)體,用于查表
///<數(shù)碼管的碼值和字符的對應(yīng)表格,用于查表
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 數(shù)碼管的查表函數(shù)
* @param cTemp 查找的字符
* @retval uint8
* @return 字符對應(yīng)的數(shù)碼管碼值
* @note 使用該函數(shù)需要打開 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; ///<對應(yīng)的共陰數(shù)碼管數(shù)據(jù)地址
uint8 BitAddr; ///<對應(yīng)段地址
} Struct_PotiveTNage_Bitmap; ///<數(shù)碼管的碼值和字符的對應(yīng)結(jié)構(gòu)體,用于查表
///<共陽對應(yīng)共陰的表格,用于查表,根據(jù)具體的應(yīng)用電路進(jìn)行修改
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 共陽數(shù)碼管應(yīng)用函數(shù)
@{
*/
/**
* @brief 共陽數(shù)碼管的某一位寫入顯示數(shù)據(jù)
* @param Addr 共陽數(shù)碼管的位
* @param Dat 顯示的數(shù)據(jù)
* @retval void
* @return
* @note 使用該函數(shù)需要打開 FD612_DECODE_TAB_EN FD612_DISP_BUFF_EN FD628_NEGA_DISP
* @par Example
* @code
* PotiveTNage(1,0X3F); //第一位數(shù)碼管顯示‘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 某個顯示地址開始顯示相應(yīng)的字符串
* @param Addr 字符串顯示的起始地址
* @param PStr 指向相應(yīng)的字符串
* @retval uint8
* @return 返回函數(shù)執(zhí)行結(jié)果,0為執(zhí)行成功,1為起始地址超出最大地址
* @note 使用該函數(shù)需要打開 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;//判斷是否到達(dá)字符串的尾部[/i][i]
FD612_PotiveTNage(i+Addr,DispGetCode(PStr[i]));[/i][i]
}
FD612_Refresh();
return 0;
}
#endif
#else
/* @} FD612_PT_API */
/** @addtogroup FD612_NG_API 共陰數(shù)碼管應(yīng)用函數(shù)
@{
*/
/**
* @brief 向共陰數(shù)碼管某個顯示地址寫入一字節(jié)的顯示數(shù)據(jù)
* @param Addr 寫入的顯示地址
* @param DispData 寫入的顯示數(shù)據(jù)
* @return void
* @note 地址固定方式寫入顯示數(shù)據(jù)
* @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 某個顯示地址開始顯示相應(yīng)的字符串
* @param Addr 字符串顯示的起始地址
* @param PStr 指向相應(yīng)的字符串
* @retval uint8
* @return 返回函數(shù)執(zhí)行結(jié)果,0為執(zhí)行成功,1為起始地址超出最大地址
* @note 使用該函數(shù)需要打開 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;//判斷是否到達(dá)字符串的尾部[/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 用戶程序開始時調(diào)用該函數(shù)對FD612進(jìn)行初始化
* @note 用戶可以根據(jù)需要進(jìn)行修改
* @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****/
//海矽數(shù)顯寶移植生成
#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線協(xié)議的配置, 例如: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線協(xié)議的配置, 例如:FD632
sbit I2C_SCL = P0 ^ 0;
sbit I2C_SDA = P0 ^ 1;
#define FD612_SCL_SET {I2C_SCL = 1;} ///<將SCL設(shè)置為高電平
#define FD612_SCL_CLR {I2C_SCL = 0;} ///<將SCL設(shè)置為低電平
#define FD612_SCL_D_OUT {} ///<設(shè)置SCL為輸出方向,對于雙向I/O需切換為輸出
#define FD612_SDA_SET {I2C_SDA = 1;} ///<將SDA設(shè)置為高電平
#define FD612_SDA_CLR {I2C_SDA = 0;} ///<將SDA設(shè)置為低電平
#define FD612_SDA_IN {I2C_SDA = 1;} ///<當(dāng)SDA設(shè)為輸入方向時,讀取的電平值
#define FD612_SDA_D_OUT {} ///<設(shè)置SDA為輸出方向,對于雙向I/O需切換為輸出,建議不要設(shè)置成推挽,避免ACK處的階梯狀波形出現(xiàn)。
#define FD612_SDA_D_IN I2C_SDA ///<設(shè)置SDA為輸入方向,對于雙向I/O需切換為輸入
//數(shù)碼管碼字定義,可根據(jù)相應(yīng)硬件連接對應(yīng)
#define DISP_BIT_A (1<<0) //<對應(yīng)A段,根據(jù)硬件的連接配置
#define DISP_BIT_B (1<<1) //<對應(yīng)B段,根據(jù)硬件的連接配置
#define DISP_BIT_C (1<<2) //<對應(yīng)C段,根據(jù)硬件的連接配置
#define DISP_BIT_D (1<<3) //<對應(yīng)D段,根據(jù)硬件的連接配置
#define DISP_BIT_E (1<<4) //<對應(yīng)E段,根據(jù)硬件的連接配置
#define DISP_BIT_F (1<<5) //<對應(yīng)F段,根據(jù)硬件的連接配置
#define DISP_BIT_G (1<<6) //<對應(yīng)G段,根據(jù)硬件的連接配置
#define DISP_BIT_DP (1<<7) //<對應(yīng)dp段,根據(jù)硬件的連接配置
/********FD612.C的內(nèi)部宏定義 *********/
#define FD612_DELAY_1US DELAY ///< 延時的宏定義,最小延時時間為1uS
#define FD628_NEGA_DISP 1 ///<1為共陰數(shù)碼管,0為共陽數(shù)碼管
#define FD612_DECODE_TAB_EN 1 ///<是否開啟FD612_DecodeTab[]功能 0為關(guān)閉,關(guān)閉該功能可以省CODE
#define FD612_COMBINA_SW_EN 1 ///<是否開啟組合鍵功能 0為關(guān)閉,關(guān)閉該功能可以省RAM
/* @} FD612_REMOVE_CHANGE */
/**
* @addtogroup FD612_REMOVE_CHANGEABLE 可以修改
* 根據(jù)應(yīng)用需要進(jìn)行相應(yīng)的修改
* 可以修改的函數(shù) FD612_Init();FD612_Refresh();
* @{
*/
/* @} FD612_REMOVE_CHANGEABLE */
/* @} FD612_REMOVE */
/** @addtogroup FD612_APP 應(yīng)用相關(guān)
* @{
*/
/** @addtogroup FD612_APP_MACRO 宏定義
* @{
*/
/* ********數(shù)碼管顯示字符宏定義 ******** */
#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///<無應(yīng)答信號
#define FD612_ACK 0///<有應(yīng)答信號
#define FD612_DISP_MAX_ADDR 11 ///<FD612顯示地址的最大值
#define FD612_DISP_MIN_ADDR 0 ///<FD612顯示地址的最小值
/** @addtogroup FD612_APP_MACRO_CMD 控制命令
* @{
*/
//顯示模式命令設(shè)置
#define FD612_8SEG_CMD 0x00 ///<8段12位
#define FD612_7SEG_CMD 0x03 ///<7段10位
//數(shù)據(jù)命令設(shè)置
#define FD612_ADDR_INC_DIGWR_CMD 0x40 ///< 自動地址增加,寫數(shù)據(jù)
#define FD612_ADDR_STATIC_DIGWR_CMD 0x4c ///< 固定地址模式。寫顯示
//地址命令設(shè)置
/**
* @brief 寫入顯示數(shù)據(jù)的地址的命令
* @note 使用方法:FD612_DIGADDR_WRCMD|相應(yīng)的地址
* @par Example
* @code
* FD612_Command(FD612_DIGADDR_WRCMD|FD612_DIG5_ADDR);
* @endcode
*/
#define FD612_DIGADDR_WRCMD 0xc0
//顯示位相應(yīng)的地址
#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
//顯示亮度和顯示開關(guān)之間用或的關(guān)系
#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 ///<關(guān)閉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顯示亮度和顯示開關(guān)控制
* @note 顯示亮度和顯示開關(guān)之間使用或的關(guān)系
* @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 相關(guān)數(shù)據(jù)
* @{
*/
extern uint8 DISP_TAB[0x10]; ///<數(shù)碼管碼值表
/* @} FD612_APP_DATA */
/** @addtogroup FD612_APP_FUNC 相關(guān)函數(shù)
* @{
*/
void FD612_Command(uint8 CMD ); //發(fā)送一字節(jié)的命令
void FD612_Init(void); //初始化FD612芯片
#if FD612_DECODE_TAB_EN!=0
uint8 DispGetCode(char cTemp); //數(shù)碼管的查表函數(shù)
uint8 FD612_DispString( uint8 Addr,char *PStr); //某個顯示地址開始顯示相應(yīng)的字符串
#endif
#if FD628_NEGA_DISP==1
void FD612_SingleDisp(uint8 addr,uint8 dat); //向共陰數(shù)碼管某個顯示地址寫入一字節(jié)的顯示數(shù)據(jù)
#else
void FD612_PotiveTNage(uint8 addr,uint8 dat); //向共陽數(shù)碼管某個顯示地址寫入一字節(jié)的顯示數(shù)據(jù)
#endif
void FD612_Refresh(void); //刷新FD612的相關(guān)數(shù)據(jù)
void FD612_DispDataRefresh(void); //刷新FD612的顯示數(shù)據(jù)
/* @} FD612_APP_FUNC */
/**
* @addtogroup FD612_APP_DATA 相關(guān)數(shù)據(jù)
* @{
*/
typedef struct {
uint8 DispData[FD612_DISP_MAX_ADDR-FD612_DISP_MIN_ADDR+1]; ///<12位顯示數(shù)據(jù)緩存器
uint8 DispState; ///<顯示亮度和開關(guān)狀態(tài)緩存器
uint8 DispSEG_MODE; ///<顯示位段模式緩存器
} FD612_Struct_DispBuff;
/**
* @brief 顯示數(shù)據(jù)和狀態(tài)緩存器
* @note 可以通過宏FD612_DISP_BUFF_EN開啟和關(guān)閉該功能
* @note 使用刷新功能必須先打開該功能
*/
extern FD612_Struct_DispBuff FD612_DispBuff;
/* @} FD612_APP_DATA */
/* @} FD612_APP */
/* @} FD612_DRIVER */
#endif
復(fù)制代碼
數(shù)碼管顯示.rar
2021-4-16 10:23 上傳
點擊文件名下載附件
982.54 KB, 下載次數(shù): 3
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1