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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7368|回復(fù): 17
打印 上一主題 下一主題
收起左側(cè)

STC15W408AS單片機九檔點焊機程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:993738 發(fā)表于 2023-2-26 23:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
新人貼,如果有什么錯誤歡迎留言斧正
這是電路原理圖:

下邊是單片機程序,
  1. /*----------------- ------------------------------
  2. 基于 STC15W408AS 點焊機控制程序
  3. 參考來源 STC89C52
  4. 20230204
  5. 由兩個按鍵控制時間加減,一個按鍵控制開始
  6. 兩次脈沖
  7. 根據(jù)需要可選進入掉電模式或空閑模式
  8. 15W408AS
  9. 仿真時請選用STC15W4K32S4,更改頻率為12Mhz
  10. STC15W408AS頻率12Mhz
  11.         
  12. ------------------------------------------------*/
  13. #include <STC15F2K60S2.H>//頭文件定義 STC15W408AS專用//STC15W4K32S4通用

  14. #include <intrins.h>

  15. /*位清零:&        //位設(shè)置:|
  16. 設(shè)置、讀取位的方法
  17. '位與
  18. '第7位'01111111'7F
  19. '第6位'10111111'BF
  20. '第5位'11011111'DF
  21. '第4位'11101111'EF
  22. '第3位'11110111'F7
  23. '第2位'11111011'FB
  24. '第1位'11111101'FD
  25. '第0位'11111110'FE*///位于運算判斷結(jié)果值是否是255,是255則是1,否則改位是0
  26. #define GET_BIT(x, bit) ((x & (1 << bit)) >> bit)   /* 獲取第bit位 *///取0-7位的bit數(shù)據(jù)//詳解:與運算同為1得1,位與后位移相當于刪去目標bit兩邊的數(shù)據(jù)位

  27. #define D P1   //數(shù)碼管段用D代替//把P1引腳段改個名字//引腳P1.0-1.7,引腳不足:P1.0-P1.5
  28. sbit D2=P3^7;//數(shù)碼管G//16腳單片機段引腳不足7位,附加一個引腳P3.7

  29. sbit s1=P3^2;//定義加按鍵//按鍵默認電平 低電平//引腳P3.2
  30. sbit s2=P3^3;//定義減按鍵//按鍵默認電平 低電平//引腳不足未設(shè)置

  31. sbit s3=P3^6;//定義點焊開始//按鍵默認電平 低電平//檢測引腳P3.6

  32. sbit m=P5^4;//定義點焊脈沖輸出//默認電平為 低電平//實際引腳P5.4//仿真引腳P3.4

  33. sbit q1=P5^5;//定義蜂鳴器//蜂鳴器默認電平為 高電平//引腳P3.3

  34. unsigned int a;//定義全局變量毫秒延時計數(shù)//延時范圍更改為0-F對應(yīng)0-15毫秒
  35. //unsigned int ma;//記憶a

  36. unsigned char LED_code[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值//數(shù)碼管真值表//
  37. //當引腳段不足7個引腳時,另定義引腳,取某一位(GET_BIT)的值賦予之,取位是6

  38. void DelayMs(unsigned int t);//毫秒延時
  39. //void Delay1us12(unsigned int ui);//12Mhz,1微秒延時
  40. //void Delay1us35(unsigned int ti);//35Mhz,1微秒延時

  41. //void Timer0us(unsigned int ut);//35Mhz定時器微秒延時
  42. void anjian();//按鍵處理程序
  43. void maichong();//脈沖處理程序

  44. //定時器1的中斷程序過程//65毫秒設(shè)定,用于數(shù)碼管刷新
  45. void Timer1_Isr(void) interrupt 3
  46. {
  47.         TL1 = 0x18;                                //設(shè)置定時初始值
  48.         TH1 = 0xFC;                                //設(shè)置定時初始值
  49.         D=LED_code[a];//數(shù)碼管顯示數(shù)字
  50.         D2=GET_BIT(LED_code[a],6);//取第7位數(shù)據(jù)值作為7段數(shù)碼管的G控制
  51. }

  52. /*------------------------------------------------
  53.                     主函數(shù)
  54. ------------------------------------------------*/
  55. void main (void)
  56. {        
  57.         //初始定時器
  58.         EA=1;//中斷總開關(guān),默認是0?
  59.         //AUXR=0x1B;//默認值(復(fù)位值)//默認T0、T1時鐘12分頻,T2是計數(shù)不分頻,串口6分頻
  60.         TMOD=0x11;//啟用定時器1,定時器0
  61.         //65毫秒@12.000MHz//中斷
  62.         TL1 = 0x18;                                //設(shè)置定時初始值
  63.         TH1 = 0xFC;                                //設(shè)置定時初始值
  64.         TF1 = 0;                                //清除TF1標志
  65.         TR1 = 1;                                //定時器1開始計時
  66.         ET1 = 1;                                //使能定時器1中斷

  67.         //1毫秒@12MHz不中斷
  68.         TL0 = 0x18;                                //設(shè)置定時初始值
  69.         TH0 = 0xFC;                                //設(shè)置定時初始值
  70.         TF0 = 0;//清除TF0溢出標志
  71.         TR0 = 1;//定時器0開始計時

  72.         D=0;
  73.         D2=0;//數(shù)碼管電平重置

  74.         a=0;//程序開始時0//保護擋位

  75.         m=1;//脈沖初始為高電平,脈沖關(guān)閉
  76.         q1=1;//蜂鳴器默認高電平關(guān)閉

  77.         q1=0;//蜂鳴器打開//用于開機提示
  78.         DelayMs(60);
  79.         q1=1;//蜂鳴器關(guān)閉
  80.         DelayMs(50);
  81.         q1=0;//蜂鳴器打開//用于開機提示
  82.         DelayMs(60);
  83.         q1=1;//蜂鳴器關(guān)閉
  84.         DelayMs(40);
  85.         q1=0;//蜂鳴器打開//用于開機提示
  86.         DelayMs(60);
  87.         q1=1;//蜂鳴器關(guān)閉

  88.         //前置程序完成
  89.         while (1)        //主循環(huán)
  90.         {
  91.                 //D=LED_code[a];//數(shù)碼管顯示數(shù)字
  92.                 //D2=GET_BIT(LED_code[a],6);//取第7位數(shù)據(jù)值作為7段數(shù)碼管的G控制
  93.                 anjian( );//按鍵判斷
  94.                 if(a!=0)//0擋位不作輸出
  95.                         maichong( );//脈沖檢測
  96.          }

  97. }

  98. void anjian( )//按鍵函數(shù)//原代碼是中斷式執(zhí)行模式,即按下后陷入循環(huán)體,釋放后再執(zhí)行功能代碼
  99. {  
  100.          if(s1==0)//時間加按鍵
  101.     {
  102.                  if(s1==0)
  103.                 {
  104.                         a++;//a,a=a+1         
  105.                         if(a>9)//達到10時改為1//a 時間毫秒變量,最大值 9//更改范圍為0-9
  106.                                 a=0;//越界則固定一個值 1
  107.                         //ma=a;
  108.                         while(!s1);//等待按鍵釋放 ,S1==0則!S1==true//按鍵按下時循環(huán),松開后向下執(zhí)行        
  109.                 }                 
  110.         }
  111.         if(s2==0)//時間減按鍵
  112.     {
  113.                  if(s2==0)
  114.                 {
  115.                         if(a==0)
  116.                                 a=9;//注意變量a的類型和范圍,不能為0,long int范圍0-65535
  117.                         else
  118.                                 a--;//a,a=a-1//范圍為0-9
  119.                         //ma=a;
  120.                         while(!s2);//等待按鍵釋放         
  121.                 }
  122.         }
  123. }

  124. /*毫秒延時是循環(huán)體執(zhí)行,類似于中斷,中斷期間無法執(zhí)行和判斷按鍵按下,
  125. 可能導(dǎo)致的情況:點焊時誤觸點焊筆立即拿開,但此時已經(jīng)進入了延時階段,
  126. 如果在延時結(jié)束時恰好放下點焊筆,此時會導(dǎo)致下次的按鍵判斷為點焊確認狀態(tài),則會開始執(zhí)行脈沖輸出(焊接)功能代碼。
  127. 這種情況下沒什么影響。
  128. 情況二:第一次誤觸,第二次又誤觸的情況下,會導(dǎo)致誤焊。
  129. 解決方法一:在延時程序內(nèi)每個時間單位內(nèi)加入檢測點焊開關(guān)的判斷,如果等待確認時間段內(nèi)離開點焊筆,此時立即退出脈沖輸出函數(shù)過程;
  130. 建議另寫脈沖輸出專用的延時函數(shù)。
  131. */
  132. void maichong()//脈沖輸出函數(shù)
  133. {        
  134.         if(s3==0)//S3 P1^0 電焊開始按鍵為 0 低電平 執(zhí)行
  135.         {
  136.                 unsigned int tus;
  137.                 q1=0;//焊接等待提示
  138.                 DelayMs(60);
  139.                 q1=1;
  140.                 //等待確認點焊,防止誤焊
  141.                
  142.                 tus=900;//900毫秒
  143.                 //12Mhz晶振1000微秒延時
  144.                 TH0 = 0xFC;//設(shè)置定時初始值
  145.                 TL0 = 0x18;//設(shè)置定時初始值
  146.                 TF0 = 0;//清除TF0溢出標志
  147.                 TR0 = 1;//定時器0開始計時
  148.                 while(tus--)//t;t=t-1//先判斷t,再-1
  149.                 {
  150.                         while(TF0==0)//等待TF0為1//等待溢出
  151.                         {
  152.                                 if(s3==1)
  153.                                         return;//按鍵釋放立即返回
  154.                         }
  155.                         TH0 = 0xFC;//設(shè)置定時初始值
  156.                         TL0 = 0x18;//設(shè)置定時初始值
  157.                         TF0 = 0;//清除TF0溢出標志
  158.                         TR0 = 1;//定時器0開始計時
  159.                         //a=tus/100;//數(shù)碼管倒計時
  160.                 }
  161.                 TR0 = 0;//定時器0停止計時
  162.                 //a=ma;//重置顯示                                                                                       
  163.                  if(s3==0)//S3 P1^0 電焊開始按鍵為 0 低電平 執(zhí)行//等待時間結(jié)束后開始判斷是否焊接
  164.                  {
  165.                          DelayMs(100);//延時100                //脈沖第一次
  166.                         
  167.                          q1=0;//低電平,蜂鳴器提示
  168.                          m=0;//低電平,脈沖打開
  169.                          DelayMs(a);//延時毫秒,值是變量a//設(shè)定毫秒時間后斷開電流//leilv測試用延時倍率
  170.                          m=1;//高電平,脈沖關(guān)閉
  171.                          q1=1;//蜂鳴器關(guān)閉,高電平

  172.                          DelayMs(100);//延時毫秒 100 //脈沖第二次
  173.                         
  174.                          q1=0;//低電平,蜂鳴器提示
  175.                          m=0;//低電平,脈沖打開
  176.                          DelayMs(a);//延時毫秒,值是變量a//測試是時請刪除*leilv
  177.                          m=1;//高電平,脈沖關(guān)閉
  178.                          q1=1;//蜂鳴器關(guān)閉,高電平

  179.                          while(!s3);//等待按鍵(點焊筆)松開
  180.                  }                          
  181.         
  182.         }   
  183. }


  184. /*------------------------------------------------
  185. STC15Wxx系列35Mhz,1微秒延時
  186. unsigned int0-65535
  187. ------------------------------------------------*/
  188. /*
  189. void Delay1us35(unsigned int ti)//1微秒延時晶振33.1776MHz
  190. {
  191.         unsigned char i;
  192.         while(--ti)
  193.         {
  194.                 _nop_();
  195.                 _nop_();
  196.                 _nop_();
  197.                 i = 5;
  198.                 while (--i);
  199.         }
  200. }
  201. */
  202. /*
  203. //STC15Wxx系列12Mhz,1微秒延時
  204. void Delay1us12(unsigned int ui)//1微秒延時晶振11.0592MHz
  205. {        
  206.         while(--ui)
  207.         {
  208.                 _nop_();
  209.                 _nop_();
  210.                 _nop_();
  211.         }
  212. }
  213. */
  214. //毫秒延時程序
  215. void DelayMs(unsigned int t) //延時單位約1mS
  216. {        
  217.         //1毫秒@12.000MHz
  218.         TL0 = 0x18;                                //設(shè)置定時初始值
  219.         TH0 = 0xFC;                                //設(shè)置定時初始值
  220.         TF0 = 0;//清除TF0溢出標志
  221.         TR0 = 1;//定時器0開始計時
  222.         while(t--)//t;t=t-1//先判斷t,再-1
  223.         {
  224.                 while(TF0==0);//等待TF0為1//等待溢出
  225.                  TF0 = 0;//清除溢出標記
  226.                 TL0 = 0x18;                        //設(shè)置定時初始值
  227.                 TH0 = 0xFC;                        //設(shè)置定時初始值        
  228.         }
  229.         TR0 = 0;//定時器0停止計時
  230. }
  231. //硬件定時器延時
  232. /*
  233. void Timer0us(unsigned int ut)//微秒延時程序//35Mhz//ut范圍0-23703微秒
  234. {
  235.         //12Mhz下是65536*1微秒;35Mhz下是12/35M*65536=22469.48571428571微秒
  236.         //12Mhz下是65536微秒的溢出值,35Mhz下需要/12;
  237.         //33.1776Mhz=35Mhz?;11.0592Mhz=12Mhz?;
  238.         //t=t*0.9216;//11059200÷12000000=0.9216//12Mhz
  239.         ut=ut*2.7648;//33177600÷12000000 =2.7648//35Mhz
  240.         TH0 = (65536-ut)/256;//設(shè)置定時初始值
  241.         TL0 = (65536-ut)%256;//設(shè)置定時初始值
  242.         TF0 = 0;                                //清除TF0溢出標志
  243.         TR0 = 1;                                //定時器0開始計時
  244.         while(TF0==0);//等待TF0為1//等待溢出
  245.          TF0 = 0;//清除溢出標記
  246.         TR0 = 0;//停止計時
  247.         TH0 =0;//清除值
  248.         TL0=0;
  249. }
  250. */
  251. /*
  252. 定時器使用方法
  253. 機器周期:機器周期=晶振頻率/12
  254. ET0:定時器0中斷開關(guān),0開1關(guān) ,會觸發(fā)中斷函數(shù)過程
  255. 賦初值:開始計數(shù)的初始值
  256. 中斷條件:開啟中斷會觸發(fā)interrupt 函數(shù)過程
  257. 65536是溢出值,此時定時器停止
  258. 12Mhz的機器周期是1微秒,一個機器周期計數(shù)+1
  259. 1、TMOD    :控制,8位;GATE;C/T;M1;M0;GATE;C/T;M1/M0;
  260. C/T為0是定時功能,反之是計數(shù);
  261. M1M0:為工作模式,0;1是16為定時/計時器。
  262. 2、置初值TH0;TL0,5us:TH0=(65536-5000)/256;TL0=(65536-5000)%256; 到達目標后溢出
  263. 3、TCON:啟動,8位可單獨設(shè)置,TF1;TR1;TF0;TR0;IE1;IT1;IE0;IT0;
  264. TR0:為1定時器開始,反之停止;
  265. TF0:溢出后變?yōu)?,需手動清零;由此可得延時函數(shù),while(TF0==0);//TF0為0的情況下始終循環(huán),TF0為1時向下執(zhí)行
  266. */
復(fù)制代碼

Keil代碼下載:
STC408AS點焊機程序?qū)嶒?無倒計時).zip (103.67 KB, 下載次數(shù): 122)

評分

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

查看全部評分

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

使用道具 舉報

來自 2#
ID:993738 發(fā)表于 2024-3-15 17:15 | 只看該作者
樓下有人想要源文件,諾,滿足你們的要求,不過,時間有些久,不知道有沒有改動,用之前記得檢查下,另外,不要商業(yè)化哦。自己diy玩玩就行了。雙電容版本。剛開始做記得百度下,別搞錯電源了,另外PCB還可以繼續(xù)優(yōu)化下,懶得整了。

九檔兩鍵點焊機.zip

211.64 KB, 下載次數(shù): 38, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報

板凳
ID:1004282 發(fā)表于 2023-2-27 08:42 | 只看該作者
牛逼了 ,有電路文件就更完美了  
回復(fù)

使用道具 舉報

地板
ID:68189 發(fā)表于 2023-2-27 13:35 | 只看該作者
sx1308的EN腳接到VIN才能升壓。
回復(fù)

使用道具 舉報

5#
ID:283361 發(fā)表于 2023-3-11 19:53 | 只看該作者
電路實際可以使用嗎?
回復(fù)

使用道具 舉報

6#
ID:834124 發(fā)表于 2023-3-12 12:20 | 只看該作者
這代碼也非常適合學(xué)習(xí)定時器和數(shù)碼管的用法
回復(fù)

使用道具 舉報

7#
ID:77511 發(fā)表于 2023-3-21 13:29 | 只看該作者
非常不錯 nice 。不過MOS驅(qū)動對我感覺有點不爽,不如換成圖騰柱或者TI 的UCC27517DBVT。
回復(fù)

使用道具 舉報

8#
ID:140733 發(fā)表于 2023-11-15 12:02 | 只看該作者
先升到12再降5?
回復(fù)

使用道具 舉報

9#
ID:430492 發(fā)表于 2023-11-16 12:45 | 只看該作者
升壓是為了控制MOS管的,順便取5V給MCU供電。
回復(fù)

使用道具 舉報

10#
ID:993738 發(fā)表于 2024-3-15 16:56 | 只看該作者
dianziren12 發(fā)表于 2023-3-11 19:53
電路實際可以使用嗎?

可以啊
回復(fù)

使用道具 舉報

11#
ID:993738 發(fā)表于 2024-3-15 16:57 | 只看該作者

對的。因為雙電容電壓容易過低
回復(fù)

使用道具 舉報

12#
ID:993738 發(fā)表于 2024-3-15 16:57 | 只看該作者
wpppmlah 發(fā)表于 2023-2-27 13:35
sx1308的EN腳接到VIN才能升壓。

是的,修改后的圖沒上傳,
回復(fù)

使用道具 舉報

13#
ID:993738 發(fā)表于 2024-3-15 17:21 | 只看該作者
無人深空 發(fā)表于 2024-3-15 17:15
樓下有人想要源文件,諾,滿足你們的要求,不過,時間有些久,不知道有沒有改動,用之前記得檢查下,另外, ...

直接導(dǎo)入立創(chuàng)eda即可。
回復(fù)

使用道具 舉報

14#
ID:89072 發(fā)表于 2024-3-15 21:34 | 只看該作者
無人深空 發(fā)表于 2024-3-15 17:15
樓下有人想要源文件,諾,滿足你們的要求,不過,時間有些久,不知道有沒有改動,用之前記得檢查下,另外, ...

謝謝,下載學(xué)習(xí)下
回復(fù)

使用道具 舉報

15#
ID:1039485 發(fā)表于 2024-10-22 17:08 | 只看該作者
抄 成功,STC15W408AS沒有定時器1要改成定時器2
回復(fù)

使用道具 舉報

16#
ID:1137509 發(fā)表于 2024-11-25 16:50 | 只看該作者
JACHOU 發(fā)表于 2024-10-22 17:08
抄 成功,STC15W408AS沒有定時器1要改成定時器2

他這個程序能直接用嗎?
回復(fù)

使用道具 舉報

17#
ID:59884 發(fā)表于 2024-11-26 15:16 | 只看該作者
謝謝樓主分享!
回復(fù)

使用道具 舉報

18#
ID:288444 發(fā)表于 2025-1-9 11:42 | 只看該作者
sx1308的四腳串47K到vin
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品免费看 | 岛国av免费观看 | 伊人久久麻豆 | 国产精品久久视频 | 亚洲精品在线看 | 国产精品一区在线观看 | 成人欧美日韩一区二区三区 | 精品国产一区二区在线 | 午夜精品一区二区三区在线视频 | 国内精品久久影院 | 日本精品在线一区 | 国产精品视频网 | 午夜一级大片 | 秋霞电影一区二区三区 | 久久ww| 91xxx在线观看 | 亚洲国产小视频 | 人操人人干人 | 欧美日本韩国一区二区 | 欧美亚洲视频 | 欧美二区三区 | 国产成人久久精品一区二区三区 | 亚洲 中文 欧美 日韩 在线观看 | 国产精品影视在线观看 | 午夜视频一区 | 黄色大片在线 | 欧美日韩电影一区 | 91伊人网| 久久99精品视频 | 国产精品免费一区二区三区四区 | 亚洲一区精品在线 | www.青青草 | 欧美久久国产 | 成人性视频免费网站 | 久久国产精品偷 | 欧美性网站| 国产区一区二区三区 | 91成人免费观看 | 成人在线观看免费观看 | 国产日韩欧美91 | 精品三区 |