单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 438|回复: 0
收起左侧

PT6311 HT1628的avr单片机详细例程

[复制链接]
zuozuo1024 发表于 2019-5-27 13:32 | 显示全部楼层 |阅读模式
PT6311 HT1628的详细例程,连续地址读写,按键扫描,LED显示都有详细的例程包。欢迎交流,例程都经过了验证是OK的。
0.png
单片机源程序如下:
  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, 下载次数: 13)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|单片机论坛 |51黑电子论坛技术交流 QQ 管理员QQ:125739409;技术交流QQ群636986012

Powered by 单片机教程网

快速回复 返回顶部 返回列表