久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1747|回復: 0
打印 上一主題 下一主題
收起左側

單片機數碼管集成編譯不成功,求助

[復制鏈接]
跳轉到指定樓層
樓主
ID:26229 發表于 2021-4-16 10:24 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. 數碼管集成編譯不成功,求助
  2. /**
  3. * @file            FD612.C           數碼管顯示驅動芯片 客戶代碼
  4. * @brief       FD612 的驅動
  5. * @author      ywaby
  6. * @version     1B3
  7. * @date            2014-03-31   
  8. * @note
  9. * @details  
  10. * @copyright   Copyright (c) 2013 by FUZHOU FUDA HISI MICROELECTRONICS CO.,LTD.              
  11. */


  12. #include"FD612.H"
  13. /** @addtogroup FD612_DRIVER FD612 驅動
  14.   @{
  15. */
  16. #define         FD612_DELAY_LOW                             FD612_DELAY_1US         ///<時鐘低電平延時                                    
  17. #define                FD612_DELAY_HIGH                      FD612_DELAY_1US                            ///<時鐘高電平延時                                                                                                                                         
  18. #define          FD612_DELAY_WAIT                                FD612_DELAY_1US                                        ///<數據讀取等待時間
  19. #define                FD612_DELAY_SU_STA      FD612_DELAY_1US                                        ///<起始信號建立時間
  20. #define                FD612_DELAY_HD_STA      FD612_DELAY_1US                                        ///<起始信號保持時間                                         
  21. #define                FD612_DELAY_SU_STO      FD612_DELAY_1US                                        ///<停止信號建立時間  


  22. /** @addtogroup  FD612_FUNCTION  函數
  23.   @{
  24. */
  25. /** @addtogroup  FD612_COMMUNICATION  通信時序
  26.   @{
  27. */
  28. /**
  29. *  @brief  啟動FD612通信
  30. *  @param  void
  31. *  @return void
  32. *  @note   在SCL高電平期間捕獲到SDA的下降沿,FD612開始通信   
  33. */
  34. static void FD612_Start( void )                          
  35. {
  36.         FD612_SDA_SET;                                   
  37.         FD612_SCL_SET;
  38.         FD612_SDA_D_OUT;                                 //設置SDA為輸出方向
  39.         FD612_SCL_D_OUT;                                 //設置SCL為輸出方向         
  40.         FD612_DELAY_SU_STA;
  41.         FD612_SDA_CLR;                                         //發送起始信號
  42.         FD612_DELAY_HD_STA;      
  43.         FD612_SCL_CLR;                                         
  44.         FD612_DELAY_LOW;
  45. }               

  46. /**
  47. *  @brief  停止FD612通信
  48. *  @param  void
  49. *  @return void
  50. *  @note   在SCL高電平期間捕獲到SDA的上升沿,FD612停止通信  
  51. */
  52. static void FD612_Stop( void )
  53. {  
  54.          FD612_SCL_SET;                                          /* 設置SCL為高電平 */
  55.         FD612_SDA_CLR;                                          /* 設置SDA為低電平 */
  56.         FD612_SDA_D_OUT;                                  /* 設置SDA為輸出方向 */
  57.         FD612_DELAY_SU_STO;                                  /* 停止信號建立時間: */
  58.         FD612_SDA_SET;                                          /* 設置SDA為高電平 */
  59.         FD612_SDA_D_IN;                                          /* 設置SDA為輸入方向 */
  60. }
  61. /**
  62. *  @brief  發送一個字節數據給FD612,并讀取應答位
  63. *  @param  dat 發送的一字節數據
  64. *  @retval  bit  
  65. *  @return 讀取的ACK應答位
  66. *  @note   數據傳輸低位在前,高位在后
  67. */
  68. static bit FD612_WrByte( uint8 dat )
  69. {
  70.         uint8 i;                                        /* 移位寫出的位數寄存器 */
  71.   bit ACKTemp=0;
  72.         FD612_SDA_D_OUT;                        /* 設置SDA為輸出方向 */
  73.         for( i = 0; i != 8; i++ )            /* 輸出8 bit的數據 */        
  74.         {                  
  75.                 if( dat & 0x80 )
  76.                 {
  77.                     FD612_SDA_SET;                    /* 設置SDA為高電平 */
  78.                 }
  79.                 else
  80.                 {
  81.                     FD612_SDA_CLR;                        /* 設置SDA為低電平 */
  82.                 }
  83.   FD612_SCL_SET;                                /* 設置SCL為高電平 */
  84.   dat <<= 1;                                        /* 輸出數據右移一位,數據從高到低的輸出 */
  85.   FD612_DELAY_HIGH;           /* SCL時鐘高電平時間:*/
  86.   FD612_SCL_CLR;                                /* 設置SCL為低電平 */
  87.   FD612_DELAY_LOW;        
  88.         }        
  89.   //////讀取ACK位/////
  90.   FD612_SDA_SET;                                 /* 設置SDA為高電平 */            
  91.   FD612_SDA_D_IN;                                    /* 設置SDA為輸入方向 */
  92.   FD612_SCL_SET;                                          /* SCL時鐘的高電平時間:*/
  93.   if(FD612_SDA_IN==0) ACKTemp=0; /* 讀入1 bit值 */
  94.   else ACKTemp=1;
  95.   FD612_DELAY_HIGH;                 /* SCL時鐘高電平時間*/
  96.   FD612_SCL_CLR;                                      /* SCL時鐘的低電平*/
  97.   FD612_DELAY_LOW;        
  98.   return  ACKTemp ;  
  99. }        
  100. /**
  101. *  @brief  從FD612讀取一個字節數據
  102. *  @param  MSACK 發送的ACK值 發送不應答位 ACK=1;發送應答位 ACK=0
  103. *  @retval  uint8  
  104. *  @return 讀取的一字節數據
  105. *  @note   數據傳輸高位在前,低位在后
  106. */
  107. static uint8  FD612_RdByte( bit MSACK )
  108. {
  109.         uint8 i;                           
  110.         uint8 dat=0;                   /* 移位讀入的位數寄存器i */
  111.         FD612_SDA_SET;                             /* 設置SDA為高電平 */
  112.         FD612_SDA_D_IN;                             /* 設置SDA為輸入方向 */
  113.         for( i = 0; i != 8; i++ )                 /* 讀入8 bit的數據 */
  114.         {                                                                 
  115.                 FD612_SCL_SET;                                      /* 設置SCL為高電平 */
  116.                 FD612_DELAY_HIGH;                               /* SCL時鐘高電平時間:*/
  117.                  dat <<= 1;                                          /* 讀入數據右移一位,數據從高到低的讀入 */
  118.                 if( FD612_SDA_IN ) dat++;                 /* 讀入1 bit值 */
  119.                 FD612_SCL_CLR;                                        /* 設置SCL為低電平 */
  120.                 FD612_DELAY_LOW;                        
  121.         }
  122.    //////發送ACK位/////
  123.   if(MSACK==0)             /* 發送ACK應答位*/
  124.     FD612_SDA_CLR;
  125.   else FD612_SDA_SET;        
  126.         FD612_SDA_D_OUT;             /* 設置SDA為輸出方向 */
  127.         FD612_SCL_SET;                                 /* 設置SCL為高電平 */
  128.         FD612_DELAY_HIGH;                         /* SCL 時鐘高電平時間:*/
  129.         FD612_SCL_CLR;                                 /* 設置SCL為低電平 */
  130.         FD612_DELAY_LOW;                           
  131.         return dat;                                                         /* 返回接收到的數據 */
  132. }
  133. /* @} FD612_COMMUNICATION */
  134. /** @addtogroup  FD612_API_FUNTION  應用函數
  135.   @{
  136. */
  137. /**
  138. *  @brief  向FD612發送一字節的命令
  139. *  @param  CMD 發送一字節的命令
  140. *  @return void
  141. *  @note   CMD是控制命令中的宏
  142. *  @par Example
  143. *  @code
  144. *  FD612_Command(FD612_7SEG_CMD);
  145. *  @endcode
  146. */
  147. void FD612_Command( uint8 CMD )                                 
  148. {                                                                        
  149.         FD612_Start();
  150.         FD612_WrByte(CMD);
  151.         FD612_Stop();        
  152. }
  153. /**
  154. *  @brief  刷新FD612的顯示數據
  155. *  @param  void
  156. *  @return void
  157. *  @note   使用該函數需要打開 FD612_DISP_BUFF_EN
  158. */
  159. void FD612_DispDataRefresh(void)
  160. {
  161.         uint8 i;
  162.         FD612_Command(FD612_ADDR_INC_DIGWR_CMD);        
  163.         FD612_Start();               
  164.         FD612_WrByte(FD612_DIGADDR_WRCMD|FD612_DISP_MIN_ADDR) ;
  165.         for(i=FD612_DISP_MIN_ADDR;i<=FD612_DISP_MAX_ADDR;i++)
  166.                 FD612_WrByte(FD612_DispBuff.DispData[i]) ;[/i][i]
  167.         FD612_Stop();
  168. }
  169. /**
  170. *  @brief  刷新FD612的相關數據
  171. *  @param  void
  172. *  @return void
  173. *  @note   
  174. *  @note   使用該函數需要打開 FD612_DISP_BUFF_EN
  175. */
  176. void FD612_Refresh(void)
  177. {
  178.         FD612_Command(FD612_DispBuff.DispSEG_MODE);
  179.         FD612_DispDataRefresh();
  180.         FD612_Command(FD612_DispBuff.DispState);
  181. }
  182. /* @} FD612_API_FUNTION */
  183. #if FD612_DECODE_TAB_EN!=0

  184. #define FD612_DECODE_TAB_NUM 64///<FD612_DecodeTab[]的字符個數
  185. typedef struct
  186. {
  187.         uint8 Character; ///<字符
  188.         uint8 Bitmap;     ///<字符對應的碼值
  189. } Struct_LED_Bitmap; ///<數碼管的碼值和字符的對應結構體,用于查表
  190. ///<數碼管的碼值和字符的對應表格,用于查表
  191. Struct_LED_Bitmap FD612_DecodeTab[FD612_DECODE_TAB_NUM] = {
  192. {'0', FD612_DISP_0_DATA}, {'1', FD612_DISP_1_DATA}, {'2', FD612_DISP_2_DATA}, {'3', FD612_DISP_3_DATA},
  193.     {'4', FD612_DISP_4_DATA}, {'5', FD612_DISP_5_DATA}, {'6', FD612_DISP_6_DATA}, {'7', FD612_DISP_7_DATA},
  194.     {'8', FD612_DISP_8_DATA}, {'9', FD612_DISP_9_DATA}, {'a', FD612_DISP_a_DATA}, {'A', FD612_DISP_A_DATA},
  195.     {'b', FD612_DISP_b_DATA}, {'B', FD612_DISP_B_DATA}, {'c', FD612_DISP_c_DATA}, {'C', FD612_DISP_C_DATA},
  196.     {'d', FD612_DISP_d_DATA}, {'D', FD612_DISP_D_DATA}, {'e', FD612_DISP_e_DATA}, {'E', FD612_DISP_E_DATA},
  197.     {'f', FD612_DISP_f_DATA}, {'F', FD612_DISP_F_DATA}, {'g', FD612_DISP_g_DATA}, {'G', FD612_DISP_G_DATA},
  198.     {'h', FD612_DISP_h_DATA}, {'i', FD612_DISP_i_DATA}, {'j', FD612_DISP_j_DATA}, {'k', FD612_DISP_k_DATA},
  199.     {'l', FD612_DISP_l_DATA}, {'m', FD612_DISP_m_DATA}, {'n', FD612_DISP_n_DATA}, {'o', FD612_DISP_o_DATA},
  200.     {'p', FD612_DISP_p_DATA}, {'q', FD612_DISP_q_DATA}, {'r', FD612_DISP_r_DATA}, {'s', FD612_DISP_s_DATA},
  201.     {'t', FD612_DISP_t_DATA}, {'u', FD612_DISP_u_DATA}, {'v', FD612_DISP_v_DATA}, {'w', FD612_DISP_w_DATA},
  202.     {'x', FD612_DISP_x_DATA}, {'y', FD612_DISP_y_DATA}, {'z', FD612_DISP_z_DATA},
  203.     {'H', FD612_DISP_H_DATA}, {'I', FD612_DISP_I_DATA}, {'J', FD612_DISP_J_DATA}, {'K', FD612_DISP_K_DATA},
  204.     {'L', FD612_DISP_L_DATA}, {'M', FD612_DISP_M_DATA}, {'N', FD612_DISP_N_DATA}, {'O', FD612_DISP_O_DATA},
  205.     {'P', FD612_DISP_P_DATA}, {'Q', FD612_DISP_Q_DATA}, {'R', FD612_DISP_R_DATA}, {'S', FD612_DISP_S_DATA},
  206.     {'T', FD612_DISP_T_DATA}, {'U', FD612_DISP_U_DATA}, {'V', FD612_DISP_V_DATA}, {'W', FD612_DISP_W_DATA},
  207.     {'X', FD612_DISP_X_DATA}, {'Y', FD612_DISP_Y_DATA}, {'Z', FD612_DISP_Z_DATA},
  208. };

  209. /**
  210. *  @brief  數碼管的查表函數
  211. *  @param  cTemp 查找的字符
  212. *  @retval uint8  
  213. *  @return 字符對應的數碼管碼值
  214. *  @note   使用該函數需要打開 FD612_DECODE_TAB_EN
  215. *  @par Example
  216. *  @code
  217. *  char CTmp;
  218. *  CTmp=DispGetCode('S');
  219. *  @endcode
  220. */

  221. uint8 DispGetCode(char cTemp)
  222. {
  223.         uint8 i, Bitmap=0x00;
  224.         for(i=0; i<FD612_DECODE_TAB_NUM; i++)
  225.         {
  226.                 if(FD612_DecodeTab[i].Character == cTemp)[/i][i]
  227.                 {
  228.                         Bitmap = FD612_DecodeTab[i].Bitmap;[/i][i]
  229.                         break;
  230.                 }
  231.         }
  232.         return Bitmap;
  233. }
  234. #endif
  235. #if FD628_NEGA_DISP==0
  236. typedef struct
  237. {
  238.         uint8 NegaAddr; ///<對應的共陰數碼管數據地址
  239.         uint8 BitAddr;     ///<對應段地址
  240. } Struct_PotiveTNage_Bitmap; ///<數碼管的碼值和字符的對應結構體,用于查表
  241. ///<共陽對應共陰的表格,用于查表,根據具體的應用電路進行修改
  242. Struct_PotiveTNage_Bitmap FD612_PotiveTNage_Bitmap[12][8] = {
  243.     { {0x04,0x01},{0x05,0x01},{0x06,0x01},{0x07,0x01},  {0x08,0x01},{0x09,0x01},{0x0a,0x01},{0x0b,0x01}},         
  244.     { {0x04,0x02},{0x05,0x02},{0x06,0x02},{0x07,0x02},  {0x08,0x02},{0x09,0x02},{0x0a,0x02},{0x0b,0x02}},  
  245.     { {0x04,0x04},{0x05,0x04},{0x06,0x04},{0x07,0x04},  {0x08,0x04},{0x09,0x04},{0x0a,0x04},{0x0b,0x04}},
  246.     { {0x04,0x08},{0x05,0x08},{0x06,0x08},{0x07,0x08},  {0x08,0x08},{0x09,0x08},{0x0a,0x08},{0x0b,0x08}},

  247.     { {0x00,0x01},{0x01,0x01},{0x02,0x01},{0x03,0x01},  {0x08,0x10},{0x09,0x10},{0x0a,0x10},{0x0b,0x10}},
  248.     { {0x00,0x02},{0x01,0x02},{0x02,0x02},{0x03,0x02},  {0x08,0x20},{0x09,0x20},{0x0a,0x20},{0x0b,0x20}},
  249.     { {0x00,0x04},{0x01,0x04},{0x02,0x04},{0x03,0x04},  {0x08,0x40},{0x09,0x40},{0x0a,0x40},{0x0b,0x40}},
  250.     { {0x00,0x08},{0x01,0x08},{0x02,0x08},{0x03,0x08},  {0x08,0x80},{0x09,0x80},{0x0a,0x80},{0x0b,0x80}},

  251.     { {0x00,0x10},{0x01,0x10},{0x02,0x10},{0x03,0x10},  {0x04,0x10},{0x05,0x10},{0x06,0x10},{0x07,0x10}},
  252.     { {0x00,0x20},{0x01,0x20},{0x02,0x20},{0x03,0x20},  {0x04,0x20},{0x05,0x20},{0x06,0x20},{0x07,0x20}},
  253.     { {0x00,0x40},{0x01,0x40},{0x02,0x40},{0x03,0x40},  {0x04,0x40},{0x05,0x40},{0x06,0x40},{0x07,0x40}},
  254.     { {0x00,0x80},{0x01,0x80},{0x02,0x80},{0x03,0x80},  {0x04,0x80},{0x05,0x80},{0x06,0x80},{0x07,0x80}}
  255. };

  256. /** @addtogroup FD612_API_FUNTION
  257.   @{
  258. */

  259. /** @addtogroup FD612_PT_API 共陽數碼管應用函數
  260.   @{
  261. */
  262.   /**
  263. *  @brief  共陽數碼管的某一位寫入顯示數據
  264. *  @param  Addr 共陽數碼管的位
  265. *  @param  Dat   顯示的數據
  266. *  @retval void  
  267. *  @return
  268. *  @note   使用該函數需要打開 FD612_DECODE_TAB_EN FD612_DISP_BUFF_EN FD628_NEGA_DISP
  269. *  @par Example
  270. *  @code
  271. *  PotiveTNage(1,0X3F); //第一位數碼管顯示‘0’
  272. *  @endcode
  273. */
  274. void FD612_PotiveTNage(uint8 Addr,uint8 Dat){
  275.   uint8 i;
  276.   for(i=0;i<8;i++){
  277.     if(Dat&(0x01<<i))
  278.       FD612_DispBuff.DispData[FD612_PotiveTNage_Bitmap[Addr][i].NegaAddr]|=FD612_PotiveTNage_Bitmap[Addr][i].BitAddr;[/i][/i][i][i]
  279.     else
  280.       FD612_DispBuff.DispData[FD612_PotiveTNage_Bitmap[Addr][i].NegaAddr]&=(~FD612_PotiveTNage_Bitmap[Addr][i].BitAddr);   [/i][/i][i][i]
  281.   }
  282. }
  283.   /**
  284. *  @brief FD612 某個顯示地址開始顯示相應的字符串
  285. *  @param  Addr 字符串顯示的起始地址
  286. *  @param  PStr 指向相應的字符串
  287. *  @retval uint8  
  288. *  @return 返回函數執行結果,0為執行成功,1為起始地址超出最大地址
  289. *  @note   使用該函數需要打開 FD612_DECODE_TAB_EN
  290. *  @par Example
  291. *  @code
  292. *  FD612_DispString(FD612_DIG3_ADDR,"FD612");
  293. *  @endcode
  294. */
  295. #if FD612_DECODE_TAB_EN!=0
  296. uint8 FD612_DispString( uint8 Addr,char *PStr)
  297. {
  298.         uint8 i;
  299.         if (Addr>FD612_DISP_MAX_ADDR)return 1;
  300.          for(i=0;i+Addr<=FD612_DISP_MAX_ADDR;i++)
  301.         {
  302.                 if(PStr[i]=='\0')break;//判斷是否到達字符串的尾部[/i][i]
  303.     FD612_PotiveTNage(i+Addr,DispGetCode(PStr[i]));[/i][i]
  304.         }
  305.   FD612_Refresh();
  306.   return 0;
  307. }
  308. #endif
  309. #else
  310. /* @} FD612_PT_API */
  311. /** @addtogroup FD612_NG_API 共陰數碼管應用函數
  312.   @{
  313. */
  314. /**
  315. *  @brief  向共陰數碼管某個顯示地址寫入一字節的顯示數據
  316. *  @param  Addr      寫入的顯示地址
  317. *  @param  DispData  寫入的顯示數據
  318. *  @return void
  319. *  @note 地址固定方式寫入顯示數據
  320. *  @par Example
  321. *  @code
  322. *  FD612_SingleDisp(FD612_DIG3_ADDR,FD612_DISP_0);
  323. *  @endcode
  324. */
  325. void FD612_SingleDisp(uint8 Addr,uint8 DispData)
  326. {
  327.         FD612_Command(FD612_ADDR_STATIC_DIGWR_CMD);        
  328.         FD612_DispBuff.DispData[Addr]=DispData;
  329.         FD612_Start();               
  330.         FD612_WrByte(FD612_DIGADDR_WRCMD|Addr ) ;
  331.         FD612_WrByte(DispData ) ;
  332.         FD612_Stop();
  333. }

  334.   /**
  335. *  @brief FD612 某個顯示地址開始顯示相應的字符串
  336. *  @param  Addr 字符串顯示的起始地址
  337. *  @param  PStr 指向相應的字符串
  338. *  @retval uint8  
  339. *  @return 返回函數執行結果,0為執行成功,1為起始地址超出最大地址
  340. *  @note   使用該函數需要打開 FD612_DECODE_TAB_EN
  341. *  @par Example
  342. *  @code
  343. *  FD612_DispString(FD612_DIG3_ADDR,"FD612");
  344. *  @endcode
  345. */
  346. #if FD612_DECODE_TAB_EN!=0
  347. uint8 FD612_DispString( uint8 Addr,char *PStr)
  348. {
  349.         uint8 i;
  350.         if (Addr>FD612_DISP_MAX_ADDR)return 1;
  351.         FD612_Command(FD612_ADDR_INC_DIGWR_CMD);        
  352.         FD612_Start();               
  353.         FD612_WrByte(FD612_DIGADDR_WRCMD|Addr) ;
  354.         for(i=0;i+Addr<=FD612_DISP_MAX_ADDR;i++)
  355.         {
  356.                 if(PStr[i]=='\0')break;//判斷是否到達字符串的尾部[/i][i]
  357.                 FD612_DispBuff.DispData[i+Addr]=DispGetCode(PStr[i]);[/i][i]
  358.                 FD612_WrByte(FD612_DispBuff.DispData[i+Addr]) ;
  359.         }
  360.         FD612_Stop();
  361.         return 0;
  362. }
  363. #endif
  364. /* @} FD612_NG_API */
  365. #endif
  366. /**
  367. *  @brief  初始化FD612
  368. *  @param  void
  369. *  @return void
  370. *  @note 用戶程序開始時調用該函數對FD612進行初始化
  371. *  @note 用戶可以根據需要進行修改
  372. *  @par Example
  373. *  @code 共陰參考
  374.   uint8 i;
  375.   FD612_8SEG_MODE;
  376.   for(i=0;i<12;i++){
  377.     FD612_DispBuff.DispData[i]= 0X00;[/i][i]
  378.   }
  379.    FD612_DispBuff.DispData[FD612_DIG1_ADDR]=FD612_DISP_F;
  380.    FD612_DispBuff.DispData[FD612_DIG2_ADDR]=FD612_DISP_d;   
  381.   FD612_DispString(FD612_DIG3_ADDR,"612");
  382.   FD612_DispStateWr(FD612_INTENS8|FD612_DISP_ON);  
  383.   FD612_Refresh();
  384. *   @endcode
  385. *   @code 共陽參考
  386.   uint8 i;
  387.   FD612_8SEG_MODE;
  388.   for(i=0;i<12;i++){
  389.     FD612_DispBuff.DispData[i]= 0X00;[/i][i]
  390.   }
  391. FD612_PotiveTNage(FD612_DIG1_ADDR,FD612_DISP_F);
  392. FD612_PotiveTNage(FD612_DIG2_ADDR,FD612_DISP_d);  
  393.   FD612_DispString(FD612_DIG3_ADDR,"612");
  394.   FD612_DispStateWr(FD612_INTENS8|FD612_DISP_ON);  
  395.   FD612_Refresh();
  396. *  @endcode  
  397. */

  398.   void FD612_Init( void)//<共陽參考
  399. {

  400. }
  401. /* @} FD612_API_FUNTION */
  402. /* @} FD612_FUNTION */
  403. /* @} FD612_DRIVER */


  404. /******************* (C) COPYRIGHT 2013 FDHISI *****END OF FILE****/

  405. //海矽數顯寶移植生成
  406. #ifndef __FD612_H__
  407. #define __FD612_H__


  408. #include "intrins.h"
  409. #include "STC12LE5A60S2.H"


  410. typedef char sint8;
  411. typedef short int sint16;
  412. typedef long int sint32;
  413. typedef unsigned char  uint8;
  414. typedef unsigned short uint16;
  415. typedef unsigned long  uint32;
  416. typedef bit boolean;                        //bit可用unsigned char 替代
  417. typedef bit BOOLEAN;                        //bit可用unsigned char 替代


  418. //DelayConfig2:適用于2線協議的配置, 例如:FD632
  419. //時鐘:11.0592MHz
  420. //8051指令集:STC-Y3
  421. //適用單片機:STC12Cxx/STC12LExx/STC11Fxx/STC11Lxx/STC10Fxx/STC10Lxx等
  422. #define DELAY {unsigned char i;_nop_();i = 16;while (--i);} ///<延時時序宏,控制SCL以及SDA的速率,建議在5uS以上


  423. //IoConfig2:適用于2線協議的配置, 例如:FD632
  424. sbit I2C_SCL = P0 ^ 0;
  425. sbit I2C_SDA = P0 ^ 1;


  426. #define FD612_SCL_SET   {I2C_SCL = 1;}    ///<將SCL設置為高電平
  427. #define FD612_SCL_CLR   {I2C_SCL = 0;}    ///<將SCL設置為低電平
  428. #define FD612_SCL_D_OUT {}                ///<設置SCL為輸出方向,對于雙向I/O需切換為輸出


  429. #define FD612_SDA_SET   {I2C_SDA = 1;}    ///<將SDA設置為高電平
  430. #define FD612_SDA_CLR   {I2C_SDA = 0;}    ///<將SDA設置為低電平
  431. #define FD612_SDA_IN    {I2C_SDA = 1;}    ///<當SDA設為輸入方向時,讀取的電平值
  432. #define FD612_SDA_D_OUT {}                ///<設置SDA為輸出方向,對于雙向I/O需切換為輸出,建議不要設置成推挽,避免ACK處的階梯狀波形出現。
  433. #define FD612_SDA_D_IN  I2C_SDA           ///<設置SDA為輸入方向,對于雙向I/O需切換為輸入


  434. //數碼管碼字定義,可根據相應硬件連接對應
  435. #define DISP_BIT_A  (1<<0)    //<對應A段,根據硬件的連接配置
  436. #define DISP_BIT_B  (1<<1)    //<對應B段,根據硬件的連接配置
  437. #define DISP_BIT_C  (1<<2)    //<對應C段,根據硬件的連接配置
  438. #define DISP_BIT_D  (1<<3)    //<對應D段,根據硬件的連接配置
  439. #define DISP_BIT_E  (1<<4)    //<對應E段,根據硬件的連接配置
  440. #define DISP_BIT_F  (1<<5)    //<對應F段,根據硬件的連接配置
  441. #define DISP_BIT_G  (1<<6)    //<對應G段,根據硬件的連接配置
  442. #define DISP_BIT_DP (1<<7)    //<對應dp段,根據硬件的連接配置




  443. /********FD612.C的內部宏定義 *********/
  444. #define        FD612_DELAY_1US                        DELAY        ///< 延時的宏定義,最小延時時間為1uS
  445. #define FD628_NEGA_DISP                        1                ///<1為共陰數碼管,0為共陽數碼管
  446. #define        FD612_DECODE_TAB_EN                1                ///<是否開啟FD612_DecodeTab[]功能 0為關閉,關閉該功能可以省CODE
  447. #define        FD612_COMBINA_SW_EN     1                 ///<是否開啟組合鍵功能 0為關閉,關閉該功能可以省RAM


  448. /* @} FD612_REMOVE_CHANGE */
  449. /**
  450. * @addtogroup  FD612_REMOVE_CHANGEABLE   可以修改
  451. * 根據應用需要進行相應的修改
  452. * 可以修改的函數 FD612_Init();FD612_Refresh();
  453. * @{
  454. */
  455. /* @} FD612_REMOVE_CHANGEABLE */
  456. /* @} FD612_REMOVE */
  457. /** @addtogroup  FD612_APP 應用相關
  458.   * @{
  459. */
  460. /** @addtogroup  FD612_APP_MACRO   宏定義
  461.   * @{
  462. */


  463. /* ********數碼管顯示字符宏定義 ******** */
  464. #define FD612_DISP_NONE_DATA 0X00
  465. #define FD612_DISP_0_DATA  DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F
  466. #define FD612_DISP_1_DATA  DISP_BIT_B|DISP_BIT_C
  467. #define FD612_DISP_2_DATA  DISP_BIT_A|DISP_BIT_B|DISP_BIT_D|DISP_BIT_E|DISP_BIT_G
  468. #define FD612_DISP_3_DATA  DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_G
  469. #define FD612_DISP_4_DATA  DISP_BIT_B|DISP_BIT_C|DISP_BIT_F|DISP_BIT_G
  470. #define FD612_DISP_5_DATA  DISP_BIT_A|DISP_BIT_C|DISP_BIT_D|DISP_BIT_F|DISP_BIT_G
  471. #define FD612_DISP_6_DATA  DISP_BIT_A|DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
  472. #define FD612_DISP_7_DATA  DISP_BIT_A|DISP_BIT_B|DISP_BIT_C
  473. #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
  474. #define FD612_DISP_9_DATA  DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_F|DISP_BIT_G
  475. #define FD612_DISP_A_DATA  DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
  476. #define FD612_DISP_a_DATA  DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_G
  477. #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
  478. #define FD612_DISP_b_DATA  DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
  479. #define FD612_DISP_C_DATA  DISP_BIT_A|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F
  480. #define FD612_DISP_c_DATA  DISP_BIT_D|DISP_BIT_E|DISP_BIT_G
  481. #define FD612_DISP_d_DATA  DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_G
  482. #define FD612_DISP_D_DATA  DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F
  483. #define FD612_DISP_E_DATA  DISP_BIT_A|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
  484. #define FD612_DISP_e_DATA  DISP_BIT_A|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
  485. #define FD612_DISP_F_DATA  DISP_BIT_A|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
  486. #define FD612_DISP_f_DATA  FD612_DISP_F_DATA
  487. #define FD612_DISP_G_DATA  DISP_BIT_A|DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
  488. #define FD612_DISP_g_DATA  DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_F|DISP_BIT_G
  489. #define FD612_DISP_H_DATA  DISP_BIT_B|DISP_BIT_C|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
  490. #define FD612_DISP_h_DATA  DISP_BIT_C|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
  491. #define FD612_DISP_I_DATA  DISP_BIT_B|DISP_BIT_C
  492. #define FD612_DISP_i_DATA  DISP_BIT_C
  493. #define FD612_DISP_J_DATA  DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_E
  494. #define FD612_DISP_j_DATA  FD612_DISP_J_DATA
  495. #define FD612_DISP_L_DATA  DISP_BIT_D|DISP_BIT_E|DISP_BIT_F
  496. #define FD612_DISP_l_DATA  FD612_DISP_J_DATA
  497. #define FD612_DISP_N_DATA  DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_E|DISP_BIT_F
  498. #define FD612_DISP_n_DATA  DISP_BIT_C|DISP_BIT_E|DISP_BIT_G
  499. #define FD612_DISP_O_DATA  DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F
  500. #define FD612_DISP_o_DATA  DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_G
  501. #define FD612_DISP_P_DATA  DISP_BIT_A|DISP_BIT_B|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
  502. #define FD612_DISP_p_DATA  DISP_BIT_A|DISP_BIT_B|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
  503. #define FD612_DISP_Q_DATA  DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_F|DISP_BIT_G
  504. #define FD612_DISP_q_DATA  DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_F|DISP_BIT_G
  505. #define FD612_DISP_R_DATA  DISP_BIT_A|DISP_BIT_B|DISP_BIT_C|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
  506. #define FD612_DISP_r_DATA  DISP_BIT_B|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
  507. #define FD612_DISP_S_DATA  DISP_BIT_A|DISP_BIT_C|DISP_BIT_D|DISP_BIT_F|DISP_BIT_G
  508. #define FD612_DISP_s_DATA  DISP_BIT_A|DISP_BIT_C|DISP_BIT_D|DISP_BIT_F|DISP_BIT_G
  509. #define FD612_DISP_T_DATA  DISP_BIT_A|DISP_BIT_E|DISP_BIT_F
  510. #define FD612_DISP_t_DATA  DISP_BIT_D|DISP_BIT_E|DISP_BIT_F|DISP_BIT_G
  511. #define FD612_DISP_U_DATA  DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_E|DISP_BIT_F
  512. #define FD612_DISP_u_DATA  DISP_BIT_C|DISP_BIT_D|DISP_BIT_E
  513. #define FD612_DISP_Y_DATA  DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_F|DISP_BIT_G
  514. #define FD612_DISP_y_DATA  DISP_BIT_B|DISP_BIT_C|DISP_BIT_D|DISP_BIT_F|DISP_BIT_G
  515. #define FD612_DISP_Z_DATA  DISP_BIT_A|DISP_BIT_B|DISP_BIT_D|DISP_BIT_E|DISP_BIT_G
  516. #define FD612_DISP_z_DATA  DISP_BIT_A|DISP_BIT_B|DISP_BIT_D|DISP_BIT_E|DISP_BIT_G




  517. /********ACK位********/
  518. #define FD612_NACK 1///<無應答信號
  519. #define FD612_ACK  0///<有應答信號


  520. #define        FD612_DISP_MAX_ADDR 11    ///<FD612顯示地址的最大值
  521. #define        FD612_DISP_MIN_ADDR 0     ///<FD612顯示地址的最小值
  522. /** @addtogroup  FD612_APP_MACRO_CMD    控制命令
  523.   * @{
  524. */
  525. //顯示模式命令設置
  526. #define FD612_8SEG_CMD        0x00                ///<8段12位
  527. #define FD612_7SEG_CMD        0x03                ///<7段10位
  528. //數據命令設置
  529. #define FD612_ADDR_INC_DIGWR_CMD                      0x40                    ///< 自動地址增加,寫數據        
  530. #define FD612_ADDR_STATIC_DIGWR_CMD                          0x4c                    ///< 固定地址模式。寫顯示
  531. //地址命令設置
  532. /**
  533. *  @brief 寫入顯示數據的地址的命令
  534. *  @note  使用方法:FD612_DIGADDR_WRCMD|相應的地址
  535. *  @par Example
  536. *  @code
  537. *  FD612_Command(FD612_DIGADDR_WRCMD|FD612_DIG5_ADDR);
  538. *  @endcode
  539. */
  540. #define FD612_DIGADDR_WRCMD        0xc0      
  541. //顯示位相應的地址
  542. #define FD612_DIG1_ADDR 0x00
  543. #define FD612_DIG2_ADDR 0x01
  544. #define FD612_DIG3_ADDR 0x02
  545. #define FD612_DIG4_ADDR 0x03
  546. #define FD612_DIG5_ADDR 0x04
  547. #define FD612_DIG6_ADDR 0x05
  548. #define FD612_DIG7_ADDR 0x06
  549. #define FD612_DIG8_ADDR 0x07
  550. #define FD612_DIG9_ADDR 0x08
  551. #define FD612_DIG10_ADDR 0x09
  552. #define FD612_DIG11_ADDR 0x0A
  553. #define FD612_DIG12_ADDR 0x0B
  554. //顯示亮度和顯示開關之間用或的關系
  555. #define FD612_INTENS1                0x80                ///< 1級亮度        
  556. #define FD612_INTENS2                0x81                ///< 2級亮度        
  557. #define FD612_INTENS3                0x82                ///< 3級亮度
  558. #define FD612_INTENS4                0x83                ///< 4級亮度        
  559. #define FD612_INTENS5                0x84          ///< 5級亮度        
  560. #define FD612_INTENS6                0x85                ///< 6級亮度
  561. #define FD612_INTENS7                0x86                ///< 7級亮度        
  562. #define FD612_INTENS8                0x87                ///< 8級亮度


  563. #define FD612_DISP_ON   0x88          ///<打開FD612顯示
  564. #define FD612_DISP_OFF  0x80                ///<關閉FD612顯示
  565. /* @} FD612_APP_MACRO_CMD */


  566. /** @brief  FD612 8段12位模式顯示 */
  567. #define FD612_8SEG_MODE   do{ \
  568.                           FD612_DispBuff.DispSEG_MODE=FD612_8SEG_CMD;   \
  569.                           FD612_Command(FD612_8SEG_CMD);  \
  570.                           } while(0)
  571. /** @brief  FD612 7段10位模式顯示 */                     
  572. #define FD612_7SEG_MODE do{  \
  573.                           FD612_DispBuff.DispSEG_MODE=FD612_7SEG_CMD;   \               \
  574.                           FD612_Command(FD612_7SEG_CMD);  \
  575.                           }while(0)
  576. /**
  577. *  @brief  FD612顯示亮度和顯示開關控制
  578. *  @note   顯示亮度和顯示開關之間使用或的關系
  579. *  @par Example
  580. *  @code
  581. *  FD612_DispStateWr(FD612_INTENS6|FD612_DISP_ON);
  582. *  @endcode
  583. */                        
  584. #define FD612_DispStateWr(DispStateTemp)  do{  \
  585.                                         FD612_DispBuff.DispState=DispStateTemp; \
  586.                                         FD612_Command(DispStateTemp); \
  587.                                         }while(0)


  588. /* @} FD612_APP_MACRO */
  589. /** @addtogroup  FD612_APP_DATA   相關數據
  590.   * @{
  591. */
  592. extern          uint8 DISP_TAB[0x10]; ///<數碼管碼值表
  593. /* @} FD612_APP_DATA */
  594. /** @addtogroup  FD612_APP_FUNC   相關函數
  595.   * @{
  596. */
  597. void  FD612_Command(uint8 CMD ); //發送一字節的命令
  598. void FD612_Init(void);  //初始化FD612芯片
  599. #if FD612_DECODE_TAB_EN!=0
  600. uint8 DispGetCode(char cTemp);  //數碼管的查表函數
  601. uint8 FD612_DispString( uint8 Addr,char *PStr); //某個顯示地址開始顯示相應的字符串
  602. #endif
  603. #if FD628_NEGA_DISP==1
  604. void FD612_SingleDisp(uint8 addr,uint8 dat); //向共陰數碼管某個顯示地址寫入一字節的顯示數據
  605. #else
  606. void FD612_PotiveTNage(uint8 addr,uint8 dat); //向共陽數碼管某個顯示地址寫入一字節的顯示數據
  607. #endif
  608. void FD612_Refresh(void); //刷新FD612的相關數據
  609. void  FD612_DispDataRefresh(void);  //刷新FD612的顯示數據
  610. /* @} FD612_APP_FUNC */
  611. /**
  612. * @addtogroup  FD612_APP_DATA   相關數據
  613. * @{
  614. */
  615. typedef struct {
  616.         uint8 DispData[FD612_DISP_MAX_ADDR-FD612_DISP_MIN_ADDR+1]; ///<12位顯示數據緩存器
  617.         uint8 DispState;      ///<顯示亮度和開關狀態緩存器
  618.         uint8 DispSEG_MODE;   ///<顯示位段模式緩存器
  619. } FD612_Struct_DispBuff;
  620. /**  
  621. *  @brief  顯示數據和狀態緩存器
  622. *  @note   可以通過宏FD612_DISP_BUFF_EN開啟和關閉該功能
  623. *  @note   使用刷新功能必須先打開該功能
  624. */
  625. extern   FD612_Struct_DispBuff FD612_DispBuff;
  626. /* @} FD612_APP_DATA */
  627. /* @} FD612_APP */
  628. /* @} FD612_DRIVER */


  629. #endif



復制代碼

數碼管顯示.rar

982.54 KB, 下載次數: 3

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久夜视频 | av网站在线播放 | 亚洲欧美综合精品久久成人 | 久久69精品久久久久久久电影好 | 狠狠色网| 久久综合伊人 | 91精品国产91久久久久久 | 中文字幕亚洲一区二区三区 | 久久一及片 | av天天看| 国产亚洲欧美在线 | 久久久久国产精品免费免费搜索 | 狠狠涩 | 国产在线精品一区二区三区 | 亚洲精品视频在线观看免费 | 羞羞视频在线观看网站 | 一区二区成人在线 | 国产日韩欧美一区二区 | 欧美日韩精品一区二区三区四区 | 我要看黄色录像一级片 | 午夜一级做a爰片久久毛片 精品综合 | 国产精品久久久久久久久久久久冷 | 中文字幕在线视频免费视频 | 神马久久春色视频 | 亚洲精品大全 | 国产美女福利在线观看 | 成人久草| 亚洲第一成人影院 | 日韩在线播放一区 | 久久精品视频在线免费观看 | 欧美一区二区在线 | 成人精品在线观看 | 国产精品久久久久一区二区三区 | 成人区一区二区三区 | 免费成人高清在线视频 | 91在线视频网址 | 久久婷婷av | 不卡一区二区在线观看 | 成人无遮挡毛片免费看 | 欧美日韩一区二区视频在线观看 | 国产一区二区视频在线观看 |