亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 604|回復: 3
收起左側

新手學習王志浩T12烙鐵程序之心得

[復制鏈接]
ID:60178 發表于 2026-4-16 09:45 | 顯示全部樓層 |閱讀模式
新手抱著試試看,閱讀了王志浩板本的T12烙鐵程序,去看了MAIN函數,發現只有開關機和主界面程序,按鍵程序調用,沒有PWM加熱,ADC,顯示,PID等程序,百思不得其解,后來發現中斷好像有,問了豆包,牽出來關于程序結構問題,原來單片機是主程序和中斷程序分2路同時運行的,其它程序在中斷程序里執行的,以定時中斷時間1MS為基準,再用變量計數10MS、20MS,50MS等分別判斷執法其它程序,是可以沒有MAIN,或不在MAIN也能單獨運行,又了解了程序結構的時間片輪詢,狀態機結構等。比方每隔20MS重復一次,結構為定時器每中斷1MS,變量++,間隔變量=當前變量一一前次變量。IF間隔時間如果=10MS,就執行,ADC,然后把前次變量=當前變量,然后其它按此方法,間隔20MS,50MS時間間隔分別執行PWM加熱開關,PID算法,濾波等程序。后來發現疑問這個變量沒有清零,是不是有問題呢,又問豆包,它說溢出后計數為5,5-65535=11,不改間隔時間,暫時學到這。

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:232366 發表于 2026-4-16 18:41 | 顯示全部樓層
這個T12的程序可謂是天花板我也研究一段時間收獲也不少
回復

使用道具 舉報

ID:60178 發表于 2026-4-19 08:55 | 顯示全部樓層
學習T12烙鐵程序之心得2

/*********************************************************************************
* COPYRIGHT NOTICE
*
* 文件名                :        config.h
* 描述                 :        系統配置
*
* 版本                        :        V3.3.4
* 作者                        :        王志浩
* 日期                        :        2017-10-22
* 軟件著作權登記編號2018R11L423999
* 未經著作權所有人書面授權,任何單位和個人不得將以下程序用于商業盈利用途!
* 修改此程序請保留上述版權聲明,引用程序請注明出處!
**********************************************************************************/
#ifndef                __CONFIG_H
#define                __CONFIG_H


/************************定義系統時鐘*****************************/
#define MAIN_Fosc                24000000L        //定義主時鐘
#define Main_Fosc_KHZ        (MAIN_Fosc / 1000)

/****************************用戶可調設置****************************/
//如果需要開機LOGO,請定義DRAW_LOGO;不需要LOGO可把該定義注釋
//#define DRAW_LOGO
//如果需要在調整溫度時大字顯示設定的溫度,請定義SET_TEMP;如果需要大字持續顯示實際溫度可把該定義注釋
#define SET_TEMP
//此處選擇使用的控制板版本,支持智盟1.0/智盟1.1/小張設計(ZM1_0),
//智盟1.2(ZM1_2),雪駒舊版(XJ_OLD),雪駒新版(XJ_NEW),五筆LCD版(WB_LCD)
#define ZM1_2
//屏幕選擇(0.96寸OLED(SSD1306)選擇0;1.3寸OLED(SSH1106)選擇1;LCD選擇2)
#define SCREEN                        1
/****************************IO設置****************************/
//版本號
#define VERSION_DIS                ("V3.3.4")


#if        SCREEN == 1
        #define DIS_ERR 2
#else
        #define DIS_ERR 0
#endif
//以下是三個自定義按鍵
#define KEY_A                         (P25)
#define KEY_B                         (P26)
#define KEY_C                         (P27)

//單片機切斷220V電源輸出IO
#define SHUTDOWN                (P33)

#ifdef WB_LCD
//蜂鳴器
        #define        BEEP                                 (P13)
        #define BEEP_ON                        (P13 = 1)
        #define BEEP_OFF                (P13 = 0)
        //LCD背光
        #define        LED                                 (P10)
        #define LED_ON                        (P10 = 1)
        #define LED_OFF                  (P10 = 0)

        //編碼器
        #define        EC11_A                        (P31)
        #define        EC11_B                        (P30)
        #define        EC11_KEY                (P15)

        //PWM
        #define IRON                                (P23)
        //水銀開關
        #define SLEEP                                (P20)
        #define PWM_EN                        (P00)

        //ADC設置
        #define ADC_VCC                                1u
        #define ADC_IRON                        4u
        #define ADC_ROOMTEMP        6u
#endif

#ifdef ZM1_0
        //蜂鳴器
        #define        BEEP                                 (P03)
        #define BEEP_ON                        (P03 = 1)
        #define BEEP_OFF                (P03 = 0)
        //LCD背光
        #define        LED                                 (P11)
        #define LED_ON                        (P11 = 1)
        #define LED_OFF                  (P11 = 0)
        //編碼器
        #define        EC11_A                        (P32)
        #define        EC11_B                        (P31)
        #define        EC11_KEY                (P30)
        //PWM
        #define IRON                                (P10)
        //水銀開關
        #define SLEEP                                (P01)
        #define PWM_EN                        (P00)
      
        //ADC設置
        #define ADC_VCC                                3u
        #define ADC_IRON                        5u
        #define ADC_ROOMTEMP        7u
#endif

#ifdef ZM1_2
        //蜂鳴器
        #define        BEEP                                 (P33)
        #define BEEP_ON                        (P33 = 1)
        #define BEEP_OFF                (P33 = 0)
        //LCD背光
        #define        LED                                 (P11)
        #define LED_ON                        (P11 = 1)
        #define LED_OFF                  (P11 = 0)
        //編碼器
        #define        EC11_A                        (P32)
        #define        EC11_B                        (P31)
        #define        EC11_KEY                (P30)
        //PWM
        #define IRON                                (P10)
        //水銀開關
        #define SLEEP                                (P01)
        #define PWM_EN                        (P00)
      
        //ADC設置
        #define ADC_VCC                                3u
        #define ADC_IRON                        5u
        #define ADC_ROOMTEMP        7u
#endif

#ifdef XJ_OLD
        //蜂鳴器
        #define        BEEP                                 (P03)
        #define BEEP_ON                        (P03 = 0)
        #define BEEP_OFF                (P03 = 1)
        //LCD背光
        #define        LED                                 (P00)
        #define LED_ON                        (P00 = 1)
        #define LED_OFF                  (P00 = 0)
        //編碼器
        #define        EC11_A                        (P32)
        #define        EC11_B                        (P31)
        #define        EC11_KEY                (P30)
        //PWM
        #define IRON                                (P10)
        //水銀開關
        #define SLEEP                                (P01)
        #define PWM_EN                        (P11)
      
        //ADC設置
        #define ADC_VCC                                3u
        #define ADC_IRON                        5u
        #define ADC_ROOMTEMP        7u
#endif
#ifdef XJ_NEW
        //蜂鳴器
        #define        BEEP                                 (P03)
        #define BEEP_ON                        (P03 = 0)
        #define BEEP_OFF                (P03 = 1)
        //LCD背光
        #define        LED                                 (P00)
        #define LED_ON                        (P00 = 1)
        #define LED_OFF                  (P00 = 0)
        //編碼器
        #define        EC11_A                        (P32)
        #define        EC11_B                        (P31)
        #define        EC11_KEY                (P30)
        //PWM
        #define IRON                                (P10)
        //水銀開關
        #define SLEEP                                (P01)
        #define PWM_EN                        (P11)
      
        //ADC設置
        #define ADC_VCC                                3u
        #define ADC_IRON                        5u
        #define ADC_ROOMTEMP        7u
#endif
/***************************包含庫函數***************************/
#include        "STC15Fxxxx.H"
#include         "stdio.h"
#include  "math.h"
#include  "LQ12864.h"
#include        "img.h"
//#include  "DataScope_DP.h"

/***************************包含用戶函數***************************/
#include "Sys_Init.h"
#include "Sys_Basic.h"
#include "Sys_Monitor.h"
#include "Sys_IO.h"
#include "Sys_Sample.h"
#include "Sys_Control.h"
#include "Sys_Para.h"
#include "user_menu.h"

#endif

改上面紅的代碼綠色為對應的代碼,選擇性編譯,配不同屏和不同版本硬件程序,可以編譯成三種程序,一個程序可配多種硬件
管理
回復

使用道具 舉報

ID:60178 發表于 2026-4-21 16:41 | 顯示全部樓層
Sys_Sample.c 逐行超詳細解釋(51 單片機 / 嵌入式 采樣程序)
我給你逐行、逐句、逐函數徹底講透,你是新手也能完全看懂。
這份代碼是電烙鐵溫控的采樣核心:采集電源電壓、室溫、烙鐵溫度,帶濾波 + 查表。
0. 文件開頭(版權 / 版本)
c
運行
/*********************************************************************************
* COPYRIGHT NOTICE
* Copyright (c) 2017-2018, XinJiang University. All right reserved
*
* 文件名                :        Sys_Sample.c
* 描述                 :        系統采樣
*
* 版本                        :        V3.3.4
* 作者                        :        王志浩
* 日期                        :        2017-10-22
**********************************************************************************/
解釋:
這是注釋,不參與程序運行。
作用:記錄文件用途、作者、版權、版本。
1. 頭文件 + 全局變量
c
運行
#include "config.h"
解釋:
引入配置文件,里面定義了 u8 u16 ADC通道 PWM 等。
c
運行
float RoomTemp = 25.0f;
解釋:
全局浮點變量,存儲當前室溫,默認 25℃。
c
運行
float VCCVoltage = 0.0f;
解釋:
全局浮點變量,存儲電源電壓(24V)。
2. 中值濾波函數(采樣降噪)
c
運行
static u16 mid_filter(void)
解釋:
靜態函數,只能本文件用。
功能:多次采樣求平均,過濾噪聲。
c
運行
{
        u16        sum = 0;
解釋:定義 16 位變量,用來累加采樣值。
c
運行
        u8 temp;
解釋:循環用的 8 位變量。
c
運行
        for(temp = 0; temp < NUM; temp++)
        {
                sum += Get_ADC10bitResult(ADC_IRON);
        }
解釋:
循環采樣 NUM 次 烙鐵溫度 ADC 值,全部累加到 sum。
c
運行
        return(sum >> DIV);
}
解釋:
sum >> DIV = 右移 DIV 位 = 除以 2^DIV
用移位代替除法,單片機運行更快。
3. 讀取 24V 電源電壓
c
運行
float GetVoltage(void)
{
        return (float)Get_ADC10bitResult(ADC_VCC) / 5550.0f * (float)FAC_DATA_Table.Adjust_s.Voltage;
}
解釋:
讀取電源電壓通道 ADC 值
除以 5550 歸一化
乘以校準系數,得到真實 24V 電壓值
返回浮點型電壓
4. NTC 室溫對照表(-10℃ ~ 50℃)
c
運行
unsigned int code NTCTAB[61] =
{
        324,318,...55   //共61個值
};
解釋:
code = 存在單片機ROM(程序區),不占 RAM。
數組含義:
下標 0 → -10℃
下標 1 → -9℃
...
下標 60 → 50℃
數值是 NTC 熱敏電阻對應的 ADC 值。
5. 讀取室溫(二分法查表)
c
運行
float GetRoomTemp(void)
{
        u16 temp=0;
        unsigned char det = 60,head = 0,tail = 60,mid = 0;
解釋:
head:表開頭(-10℃)
tail:表結尾(50℃)
mid:中間值
det:差值
c
運行
        temp = Get_ADC10bitResult(ADC_ROOMTEMP);
解釋:讀取室溫 NTC 的 ADC 值。
c
運行
        if(temp >= NTCTAB[head])
        {
                return -10.0f;
        }
解釋:
ADC 值比 -10℃ 還大 → 溫度 ≤ -10℃
c
運行
        else if(temp <= NTCTAB[tail])
        {
                return 50.0f;
        }
解釋:
ADC 值比 50℃ 還小 → 溫度 ≥ 50℃
c
運行
        else
        {
                while(det > 1)
                {
                        mid = (head + tail)/2;

                        if(temp > (NTCTAB[mid]))
                        {
                                tail = mid;
                        }
                        else
                        {
                                head = mid;
                        }
                        det = tail - head;
                }
解釋:
二分法快速查表,找到當前 ADC 值對應的溫度下標。
c
運行
                return ((float)(head-10)  / 100.0f * (float)FAC_DATA_Table.Adjust_s.Temp);
        }
}
解釋:
head 是溫度下標
head -10 就是真實溫度(0→-10℃,10→0℃,60→50℃)
做精度校準
返回室溫浮點值
6. 讀取烙鐵溫度(核心溫控函數)
c
運行
float GetIronTemp(unsigned char num)
解釋:
輸入:烙鐵頭編號(1-4)
輸出:烙鐵溫度(float)
c
運行
{
        u16 temp=0;
        unsigned char det = 6,head = 0,tail = 6,mid = 0,i=0;
解釋:二分法查表變量。
c
運行
        PWM.Run = Disable;
        IRON = 0;
解釋:
關 PWM 加熱 → 關烙鐵
防止加熱時干擾 ADC 采樣,必須先斷電再采溫度。
c
運行
        temp = mid_filter();
解釋:調用濾波函數,采平均 ADC 值。
c
運行
        if(temp < FAC_DATA_Table.Heater_Tip[num-1][tail])
        {
                while(det > 1)
                {
                        mid = (head + tail) / 2;

                        if(temp < (FAC_DATA_Table.Heater_Tip[num-1][mid]))
                        {
                                tail = mid;
                        }
                        else
                        {
                                head = mid;
                        }
                        det = tail - head;
                }
解釋:
同樣二分法查表,找到烙鐵溫度對應的區間。
c
運行
                return RoomTemp + 100 * head  + ((temp - ...) * 100 / (...));
        }
解釋:
線性插值計算精準溫度
公式 = 室溫 + 100℃檔位 + 插值小數溫度
最終得到真實烙鐵溫度。
c
運行
        else
        {
                return 599.0f;
        }
}
解釋:
超出溫度表范圍 → 直接返回 599℃(最高溫)
整份代碼一句話總結
這是電烙鐵控制器的采樣核心:
采 24V 電壓
采室溫(NTC + 二分查表)
采烙鐵溫度(關加熱→濾波→二分查表→插值算精準溫度)
全部給溫控邏輯使用
你最需要記住的 4 個關鍵點
mid_filter() = 多次采樣求平均,降噪
NTCTAB[] = 室溫 ADC 對照表
二分法 = 快速查表,不浪費 CPU
讀烙鐵溫度前必須 關加熱(IRON=0),否則采樣不準
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表