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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

PT6311 HT1628的avr單片機詳細例程

[復制鏈接]
跳轉到指定樓層
樓主
PT6311 HT1628的詳細例程,連續地址讀寫,按鍵掃描,LED顯示都有詳細的例程包。歡迎交流,例程都經過了驗證是OK的。

單片機源程序如下:
  1. /*----------------------------------------------------------------------------*/
  2. // Tools   : ICC-AVR6.31A
  3. // File    : Main.C
  4. // Target  : M8
  5. // Crystal : 8.000MHz
  6. // Date    : 2015-03-13 18:36:18
  7. // Amend   : 2015-03-16 11:26:09
  8. // Function: ET6226-LED、HT1628-LED、PT6311-VFD面板測試
  9. // Notes   : 5P/6P、7P/8P接口, 效果燈控制, IR接收自動測試


  10. /*----------------------------------------------------------------------------*/
  11. // 包含頭文件
  12. #include <macros.h>
  13. #include <iom8v.h>
  14. #include "ICCAVRMACRO.H"    // AVR 宏定義
  15. #include "ICCAVRIO.H"       // IO口配置
  16. #include "Timer2.H"         // 38K載波調制
  17. #include "FD650.H"          // ET6226 驅動
  18. #include "HT1628.H"         // HT1628 驅動
  19. #include "PT6311.H"         // PT6311 驅動


  20. /*----------------------------------------------------------------------------*/
  21. // 數據區
  22. unsigned char IR_PASS[4] = {19, 10,  5,  5};    // "PASS"
  23. unsigned char IR_FAIL[4] = {15, 10,  1, 17};    // "FAIL"


  24. /*----------------------------------------------------------------------------*/
  25. // 函數聲明
  26. void Delay_1mS(void);
  27. void Delay_mS(unsigned int n);
  28. void GPIO_Init(void);
  29. void Boot_Show(void);
  30. // ET6226
  31. void IR_Test_ET6226(void);
  32. void Device_Test_ET6226(void);
  33. unsigned char Device_Check_ET6226(void);
  34. // HT1628
  35. void IR_Test_HT1628(void);
  36. void Device_Test_HT1628(void);
  37. unsigned char Device_Check_HT1628(void);
  38. // PT6311
  39. void IR_Test_PT6311(void);
  40. void Device_Test_PT6311(void);
  41. unsigned char Device_Check_PT6311(void);


  42. /*----------------------------------------------------------------------------*/
  43. // 延時函數定義
  44. void Delay_1mS(void)    // 8MHz
  45. {
  46.     unsigned char i, j = 9;
  47.     do{i = 221; do{i--;}while(i); j--;}while(j);
  48. }

  49. void Delay_mS(unsigned int n)
  50. {
  51.     while(n--)
  52.     {
  53.         Delay_1mS();
  54.     }
  55. }


  56. /*----------------------------------------------------------------------------*/
  57. // GPIO初始化
  58. void GPIO_Init(void)
  59. {
  60.     DDRB = 0x00;    // 輸入
  61.     DDRC = 0x00;
  62.     DDRD = 0x00;

  63.     PORTB = 0xFF;   // 上拉
  64.     PORTC = 0xFF;
  65.     PORTD = 0xFF;
  66.    
  67.     LED_B_OUT;      // 輸出
  68.     LED_B_OFF;      // 藍滅
  69.    
  70.     LED_IR_OUT;     // 輸出
  71.     LED_IR_OFF;     // IR關
  72. }


  73. /*----------------------------------------------------------------------------*/
  74. // LED 閃爍指示
  75. // num: 閃爍次數
  76. void LED_Blink(unsigned char num)
  77. {
  78.     while(num--)
  79.     {
  80.         LED_B_ON;  Delay_mS(150);
  81.         LED_B_OFF; Delay_mS(150);
  82.     }
  83. }


  84. /*----------------------------------------------------------------------------*/
  85. // 系統初始化
  86. void Boot_Show(void)
  87. {
  88.     GPIO_Init();    // GPIO 初始化
  89.     TC2_Init();     // TIMER2 初始化
  90.     LED_Blink(2);   // LED閃爍、等待上電穩定
  91. }


  92. /*----------------------------------------------------------------------------*/
  93. // 主函數
  94. void main(void)
  95. {
  96.     unsigned char device = NULL;

  97.     Boot_Show();
  98.    
  99.         while(1)
  100.         {
  101.         FD_Init();                      // 初始化 ET6226
  102.         device = Device_Check_ET6226(); // 設備檢測 ET6226
  103.         if(device)                      // 有設備插入
  104.         {
  105.             Device_Test_ET6226();       // 設備測試
  106.         }
  107.         
  108.         HT_Init();                      // 初始化 HT1628
  109.         device = Device_Check_HT1628(); // 設備檢測 HT1628
  110.         if(device)                      // 有設備插入
  111.         {
  112.             Device_Test_HT1628();       // 設備測試
  113.         }
  114.         
  115.         VFD_Init();                     // 初始化 PT6311
  116.         device = Device_Check_PT6311(); // 設備檢測 PT6311
  117.         if(device)                      // 有設備插入
  118.         {
  119.             Device_Test_PT6311();       // 設備測試
  120.         }
  121.         
  122.         Delay_mS(500);                  // 每隔0.5S檢測一次是否有設備插入
  123.         }
  124. }


  125. /*----------------------------------------------------------------------------*/
  126. // 設備檢測
  127. // ret: ( 0 ~ 1 ) 0 = no, 1 = yes
  128. unsigned char Device_Check_ET6226(void)
  129. {
  130.     unsigned char Input_device;
  131.     unsigned char FD_Ack = 1;

  132.     FD_IIC_Start();                     // 開始總線
  133.     FD_IIC_Write_8bits(FD650_GET_KEY);  // 寫入指令0x4F
  134.     FD_Ack = FD_IIC_Get_Ack();          // 接收應答位
  135.     FD_IIC_Read_8bits();                // 讀出數據
  136.     FD_IIC_Set_Ack(1);                  // 發送應答位,不應答,接收數據結束
  137.     FD_IIC_Stop();                      // 結束總線

  138.     if(FD_Ack)  { Input_device = NULL; }// 無設備插入
  139.     else        { Input_device = TRUE; }// 有設備插入

  140.     return (Input_device);
  141. }


  142. /*----------------------------------------------------------------------------*/
  143. // IR接收測試
  144. void IR_Test_ET6226(void)
  145. {
  146.     unsigned char i;
  147.     unsigned char IR_high_level;// IR 采樣高電平個數
  148.     unsigned char IR_status;    // IR 初始狀態
  149.    
  150.     IR_high_level = 0;      // 初始化數據
  151.     FD_UnInit();            // SDA設置為輸入
  152.     Delay_mS(10);           // 延時等待電平穩定
  153.    
  154.     for(i = 0; i < 20; i++) // 采樣20個點(20 * 5mS = 100mS)
  155.     {
  156.         Delay_mS(5);        // 延時
  157.         if(FD_SDA_TST)      // 采樣
  158.             IR_high_level++;// 正常
  159.     }
  160.     if(IR_high_level >= 5)  // 至少有5個高電平
  161.     {
  162.         IR_status = 1;      // 正常
  163.     }
  164.     else
  165.     {
  166.         IR_status = 0;      // 短路
  167.     }
  168.    
  169.     TC2_START();            // 38K ON
  170.     Delay_mS(50);           // 延時
  171.    
  172.     if(IR_status)
  173.     {
  174.         if(!FD_SDA_TST)     // IR 接收成功OK
  175.         {
  176.             FD_LED_ON;      // 效果燈亮
  177.             FD_Power_Led(0);// 紅燈滅
  178.             FD_Lock_Led(1); // 綠燈亮
  179.             FD_Background_Led(1);   // 藍燈亮
  180.             FD_Prints(IR_PASS, 1);
  181.         }
  182.         else                // IR 接收失敗NG
  183.         {
  184.             FD_LED_OFF;     // 效果燈滅
  185.             FD_Power_Led(1);// 紅燈亮
  186.             FD_Lock_Led(0); // 綠燈滅
  187.             FD_Background_Led(0);   // 藍燈滅
  188.             FD_Prints(IR_FAIL, 1);
  189.         }
  190.     }
  191.     else                    // IR 對地短路
  192.     {
  193.         FD_LED_OFF;         // 效果燈滅
  194.         FD_Power_Led(1);    // 紅燈亮
  195.         FD_Lock_Led(0);     // 綠燈滅
  196.         FD_Background_Led(0);   // 藍燈滅
  197.         FD_Prints(IR_FAIL, 1);
  198.     }

  199.     TC2_STOP();             // 38K OFF
  200.     LED_IR_OFF;
  201. }


  202. /*----------------------------------------------------------------------------*/
  203. // 設備測試
  204. void Device_Test_ET6226(void)
  205. {
  206.     unsigned char i;
  207.     unsigned char tmp;
  208.     unsigned char device;       // 檢測設備
  209.     unsigned char led_status;   // LED狀態
  210.     unsigned char key_val[4];   // 按鍵數據 顯示用
  211.     unsigned char key;          // 按鍵鍵值 檢測用
  212.    
  213.     LED_Blink(1);               // 設備插入指示
  214.     // ----------------------------------
  215.     // 變量初始化
  216.     {
  217.         for(i = 0; i < 4; i++)
  218.         {
  219.             key_val[i] = 0x00;
  220.         }
  221.         i   = 0;
  222.         key = 0;
  223.         tmp = 0;
  224.         device = NULL;
  225.         led_status = 0;
  226.     }
  227.    
  228.     // ----------------------------------
  229.     // FD650 全亮全滅測試
  230.     device = Device_Check_ET6226(); // 插入設備檢測
  231.     if(device)
  232.     {
  233.         FD_Init();                  // 初始化
  234.         for(i = 0; i < 10; i++)     // 10 * 200mS = 2000mS
  235.         {
  236.             FD_Set_Brightness(5);   // 開啟顯示和鍵盤,8段顯示方式,5級亮度
  237.             FD_Full();              // 數碼管全部置高
  238.             FD_LED_ON;              // 效果燈亮
  239.             Delay_mS(200);          // 全亮
  240.         }
  241.         
  242.         FD_Null();                  // 清顯示
  243.         FD_LED_OFF;                 // 效果燈滅
  244.         Delay_mS(500);              // 全滅
  245.     }
  246.         
  247.     // ----------------------------------
  248.     // FD650 數碼管位測試----
  249.     device = Device_Check_ET6226(); // 插入設備檢測
  250.     if(device)
  251.     {
  252.         for(i = 0; i < 4; i++)      // 共四位
  253.         {
  254.             FD_Printc(i, 0x40, 0);  // 輸出'-'
  255.             Delay_mS(150);
  256.             FD_Printc(i, 0x00, 0);  // 輸出' '
  257.         }
  258.         Delay_mS(150);
  259.     }
  260.    
  261.     // ----------------------------------
  262.     // FD650 數碼管段測試----
  263.     device = Device_Check_ET6226(); // 插入設備檢測
  264.     if(device)
  265.     {
  266.         for(i = 0; i < 7; i++)      // 共七段
  267.         {
  268.             tmp = 0x01 << i;
  269.             FD_Fill(tmp);           // 輸出段碼
  270.             FD_Update();            // 刷新顯示
  271.             Delay_mS(150);
  272.         }
  273.         Delay_mS(150);
  274.         FD_Null();                  // 清顯示
  275.     }

  276.     // ----------------------------------
  277.     // FD650 LED燈測試----
  278.     device = Device_Check_ET6226(); // 插入設備檢測
  279.     if(device)
  280.     {
  281.         // 秒點閃爍
  282.         FD_Set_Led(1, 1);   // 亮
  283.         Delay_mS(200);
  284.         FD_Set_Led(1, 0);   // 滅
  285.         
  286.         // 三個LED燈依次閃爍(綠、紅、藍)
  287.         for(i = 0; i < 4; i++)
  288.         {
  289.             if(i != 1)
  290.             {
  291.                 FD_Set_Led(i, 1);   // 亮
  292.                 Delay_mS(200);
  293.                 FD_Set_Led(i, 0);   // 滅
  294.             }
  295.         }
  296.         
  297.         // 效果燈閃爍
  298.         FD_LED_ON;      // 亮
  299.         Delay_mS(200);
  300.         FD_LED_OFF;     // 滅
  301.     }

  302.     // ----------------------------------
  303.     // FD650 按鍵和IR測試
  304.     do{
  305.         FD_Set_Brightness(5);           // 開啟顯示和鍵盤,8段顯示方式,5級亮度
  306.         tmp = FD_Get_Key();             // 讀取按鍵
  307.         if((tmp < 29) && (tmp > 0))     // 按鍵有效
  308.         {
  309.             if(key != tmp)              // 鍵值不同
  310.             {
  311.                 key = tmp;              // 鍵值同步
  312.                 for(i = 0; i < 4; i++)
  313.                     key_val[i] = tmp;
  314.                 FD_Prints(key_val, 1);  // 顯示鍵值
  315.                
  316.                 led_status ^= 0x01;     // 燈狀態取反
  317.                 FD_Lock_Led(led_status);
  318.                 FD_Power_Led(led_status);
  319.                 FD_Background_Led(led_status);
  320.                 if(led_status)  { FD_LED_ON;  }
  321.                 else            { FD_LED_OFF; }
  322.                
  323.                 if(tmp == 2)            // Power按鍵
  324.                 {
  325.                     Delay_mS(100);      // 顯示鍵值延時
  326.                     IR_Test_ET6226();   // IR接收測試
  327.                 }
  328.             }
  329.         }
  330.         Delay_mS(20);                   // 按鍵掃描延時
  331.         device = Device_Check_ET6226(); // 插入設備檢測
  332.     }while(device);                     // 循環檢測按鍵,直到設備斷開
  333.    
  334.     FD_LED_OFF;                 // 效果燈滅
  335.     LED_Blink(1);               // 設備拔出指示
  336. }


  337. /*----------------------------------------------------------------------------*/
  338. // 設備檢測
  339. // ret: ( 0 ~ 1 ) 0 = no, 1 = yes
  340. unsigned char Device_Check_HT1628(void)
  341. {
  342.     unsigned char i;
  343.     unsigned char key;

  344.     HT_Write_Command(RD_DAT | ADD_AUTO | MODE_NORMAL);  // 讀按鍵操作命令
  345.     NOP(); NOP(); NOP();
  346.     for(i = 0; i < 5; i++)
  347.     {
  348.         key = HT_Read_Data();
  349.         NOP(); NOP();
  350.         if(key) { break; }
  351.     }
  352.     HT_STB_SET;
  353.    
  354.     if(key == 0xFF)
  355.         return (0);
  356.     else
  357.         return (1);
  358. }


  359. /*----------------------------------------------------------------------------*/
  360. // IR接收測試
  361. void IR_Test_HT1628(void)
  362. {
  363.     unsigned char i;
  364.     unsigned char IR_high_level;// IR 采樣高電平個數
  365.     unsigned char IR_status;    // IR 初始狀態
  366.    
  367.     IR_high_level = 0;      // 初始化數據
  368.     HT_DIO_IN;              // DIO設置為輸入
  369.     Delay_mS(10);           // 延時等待電平穩定
  370.    
  371.     for(i = 0; i < 20; i++) // 采樣20個點(20 * 5mS = 100mS)
  372.     {
  373.         Delay_mS(5);        // 延時
  374.         if(HT_DIO_TST)      // 采樣
  375.             IR_high_level++;// 正常
  376.     }
  377.     if(IR_high_level >= 5)  // 至少有5個高電平
  378.     {
  379.         IR_status = 1;      // 正常
  380.     }
  381.     else
  382.     {
  383.         IR_status = 0;      // 短路
  384.     }
  385.    
  386.     TC2_START();            // 38K ON
  387.     Delay_mS(50);           // 延時
  388.    
  389.     if(IR_status)
  390.     {
  391.         if(!HT_DIO_TST)     // IR 接收成功OK
  392.         {
  393.             HT_LED_ON;      // 效果燈亮
  394.             HT_LOCK_ON;     // 信號燈亮
  395.             HT_Prints(IR_PASS, 1);
  396.         }
  397.         else                // IR 接收失敗NG
  398.         {
  399.             HT_LED_OFF;     // 效果燈滅
  400.             HT_LOCK_OFF;    // 信號燈滅
  401.             HT_Prints(IR_FAIL, 1);
  402.         }
  403.     }
  404.     else                    // IR 對地短路
  405.     {
  406.         HT_LED_OFF;         // 效果燈滅
  407.         HT_LOCK_OFF;        // 信號燈滅
  408.         HT_Prints(IR_FAIL, 1);
  409.     }

  410.     TC2_STOP();             // 38K OFF
  411.     LED_IR_OFF;
  412. }


  413. /*----------------------------------------------------------------------------*/
  414. // 設備測試
  415. void Device_Test_HT1628(void)
  416. {
  417.     unsigned char i;
  418.     unsigned char tmp;
  419.     unsigned char device;       // 檢測設備
  420.     unsigned char led_status;   // LED狀態
  421.     unsigned char key_val[4];   // 按鍵數據 顯示用
  422.     unsigned char key;          // 按鍵鍵值 檢測用
  423.    
  424.     LED_Blink(1);               // 設備插入指示
  425.     // ----------------------------------
  426.     // 變量初始化
  427.     {
  428.         for(i = 0; i < 4; i++)
  429.         {
  430.             key_val[i] = 0x00;
  431.         }
  432.         i   = 0;
  433.         key = 0;
  434.         tmp = 0;
  435.         device = NULL;
  436.         led_status = 0;
  437.     }
  438.    
  439.     // ----------------------------------
  440.     // HT1628 全亮全滅測試
  441.     device = Device_Check_HT1628(); // 插入設備檢測
  442.     if(device)
  443.     {
  444.         HT_Init();                  // 初始化
  445.         for(i = 0; i < 10; i++)     // 10 * 200mS = 2000mS
  446.         {
  447.             HT_Write_Command(MODE_N_DIG);   // 顯示模式: 5位12段
  448.             HT_Set_Brightness(3);   // 3級亮度
  449.             HT_Full();              // 數碼管全部置高
  450.             HT_LED_ON;              // 效果燈亮
  451.             HT_LOCK_ON;             // 信號燈亮
  452.             Delay_mS(200);          // 全亮
  453.         }
  454.         
  455.         HT_Null();                  // 清顯示
  456.         HT_LED_OFF;                 // 效果燈滅
  457.         HT_LOCK_OFF;                // 信號燈滅
  458.         Delay_mS(500);              // 全滅
  459.     }
  460.         
  461.     // ----------------------------------
  462.     // HT1628 數碼管位測試----
  463.     device = Device_Check_HT1628(); // 插入設備檢測
  464.     if(device)
  465.     {
  466.         for(i = 0; i < 4; i++)      // 共四位
  467.         {
  468.             HT_Printc(i, 0x40, 0);  // 輸出'-'
  469.             Delay_mS(150);
  470.             HT_Printc(i, 0x00, 0);  // 輸出' '
  471.         }
  472.         Delay_mS(150);
  473.     }
  474.    
  475.     // ----------------------------------
  476.     // HT1628 數碼管段測試----
  477.     device = Device_Check_HT1628(); // 插入設備檢測
  478.     if(device)
  479.     {
  480.         for(i = 0; i < 7; i++)      // 共七段
  481.         {
  482.             tmp = 0x01 << i;
  483.             HT_Fill(tmp);           // 輸出段碼
  484.             HT_Update();            // 刷新顯示
  485.             Delay_mS(150);
  486.         }
  487.         Delay_mS(150);
  488.         HT_Null();                  // 清顯示
  489.     }

  490.     // ----------------------------------
  491.     // HT1628 LED燈測試----
  492.     device = Device_Check_HT1628(); // 插入設備檢測
  493.     if(device)
  494.     {
  495.         HT_Second(1);   // 秒點亮
  496.         Delay_mS(200);
  497.         HT_Second(0);   // 秒點滅
  498.         
  499.         HT_LOCK_ON;     // 信號燈亮
  500.         Delay_mS(200);
  501.         HT_LOCK_OFF;    // 信號燈滅
  502.         
  503.         HT_LED_ON;      // 效果燈亮
  504.         Delay_mS(200);
  505.         HT_LED_OFF;     // 效果燈滅
  506.     }

  507.     // ----------------------------------
  508.     // HT1628 按鍵和IR測試
  509.     do{
  510.         HT_Write_Command(MODE_N_DIG);   // 顯示模式: 5位12段
  511.         HT_Set_Brightness(3);           // 3級亮度
  512.         tmp = HT_Get_Key();             // 讀取按鍵
  513.         if((tmp < 21) && (tmp > 0))     // 按鍵有效
  514.         {
  515.             if(key != tmp)              // 鍵值不同
  516.             {
  517.                 key = tmp;              // 鍵值同步
  518.                 for(i = 0; i < 4; i++)
  519.                     key_val[i] = tmp;
  520.                 HT_Prints(key_val, 1);  // 顯示鍵值
  521.                
  522.                 led_status ^= 0x01;     // 燈狀態取反
  523.                 if(led_status)
  524.                 {
  525.                     HT_LOCK_ON;         // 信號燈亮
  526.                     HT_LED_ON;          // 效果燈亮
  527.                 }
  528.                 else
  529.                 {
  530.                     HT_LOCK_OFF;        // 信號燈滅
  531.                     HT_LED_OFF;         // 效果燈滅
  532.                 }
  533.                
  534.                 if(tmp == 2)            // Power按鍵
  535.                 {
  536.                     Delay_mS(100);      // 顯示鍵值延時
  537.                     IR_Test_HT1628();   // IR接收測試
  538.                 }
  539.             }
  540.         }
  541.         Delay_mS(20);                   // 按鍵掃描延時
  542.         device = Device_Check_HT1628(); // 插入設備檢測
  543.     }while(device);                     // 循環檢測按鍵,直到設備斷開
  544.    
  545.     HT_LED_OFF;                 // 效果燈滅
  546.     HT_LOCK_OFF;                // 信號燈滅
  547.     LED_Blink(1);               // 設備拔出指示
  548. }


  549. /*----------------------------------------------------------------------------*/
  550. // 設備檢測
  551. // ret: ( 0 ~ 1 ) 0 = no, 1 = yes
  552. unsigned char Device_Check_PT6311(void)
  553. {
  554.     unsigned char i;
  555.     unsigned char key;

  556.     PT_Write_Command(RD_DAT | ADD_AUTO | MODE_NORMAL);  // 讀按鍵操作命令
  557.     NOP(); NOP(); NOP();
  558.     for(i = 0; i < 6; i++)
  559.     {
  560.         key = PT_Read_Byte();
  561.         NOP(); NOP();
  562.         if(key) { break; }
  563.     }
  564.     PT_STB_SET;
  565.    
  566.     if(key == 0xFF)
  567.         return (0);
  568.     else
  569.         return (1);
  570. }


  571. /*----------------------------------------------------------------------------*/
  572. // IR接收測試
  573. void IR_Test_PT6311(void)
  574. {
  575.     unsigned char i;
  576.     unsigned char IR_high_level;// IR 采樣高電平個數
  577.     unsigned char IR_status;    // IR 初始狀態
  578.    
  579.     IR_high_level = 0;      // 初始化數據
  580.     Delay_mS(10);           // 延時等待電平穩定
  581.    
  582.     for(i = 0; i < 20; i++) // 采樣20個點(20 * 5mS = 100mS)
  583.     {
  584.         Delay_mS(5);        // 延時
  585.         if(PT_DOUT_TST)     // 采樣
  586.             IR_high_level++;// 正常
  587.     }
  588.     if(IR_high_level >= 5)  // 至少有5個高電平
  589.     {
  590.         IR_status = 1;      // 正常
  591.     }
  592.     else
  593.     {
  594.         IR_status = 0;      // 短路
  595.     }
  596.    
  597.     TC2_START();            // 38K ON
  598.     Delay_mS(50);           // 延時
  599.    
  600.     if(IR_status)
  601.     {
  602.         if(!PT_DOUT_TST)            // IR 接收成功OK
  603.         {
  604.             VFD_Null();             // 清屏
  605.             PT_LED_ON;              // 效果燈亮
  606.             VFD_Power_Led(0);       // 紅燈滅
  607.             VFD_Lock_Led(1);        // 綠燈亮
  608.             VFD_RedBlue_Led(1);     // 藍燈亮
  609.             VFD_Background_Led(1);  // 導光亮
  610.             VFD_Printsf(4, "PASS");
  611.         }
  612.         else                        // IR 接收失敗NG
  613.         {
  614.             VFD_Null();             // 清屏
  615.             PT_LED_OFF;             // 效果燈滅
  616.             VFD_Power_Led(1);       // 紅燈亮
  617.             VFD_Lock_Led(0);        // 綠燈滅
  618.             VFD_RedBlue_Led(0);     // 藍燈滅
  619.             VFD_Background_Led(0);  // 導光滅
  620.             VFD_Printsf(4, "FAIL");
  621.         }
  622.     }
  623.     else                        // IR 對地短路
  624.     {
  625.         VFD_Null();             // 清屏
  626.         PT_LED_OFF;             // 效果燈滅
  627.         VFD_Power_Led(1);       // 紅燈亮
  628.         VFD_Lock_Led(0);        // 綠燈滅
  629.         VFD_RedBlue_Led(0);     // 藍燈滅
  630.         VFD_Background_Led(0);  // 導光滅
  631.         VFD_Printsf(4, "FAIL");
  632.     }

  633.     TC2_STOP();             // 38K OFF
  634.     LED_IR_OFF;
  635. }


  636. /*----------------------------------------------------------------------------*/
  637. // 設備測試 PT6311 13位VFD顯示
  638. void Device_Test_PT6311(void)
  639. {
  640.     unsigned char i;
  641.     unsigned int  tmp;
  642.     unsigned char device;       // 檢測設備
  643.     unsigned char led_status;   // LED狀態
  644.     unsigned char key_val[12];  // 按鍵數據 顯示用
  645.     unsigned char key1, key2;   // 按鍵鍵值 檢測用
  646.    
  647.     LED_Blink(1);               // 設備插入指示
  648.     // ----------------------------------
  649.     // 變量初始化
  650.     {
  651.         for(i = 0; i < 12; i++)
  652.         {
  653.             key_val[i] = 0x00;
  654.         }
  655.         i    = 0;
  656.         tmp  = 0;
  657.         key1 = 0;
  658.         key2 = 0;
  659.         device = NULL;
  660.         led_status = 0;
  661.     }
  662.    
  663.     // ----------------------------------
  664.     // VFD 全亮全滅測試
  665.     device = Device_Check_PT6311(); // 插入設備檢測
  666.     if(device)
  667.     {
  668.         VFD_Init();                 // 初始化
  669.         for(i = 0; i < 10; i++)     // 10 * 200mS = 2000mS
  670.         {
  671.             PT_Write_Command(MODE_13DIG_15SEG); // 13位15段顯示模式
  672.             VFD_Set_Brightness(8);              // 亮度8級
  673.             
  674.             VFD_Full();             // VFD全部亮
  675.             PT_LED_ON;              // 效果燈亮
  676.             VFD_Power_Led(1);       // 紅燈亮
  677.             VFD_Lock_Led(1);        // 綠燈亮
  678.             VFD_RedBlue_Led(1);     // 藍燈亮
  679.             VFD_Background_Led(1);  // 導光亮
  680.             Delay_mS(200);          // 全亮
  681.         }
  682.         
  683.         VFD_Null();                 // 清顯示
  684.         PT_LED_OFF;                 // 效果燈滅
  685.         VFD_Power_Led(0);           // 紅燈滅
  686.         VFD_Lock_Led(0);            // 綠燈滅
  687.         VFD_RedBlue_Led(0);         // 藍燈滅
  688.         VFD_Background_Led(0);      // 導光滅
  689.         Delay_mS(500);              // 全滅
  690.     }
  691.         
  692.     // ----------------------------------
  693.     // VFD 位測試----
  694.     device = Device_Check_PT6311(); // 插入設備檢測
  695.     if(device)
  696.     {
  697.         for(i = 0; i < 13; i++)
  698.         {
  699.             VFD_Show(i, 0xFFFF);
  700.             Delay_mS(150);
  701.             VFD_Show(i, 0x0000);
  702.         }
  703.         Delay_mS(150);
  704.         VFD_Null();                 // 清顯示
  705.         for(i = 0; i < 13; i++)
  706.         {
  707.             VFD_Show(i, 0xFFFF);
  708.             Delay_mS(150);
  709.         }
  710.         Delay_mS(150);
  711.         VFD_Null();                 // 清顯示
  712.     }
  713.    
  714.     // ----------------------------------
  715.     // VFD 段測試----
  716.     device = Device_Check_PT6311(); // 插入設備檢測
  717.     if(device)
  718.     {
  719.         for(i = 0; i < 15; i++)
  720.         {
  721.             tmp = 0x0001 << i;
  722.             VFD_Fill(tmp);          // 輸出段碼
  723.             VFD_Update();           // 刷新顯示
  724.             Delay_mS(150);
  725.         }
  726.         Delay_mS(150);
  727.         VFD_Null();                 // 清顯示
  728.         tmp = 0;
  729.         for(i = 0; i < 15; i++)
  730.         {
  731.             tmp |= 0x0001 << i;
  732.             VFD_Fill(tmp);          // 輸出段碼
  733.             VFD_Update();           // 刷新顯示
  734.             Delay_mS(150);
  735.         }
  736.         Delay_mS(150);
  737.         VFD_Null();                 // 清顯示
  738.     }

  739.     // ----------------------------------
  740.     // VFD LED燈測試----
  741.     device = Device_Check_PT6311(); // 插入設備檢測
  742.     if(device)
  743.     {
  744.         // 四個LED燈依次閃爍(綠、紅、藍、藍)
  745.         for(i = 0; i < 4; i++)
  746.         {
  747.             VFD_Set_LED(i, 1);  // 亮
  748.             Delay_mS(200);
  749.             VFD_Set_LED(i, 0);  // 滅
  750.         }
  751.         
  752.         // 效果燈閃爍
  753.         PT_LED_ON;      // 亮
  754.         Delay_mS(200);
  755.         PT_LED_OFF;     // 滅
  756.     }

  757.     // ----------------------------------
  758.     // VFD 按鍵和IR測試
  759.     do{
  760.         PT_Write_Command(MODE_13DIG_15SEG); // 13位15段顯示模式
  761.         VFD_Set_Brightness(8);              // 亮度8級
  762.         key1 = VFD_Get_Key();               // 讀取按鍵
  763.         if((key1 < 9) && (key1 > 0))        // 按鍵有效
  764.         {
  765.             if(key2 != key1)                // 鍵值不同
  766.             {
  767.                 key2 = key1;                // 鍵值同步
  768.                 for(i = 0; i < 11; i++)
  769.                     key_val[i] = key2 + '0';
  770.                 VFD_Prints(1, key_val);     // 顯示鍵值
  771.                
  772.                 led_status ^= 0x01;         // 燈狀態取反
  773.                 VFD_Power_Led(led_status);
  774.                 VFD_Lock_Led(led_status);
  775.                 VFD_RedBlue_Led(led_status);
  776.                 VFD_Background_Led(led_status);
  777.                 if(led_status)  { PT_LED_ON;  }
  778.                 else            { PT_LED_OFF; }
  779.                
  780.                 if(key2 == 2)               // Power按鍵
  781.                 {
  782.                     Delay_mS(100);          // 顯示鍵值延時
  783.                     IR_Test_PT6311();       // IR接收測試
  784.                 }
  785.             }
  786.         }
  787.         Delay_mS(20);                   // 按鍵掃描延時
  788.         device = Device_Check_PT6311(); // 插入設備檢測
  789.     }while(device);                     // 循環檢測按鍵,直到設備斷開
  790.    
  791.     PT_LED_OFF;                 // 效果燈滅
  792.     LED_Blink(1);               // 設備拔出指示
  793. }
復制代碼

所有資料51hei提供下載:
Test_6226_1628_6311.zip (60.82 KB, 下載次數: 49)


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

使用道具 舉報

沙發
ID:72088 發表于 2025-3-29 20:30 | 只看該作者
我找不到匯編語言,下載看看也不懂,PT6311控制LED沒成功,LED端口有控制燈絲和負壓的啟動引腳,啊啊啊
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久一级 | 午夜欧美 | 欧美精品在线免费观看 | 精品视频亚洲 | 在线观看亚 | 日本又色又爽又黄又高潮 | 观看av | 国产精品久久久久久一区二区三区 | 精品久久99 | 午夜精品久久久久久久久久久久久 | 日韩在线观看中文字幕 | 国产黄色精品在线观看 | 特级毛片www| 欧美亚洲国产日韩 | 免费视频一区二区 | 国产一区二区精品在线观看 | 国产一级淫片a直接免费看 免费a网站 | 国产精品久久久久久久久久久久久 | 视频第一区 | 日韩午夜在线观看 | 亚洲精品视 | 国产一级特黄真人毛片 | www.中文字幕.com | 全部免费毛片在线播放网站 | 懂色中文一区二区三区在线视频 | 国产欧美精品在线 | 国产露脸对白88av | 国产综合久久 | 日本一区二区三区在线观看 | 99久久久国产精品免费消防器 | 日韩欧美手机在线 | 午夜电影日韩 | 久久久久久免费精品一区二区三区 | 精品国产区| 在线视频国产一区 | 日韩精品一区二区三区在线播放 | 亚洲视频在线观看 | 成人蜜桃av | 91九色porny首页最多播放 | 91国内精品| 欧美一区二区三区国产 |