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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC8G1K08單片機驅動的HM2503控制直流電機程序原理圖PCB文件

[復制鏈接]
跳轉到指定樓層
樓主
1.使用國產STC81K小芯片的工程,可供相關學習研究的人員學習交流;
2.使用國產直流電機正反轉控制芯片,控制方案簡單,體積小,電流在3A左右;
3.調速使用外接撥碼開關設置速度;
4.本工程中有,原理圖,PCB圖,原代碼,設置速度的表  HM2503的PDFU資料;
5.全部資料,在壓縮包中;

Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機源程序如下:
  1. /*************  功能說明    *********************************************
  2. 1.檢測撥碼開關狀態,以確定IO口輸出方波的時間長短

  3. 程序工作流:
  4.     1.上電IO產生方波,
  5.     2.檢測撥碼開關狀態,自動調節方波時間,最長1000MS為固定;調節范圍:1ms--119ms
  6.                          
  7. 適用:用于ATQ229繼電器老化
  8. *************************************************************************/
  9. //#include    "reg51.h"                  //包含此頭文件后,里面聲明的寄存器不需要再手動輸入,避免重復定義
  10. #include "STC8GXX.h"
  11. #include "intrins.h"

  12. typedef     unsigned char   u8;
  13. typedef     unsigned int    u16;
  14. typedef     unsigned long   u32;

  15. #define Baudrate1           115200UL
  16. #define UART1_BUF_LENGTH    12


  17. unsigned char       TX1_Cnt;             //發送計數
  18. unsigned char       RX1_Cnt;             //接收計數
  19. unsigned long       MAIN_Fosc=11059200;  //22118400L   //定義主時鐘(精確計算115200波特率)

  20. bit B_TX1_Busy; //發送忙標志
  21. bit sign_usart1_receive12char=0;         //串口1接收標志量

  22. sbit DIP1_port   =P1^7;                                     //撥碼開關8個位
  23. sbit DIP2_port   =P5^5;                             
  24. sbit DIP3_port   =P3^7;                            
  25. sbit DIP4_port   =P3^6;

  26. sbit DIP5_port   =P3^5;                            
  27. sbit DIP6_port   =P3^4;                            
  28. sbit DIP7_port   =P3^3;                            
  29. sbit DIP8_port   =P3^2;       

  30. sbit C_BI_port   =P1^0;                                //方波B向口
  31. sbit C_FI_port   =P1^1;                                //方波F向口

  32. #define Timer0_Reload   (MAIN_Fosc / 1000)      //Timer 0 中斷頻率, 1000次/秒

  33. unsigned char ch=0;                             //1----16    CHANNEL1   2:CHANEL16
  34. unsigned char RX1_Buffer[UART1_BUF_LENGTH],r=0; //接收緩沖

  35. unsigned char DIP_8SW_H=0,DIP_8SW_L=0,TH_MS_VAL=0;
  36. unsigned char Xms_cnt=100;
  37. unsigned char DELAY_CNT=5,delay_cnt=0; //B向 F向關閉后延時MS數 固定



  38. //函數說明
  39. void Timer0_init(void);
  40. void delay_X100MS(unsigned char ts);                  //@11.0592MHz
  41.   
  42. void UART1_config(u8 brt);                      //選擇波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.

  43. void PrintString1(u8 *puts);
  44. void sendData(unsigned char dat);

  45. void do_task(unsigned char x);
  46. void execute_cmd(void);
  47. void scan_dip_8SW();

  48. //=================================================================================================================
  49. //--------------------------------------------------------------------------------------------------
  50. // 函數名稱: g_delay(unsigned int times)
  51. // 入口參數:
  52. // 函數功能: 幾個100MS時
  53. //--------------------------------------------------------------------------------------------------
  54. void delay_X100MS(unsigned char ts)          //@11.0592MHz       
  55. {
  56.         unsigned char i, j, k;

  57.         for(;ts>0;ts--)
  58.                 {
  59.                         _nop_();
  60.                         _nop_();
  61.                         i = 5;
  62.                         j = 52;
  63.                         k = 195;
  64.                         do
  65.                         {
  66.                                 do
  67.                                 {
  68.                                         while (--k);
  69.                                 } while (--j);
  70.                         } while (--i);
  71.                 }
  72. }


  73. //--------------------------------------------------------------------------------------------------
  74. // 函數名稱:void Delay10ms()                //@11.0592MHz
  75. // 入口參數:
  76. // 函數功能: 幾個100MS時
  77. //--------------------------------------------------------------------------------------------------
  78. void Delay10ms()                //@11.0592MHz
  79. {
  80.         unsigned char i, j;

  81.         i = 108;
  82.         j = 145;
  83.         do
  84.         {
  85.                 while (--j);
  86.         } while (--i);
  87. }


  88. //--------------------------------------------------------------------------------------------------
  89. // 函數名稱:void Delay1ms()                //@11.0592MHz
  90. // 入口參數:
  91. // 函數功能: 幾個100MS時
  92. //--------------------------------------------------------------------------------------------------

  93. void Delay1ms()                //@11.0592MHz
  94. {
  95.         unsigned char i, j;

  96.         i = 15;
  97.         j = 90;
  98.         do
  99.         {
  100.                 while (--j);
  101.         } while (--i);
  102. }


  103. //========================================================================
  104. // 函數: void scan_dip_8SW()
  105. // 描述: 串口1發送字節函數。
  106. // 參數: dat:  字節
  107. // 返回: none.
  108. // 版本:
  109. // 日期:
  110. // 備注:
  111. //========================================================================
  112. void scan_dip_8SW()  //檢測撥碼開關的值       
  113. {
  114. unsigned char w_h, w_l;       
  115.        
  116. DIP_8SW_H=0,DIP_8SW_L=0;       
  117.        
  118.        
  119. if(DIP1_port==0) w_l|=0x01;
  120. else             w_l&=0x0E;
  121.        
  122. if(DIP2_port==0) w_l|=0x02;
  123. else             w_l&=0x0D;
  124.        
  125. if(DIP3_port==0) w_l|=0x04;
  126. else             w_l&=0x0B;
  127.        
  128. if(DIP4_port==0) w_l|=0x08;
  129. else             w_l&=0x07;
  130.        
  131.        
  132. if(DIP5_port==0) w_h|=0x01;
  133. else             w_h&=0x0E;
  134.        
  135. if(DIP6_port==0) w_h|=0x02;
  136. else             w_h&=0x0D;

  137. if(DIP7_port==0) w_h|=0x04;
  138. else             w_h&=0x0B;

  139. if(DIP8_port==0) w_h|=0x08;       
  140. else             w_h&=0x07;

  141. if(DIP_8SW_H==0xff &&DIP_8SW_L==0xff)          //1秒鐘方波
  142.         {
  143.                 TH_MS_VAL=1000;//1000MS
  144.         }
  145. else                                    //1MS到119MS方波
  146.          {
  147.                         DIP_8SW_H=w_h&0x0F;               //ms數的十位:0--11
  148.                         if(DIP_8SW_H>11) DIP_8SW_H=11;

  149.                         DIP_8SW_L=w_l&0x0f;                       //ms數的個位:0--9
  150.                         if(DIP_8SW_L>9) DIP_8SW_L=9;
  151.                  
  152.                  TH_MS_VAL=DIP_8SW_H*10+DIP_8SW_L;   //1--119MS
  153.          }
  154.        
  155. //sendData(10*DIP_8SW_H);                 //通過串口檢測設置值
  156. //sendData(DIP_8SW_L);       
  157. }
  158. //========================================================================
  159. // 函數: void sendData(unsigned char dat)
  160. // 描述: 串口1發送字節函數。
  161. // 參數: dat:  字節
  162. // 返回: none.
  163. // 版本:
  164. // 日期:
  165. // 備注:
  166. //========================================================================
  167. void sendData(unsigned char dat)
  168. {
  169.     while (B_TX1_Busy);          //等待前面的數據發送完成
  170.     B_TX1_Busy= 1;
  171.     SBUF = dat;//ACC;            //寫數據到UART數據寄存器
  172. }


  173. //========================================================================
  174. // 函數: void execute_cmd(void)
  175. // 描述: 執行通道切換  返回OK字符
  176. // 參數: none.
  177. // 返回: none.
  178. // 版本:
  179. // 日期:
  180. // 備注:
  181. //========================================================================
  182. void execute_cmd(void)
  183. {       
  184.         if(sign_usart1_receive12char==1)            //
  185.                 {
  186.                         //do_task(ch);ch=0XFF;   //切到通道x          //通道x的LED亮  //應答OK字符  //清除標志       
  187.                 }               

  188.    scan_dip_8SW();   //檢測撥碼開關的狀態               
  189. }


  190. //========================================================================
  191. // 函數: void PrintString1(u8 *puts)
  192. // 描述: 串口1發送字符串函數。
  193. // 參數: puts:  字符串指針.
  194. // 返回: none.
  195. // 版本:
  196. // 日期:
  197. // 備注:
  198. //========================================================================
  199. void PrintString1(u8 *puts)
  200. {
  201.     for (; *puts != 0;  puts++)     //遇到停止符0結束
  202.                         {
  203.                                         SBUF = *puts;
  204.                                         B_TX1_Busy = 1;
  205.                                         while(B_TX1_Busy);
  206.                         }
  207. }

  208. //========================================================================
  209. // 函數: void   UART1_config(u8 brt)
  210. // 描述: UART1初始化函數。
  211. // 參數: brt: 選擇波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
  212. // 返回: none.
  213. // 版本:
  214. // 日期:
  215. // 備注:
  216. //========================================================================
  217. void    UART1_config(u8 brt)
  218. {
  219.     /*********** 波特率使用定時器1 *****************/
  220.                 TR1 = 0;
  221.                 AUXR &= ~0x01;      //S1 BRT Use Timer1;
  222.                 AUXR |=  (1<<6);    //Timer1 set as 1T mode
  223.                 TMOD &= ~(1<<6);    //Timer1 set As Timer
  224.                 TMOD &= ~0x30;      //Timer1_16bitAutoReload;
  225.                 //TH1 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) / 256);
  226.                 //TL1 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) % 256);
  227.                 TL1 = 0xE8;                //
  228.                 TH1 = 0xFF;                //
  229.                 ET1 = 0;    //禁止中斷
  230.                 //INT_CLKO &= ~0x02;  //不輸出時鐘
  231.                 INTCLKO&= ~0x02;  //不輸出時鐘
  232.                 TR1  = 1;
  233.    
  234.     /*************************************************/
  235.     SCON = (SCON & 0x3f) | 0x40;    //UART1模式, 0x00: 同步移位輸出, 0x40: 8位數據,可變波特率, 0x80: 9位數據,固定波特率, 0xc0: 9位數據,可變波特率
  236.     //  PS  = 1;    //高優先級中斷
  237.     ES  = 1;    //允許中斷
  238.     REN = 1;    //允許接收
  239.     P_SW1 &= 0x3f; //串口1使用P3.0  P3.1
  240.                 //  P_SW1 |= 0x00;      //UART1 switch to, 0x00: P3.0 P3.1, 0x40: P3.6 P3.7, 0x80: P1.6 P1.7, 0xC0: P4.3 P4.4
  241.                 //  PCON2 |=  (1<<4);   //內部短路RXD與TXD, 做中繼, ENABLE,DISABLE

  242.                 //                IPH|=0X10;            //0X11  串口1中斷級為最高第3級
  243.                 //          PS=1;       
  244.                
  245.                 IPH|=0X10;            //0X11  串口1中斷級為最高第2級
  246.           PS=0;                       
  247.                
  248.     B_TX1_Busy = 0;
  249.     TX1_Cnt = 0;
  250.     RX1_Cnt = 0;
  251. }





  252. //========================================================================
  253. // 函數: void UART1_int (void) interrupt UART1_VECTOR
  254. // 描述: UART1中斷函數。
  255. // 參數: nine.
  256. // 返回: none.
  257. // 版本:
  258. // 日期:
  259. // 備注:
  260. //========================================================================
  261. void UART1_int (void) interrupt 4
  262. {
  263. //    if(RI)
  264. //    {
  265. //        RI = 0;
  266. //        RX1_Buffer[RX1_Cnt] = SBUF;
  267. //        if(++RX1_Cnt >= UART1_BUF_LENGTH)   RX1_Cnt = 0;
  268. //    }

  269. //    if(TI)
  270. //    {
  271. //        TI = 0;
  272. //        B_TX1_Busy = 0;
  273. //    }
  274.        
  275.     if(RI)
  276.             {
  277.                 RI = 0;

  278.                                         r= SBUF;
  279.                                         if(r==0xaa)  RX1_Cnt=0;
  280.                                         RX1_Buffer[RX1_Cnt] = r;
  281.                                
  282.                                         //------
  283.                                         sign_usart1_receive12char=1;               //收到了字節 標志位置1                                                               
  284.                                         //------
  285.                                                
  286.                                         if(++RX1_Cnt >= UART1_BUF_LENGTH)   RX1_Cnt = 0;    //防溢出
  287.             }

  288.     if(TI)
  289.             {
  290.                 TI = 0;
  291.                 B_TX1_Busy = 0;
  292.             }       
  293.        
  294. }





  295. //========================================================================
  296. // 函數: void   Timer0_init(void)
  297. // 描述: timer0初始化函數.
  298. // 參數: none.
  299. // 返回: none.
  300. // 版本: V1.0, 2015-1-12
  301. //========================================================================
  302. void    Timer0_init(void)
  303. {
  304.         TR0 = 0;           //停止計數
  305.         ET0 = 1;           //允許中斷

  306.         INTCLKO &= ~0x01;  //不輸出時鐘

  307.         AUXR |= 0x80;                   //1T
  308.         TMOD &= 0xF0;                   //定時器模式
  309.        
  310.         TL0 = 0xCD;                     //初值    1ms
  311.         TH0 = 0xD4;                     //
  312.        
  313.         TF0 = 0;                       //清除TF0
  314.         TR0 = 1;                       //開起 T0                               
  315. }

  316. //========================================================================
  317. // 函數: void timer0_int (void) interrupt TIMER0_VECTOR
  318. // 描述:  timer0中斷函數.
  319. // 參數: none.
  320. // 返回: none.
  321. // 版本: V1.0, 2015-1-12
  322. //========================================================================
  323. void timer0_int (void) interrupt 1
  324. {
  325.    
  326.          if(Xms_cnt)    Xms_cnt--;       
  327.          if(Xms_cnt==0)
  328.                  {
  329.                          Xms_cnt=TH_MS_VAL;       
  330.                           
  331.                           if(C_FI_port==1)    //F向口切換,產生方波  //B向口切換,產生方波
  332.                                         {                                        
  333.                                                 C_BI_port=1;
  334.                                                 //最好加1MS到幾MS延時
  335.                                                 C_FI_port=0;
  336.                                         }
  337.                          else
  338.                                         {
  339.                                                 C_FI_port=1;
  340.                                                 //最好加1MS到幾MS延時
  341.                                                 C_BI_port=0;                                                 
  342.                                         }
  343.                  }       
  344. }

  345. //========================================================================
  346. // 函數: void main(void)
  347. // 描述: 主函數。
  348. // 參數: none.
  349. // 返回: none.
  350. // 版本:
  351. // 日期:
  352. // 備注:
  353. //========================================================================
  354. void main(void)
  355. {
  356.           //IO初始說明
  357.                 //sfr PXM1 = 0xYY;    //PxM1.n,PxM0.n     =00--->Standard,    01--->push-pull
  358.                 //sfr PXM0 = 0xYY;    //                  =10--->pure input,  11--->open drain               
  359.           start:
  360.                 P1M1 = 0x00;       
  361.                 P1M0 = 0x03;     //P1.1  1.0強輸出   其它口雙向口                

  362.                 //                P3M1 = 0x00;       
  363.                 //                P3M0 = 0xFC;     //3.1 3.0 雙向口         其它口強輸出               
  364.                 P3M1 = 0x00;       
  365.                 P3M0 = 0x00;     //3.1 3.0 雙向口         其它口雙向口       
  366.        
  367.                 //                P5M1 = 0x00;       
  368.                 //                P5M0 = 0x30;     //P5.5  5.4強輸出   其它口雙向口                
  369.                 P5M1 = 0x00;       
  370.                 P5M0 = 0x00;     //P5.5  5.4雙向口                   其它口雙向口       

  371.                 DIP1_port=1;             //開關口置高
  372.                 DIP2_port=1;
  373.                 DIP3_port=1;
  374.                 DIP4_port=1;
  375.                 DIP5_port=1;
  376.                 DIP6_port=1;
  377.                 DIP7_port=1;
  378.                 DIP8_port=1;
  379.                
  380.                 C_BI_port=0; //初始B向口一直為低,控制繼電器的通斷由F向口控制接通或 斷開

  381.     EA = 0;             //關全局中斷       
  382.                 delay_X100MS(5);    //delay_X100MS(5);

  383.     Timer0_init();
  384.     UART1_config(1);      // 選擇波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
  385.     //UART2_config(2);    // 選擇波特率, 2: 使用Timer2做波特率, 其它值: 無效.
  386.                 delay_X100MS(1);   
  387.                
  388.                 RX1_Cnt=0; RX1_Buffer[0]=0; RX1_Buffer[1]=0;RX1_Buffer[2]=0;RX1_Buffer[3]=0;
  389.     EA = 1;             //允許全局中斷         

  390.     while (1)
  391.                         {
  392.                                 execute_cmd();                               
  393.                         }
  394. }
復制代碼

所有資料51hei附件下載:
STC8G1K08 HM2503_2.7z (2.89 MB, 下載次數: 61)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:898433 發表于 2024-1-11 23:05 | 只看該作者
感謝感謝。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩第一页 | 亚洲精品一区在线 | 毛片一区二区三区 | www.99热.com| 国产精品亚洲二区 | 91亚洲欧美 | 91久久久久 | 亚洲综合在线播放 | 少妇一区在线观看 | 成人二区 | 日韩美女在线看免费观看 | 成人国产在线视频 | 男女精品久久 | 99视频网| 妹子干综合 | 东京久久 | 免费v片在线观看 | 成人午夜免费视频 | 天天干精品 | 欧美一级视频 | 亚洲视频在线一区 | 欧美精品一区二区三 | 亚洲一区中文字幕在线观看 | 久久久精品一区 | 三级视频网站 | 美女视频黄色片 | 九九99靖品 | 免费黄色片在线观看 | 懂色一区二区三区免费观看 | 成人不卡视频 | 91精品国产美女在线观看 | 秋霞电影一区二区三区 | 亚洲第一在线视频 | 一区二区日韩精品 | 久久蜜桃av一区二区天堂 | 一级中国毛片 | 久久久久亚洲 | 日韩欧美精品一区 | 久久99国产精品 | 6080亚洲精品一区二区 | 日本一区二区在线视频 |