找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2847|回复: 1
打印 上一主题 下一主题
收起左侧

HC32L136额温枪方案包括BOM,SCH.PCB.源码

[复制链接]
跳转到指定楼层
楼主
Altium Designer画的额温枪原理图和PCB图如下:(51hei附件中可下载工程文件)


单片机源程序如下:
  1. /******************************************************************************/
  2. /** \file main.c
  3. **
  4. ** A detailed description is available at
  5. ** @link Sample Group Some description @endlink
  6. **
  7. **   - 2017-05-28 LiuHL    First Version
  8. **
  9. ******************************************************************************/

  10. /******************************************************************************
  11. * Include files
  12. ******************************************************************************/
  13. #include "adc.h"
  14. #include "gpio.h"
  15. #include "bgr.h"
  16. #include "lcd.h"
  17. #include "lvd.h"
  18. #include "app_lcd.h"
  19. #include "app_gpio.h"
  20. #include "app_adc.h"
  21. #include "app.h"

  22. /******************************************************************************
  23. * Local pre-processor symbols/macros ('#define')                           
  24. ******************************************************************************/
  25. #define USERKEYTRUE     (0xFFFFFFFFu)
  26. #define USERKEYFALSE    (0x00000000u)

  27. #define LCDCHAR__       (0xFFFFu)

  28. #define CHARGEEMPTY     (0x00000000u)
  29. #define CHARGEFULL      (0xFFFFFFFFu)

  30. /******************************************************************************
  31. * Global variable definitions (declared in header file with 'extern')
  32. ******************************************************************************/
  33. volatile uint32_t gu32AdcRestult = 0;
  34. volatile uint32_t gu32UserKeyFlag[4] = {USERKEYFALSE, USERKEYFALSE, USERKEYFALSE, USERKEYFALSE};
  35. volatile stc_lcd_display_cfg_t gstcLcdDisplayCfg = {0};
  36. volatile uint32_t gVolFlag = CHARGEFULL;

  37. /******************************************************************************
  38. * Local type definitions ('typedef')                                         
  39. ******************************************************************************/
  40. typedef enum enMState
  41. {
  42.     InitialMode     = 0u,
  43.     TempMeasureMode = 1u,
  44.     TempShowMode    = 2u,
  45.     PowerOffMode    = 3u,
  46.     MemoryMode      = 4u,
  47.    
  48. }enMState_t;
  49. /******************************************************************************
  50. * Local function prototypes ('static')
  51. ******************************************************************************/

  52. /******************************************************************************
  53. * Local variable definitions ('static')                                      *
  54. ******************************************************************************/
  55. /*****************************************************************************
  56. * Function implementation - global ('extern') and local ('static')
  57. ******************************************************************************/


  58. /**
  59. ******************************************************************************
  60. ** \brief  Main function of project
  61. **
  62. ** \return uint32_t return value, if needed
  63. **
  64. ** This sample
  65. **
  66. ******************************************************************************/
  67. int32_t main(void)
  68. {   
  69.     volatile enMState_t enMState = InitialMode;
  70.     uint32_t u32AdcResultTmp, u32NtcIndex;
  71.    
  72.     ///< GPIO 初始化
  73.     AppMGpioInit();
  74.    
  75.     ///< ADC 模块初始化
  76.     AppMAdcInit();
  77.    
  78.     ///< LCD 模块初始化
  79.     AppLcdInit();
  80.    
  81.     ///< 电量监测模块初始化
  82.     AppVolMonitorInit();
  83.    
  84.    
  85.     // 初次上电开机LCD全屏显示闪烁两次
  86.     {
  87.         AppLcdShowAll();
  88.         delay1ms(400);
  89.         AppLcdClearAll();
  90.         delay1ms(400);
  91.         AppLcdShowAll();
  92.         delay1ms(400);
  93.         AppLcdClearAll();
  94.         delay1ms(400);
  95.         AppLcdShowAll();
  96.     }
  97.    
  98.     while(1)
  99.     {   
  100.         switch(enMState)
  101.         {
  102.             case InitialMode:
  103.             {
  104.                 // LCD 初始状态显示
  105.                 gstcLcdDisplayCfg.bM6En     = FALSE;
  106.                 gstcLcdDisplayCfg.bM5En     = TRUE;
  107.                 gstcLcdDisplayCfg.bM2En     = FALSE;
  108.                 gstcLcdDisplayCfg.bM7En     = TRUE;
  109.                 gstcLcdDisplayCfg.bM8En     = TRUE;
  110.                 gstcLcdDisplayCfg.bM9En     = FALSE;
  111.                 gstcLcdDisplayCfg.bM10En    = FALSE;
  112.                 gstcLcdDisplayCfg.bM11En    = TRUE;
  113.                 gstcLcdDisplayCfg.bM3En     = FALSE;
  114.                 gstcLcdDisplayCfg.enTmpMode = Char__;
  115.                 gstcLcdDisplayCfg.u16Num    = LCDCHAR__;
  116.             }
  117.             
  118.             {
  119.                 if(USERKEYTRUE == gu32UserKeyFlag[2])
  120.                 {
  121.                     //……
  122.                     //(进入温度测量)
  123.                     gu32UserKeyFlag[0] = USERKEYFALSE;
  124.                     gu32UserKeyFlag[1] = USERKEYFALSE;
  125.                     gu32UserKeyFlag[2] = USERKEYFALSE;
  126.                     gu32UserKeyFlag[3] = USERKEYFALSE;
  127.                     
  128.                 }
  129.                 else if (USERKEYTRUE == gu32UserKeyFlag[2])
  130.                 {
  131.                     //……
  132.                     gu32UserKeyFlag[0] = USERKEYFALSE;
  133.                     gu32UserKeyFlag[1] = USERKEYFALSE;
  134.                     gu32UserKeyFlag[2] = USERKEYFALSE;
  135.                     gu32UserKeyFlag[3] = USERKEYFALSE;
  136.                     
  137.                     enMState = TempMeasureMode;
  138.                 }
  139.             }   
  140.                
  141.                 // ……
  142.             break;
  143.             
  144.             case TempMeasureMode:
  145.                 // ……
  146.             break;
  147.                
  148.             case TempShowMode:
  149.                 // ……
  150.             break;
  151.             
  152.             case PowerOffMode:
  153.                 // ……
  154.             break;
  155.             
  156.             case MemoryMode:
  157.                 // ……
  158.             break;
  159.             
  160.             default:
  161.                 // ……
  162.             break;
  163.                
  164.         }
  165.         
  166.         ///< 温度采集及数据处理
  167.         if(USERKEYTRUE == gu32UserKeyFlag[3])
  168.         {
  169.             gu32UserKeyFlag[3] = USERKEYFALSE;
  170.             
  171.             AppAdcNtcAvgCodeGet(&u32AdcResultTmp);
  172.             u32NtcIndex = App_TempNtcFind(u32AdcResultTmp);
  173.             AppLcdStkLcdShow((u32NtcIndex + 10)*10);
  174.             delay1ms(1000);
  175.             
  176.             
  177.             AppAdcVirAvgCodeGet(&u32AdcResultTmp);
  178.             AppLcdStkLcdShow(App_TempVirFind(u32NtcIndex, u32AdcResultTmp));
  179.             delay1ms(3000);
  180.             

  181.         }
  182.         
  183.         ///< LCD显示更新
  184.         {
  185.             //AppLcdDisplayUpdate((stc_lcd_display_cfg_t*)(&gstcLcdDisplayCfg));
  186.         }
  187.     }
  188. }   




  189. ///< LVD 中断服务函数
  190. void Lvd_IRQHandler(void)
  191. {
  192.     Lvd_ClearIrq();

  193.     // 电量显示更新标识
  194.     gVolFlag = CHARGEEMPTY;
  195.    
  196. }


  197. ///< GPIO 中断服务程序 ———— 测温及选择功能键
  198. void PortC_IRQHandler(void)
  199. {
  200.     delay1ms(20);
  201.     if (TRUE == Gpio_GetIrqStatus(M_KEY_USER0_PORT, M_KEY_USER0_PIN))
  202.     {
  203.         Gpio_ClearIrq(M_KEY_USER0_PORT, M_KEY_USER0_PIN);
  204.         if(FALSE == Gpio_GetInputIO(M_KEY_USER0_PORT, M_KEY_USER0_PIN))
  205.         {
  206.             //标定按键按下
  207.             //……
  208.         }
  209.         return;
  210.     }
  211.    
  212.     if (TRUE == Gpio_GetIrqStatus(M_KEY_USER1_PORT, M_KEY_USER1_PIN))
  213.     {
  214.         Gpio_ClearIrq(M_KEY_USER1_PORT, M_KEY_USER1_PIN);
  215.         if(FALSE == Gpio_GetInputIO(M_KEY_USER1_PORT, M_KEY_USER1_PIN))
  216.         {
  217.             //标定按键按下
  218.             //……
  219.         }
  220.         return;
  221.     }
  222.    
  223.     if (TRUE == Gpio_GetIrqStatus(M_KEY_USER2_PORT, M_KEY_USER2_PIN))
  224.     {
  225.         Gpio_ClearIrq(M_KEY_USER2_PORT, M_KEY_USER2_PIN);
  226.         if(FALSE == Gpio_GetInputIO(M_KEY_USER2_PORT, M_KEY_USER2_PIN))
  227.         {
  228.             //标定按键按下
  229.             //……
  230.         }
  231.         return;
  232.     }
  233. }

  234. ///< GPIO 中断服务程序 ———— 模式功能键
  235. void PortD_IRQHandler(void)
  236. {
  237.     delay1ms(100);
  238.     if (TRUE == Gpio_GetIrqStatus(M_KEY_USER3_PORT, M_KEY_USER3_PIN))
  239.     {
  240.         Gpio_ClearIrq(M_KEY_USER3_PORT, M_KEY_USER3_PIN);
  241.         if(FALSE == Gpio_GetInputIO(M_KEY_USER3_PORT, M_KEY_USER3_PIN))
  242.         {
  243.             //标定按键按下
  244.             gu32UserKeyFlag[3] = USERKEYTRUE;
  245.             //……
  246.         }
  247.         return;
  248.     }
  249. }


  250. /******************************************************************************
  251. * EOF (not truncated)
  252. ******************************************************************************/
复制代码

所有资料51hei提供下载:
HC32L136额温枪方案.zip (7.54 MB, 下载次数: 82)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:462629 发表于 2021-3-12 10:10 | 只看该作者
这个可以生产的吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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