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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

自己做的單片機串口控制臺 調試用 (原理圖,文檔,源碼)

[復制鏈接]
跳轉到指定樓層
樓主
自己做的一個控制板,上面掛的器件比較多,IO 不夠用了,
同時也不想用按鍵來控志;
直接寫了一個的串口控制臺,用來PC下發命令字調試其它器件
(相比串口直接字節下發數據,  命令字多了穩定性和雜波干擾的可能, 重啟和插拔串口不會導致控制中心不穩
以及避除了數據與命令重復的問題),
單片機再執行命令字各種操作,  -------單片機接收時先尋找第一字節=AA,再尋找第二字節55,匹配后才認為是命令字

單片機程序內簡單使用了16組CMD,   可以按照自行情況修改,很好用  ,測試了1w次沒有問題


幀頭1幀頭2CMD(理論可以做254組命令字,0初值)
幀頭AA551
幀頭AA552
幀頭AA553
幀頭AA554
幀頭AA555
幀頭AA556
幀頭AA557
幀頭AA558
幀頭AA559
幀頭AA5510
幀頭AA55..
幀頭AA55..
幀頭AA55FE
幀頭AA55FF


單片機用的STC15FW408AS, 數碼管:共陽三位5631AS

電路原理圖如下:


單片機源程序如下:

  1. /******************************************/

  2. /*************        本地常量聲明        **************/
  3. #define MAIN_Fosc                22118400L        //定義主時鐘
  4. #include        "STC15Fxxxx.H"

  5. /*****************************************************************************/
  6. #include<3LED_anode.H>//數碼管驅動顯示程序       
  7. #include<beep.H>   //蜂鳴器驅動
  8. #include<UART1.H> // UART1, 408AS沒有串口2,TIMER1  
  9. #include<led.H>           // LED顯示燈
  10. /*****************************************************************************/
  11. //IO 設置
  12. //P1 標準雙向  
  13. #define P1M0SET                0x00 //設置I/O口工作方式//00000000(左到右,高到低位)
  14. #define P1M1SET                0x00 //設置I/O口工作方式//00000000
  15. // P2 標準雙向        
  16. #define P2M0SET                0x00 //設置I/O口工作方式//00000000
  17. #define P2M1SET                0x00 //設置I/O口工作方式//00000000
  18. //P3.6 (DS18B20---DATA OD門)
  19. #define P3M0SET                0x40 //設置I/O口工作方式//01000000
  20. #define P3M1SET                0x40 //設置I/O口工作方式//01000000


  21. /*************        串口部分        **************/
  22. u8        idata RX1_Buffer[RX1_Lenth];        //接收緩沖
  23. u8        TX1_Cnt;        //發送計數
  24. u8        RX1_Cnt;        //接收計數
  25. bit        B_TX1_Busy;        //發送忙標志

  26. /**********************************************/
  27. //串口發送數組,測試數組
  28. unsigned char code TXtest_data[]={
  29. 0x88,0x99,0x66,0x77,0x99,
  30. };//


  31. /**********************************************/
  32. unsigned int tmp=0;
  33. unsigned int tem=0;//

  34. unsigned char rec_cnt=0;
  35. unsigned char rec_cmd=0;  
  36. /***********************************************/
  37. void rec_cmd1(void);
  38. void CMD_DO(void);
  39. void trans_tmp(void);
  40. void Pinit (void);
  41. /*************        本地函數聲明        **************/       

  42. /**********************************************/
  43. void main()
  44. {


  45. /**********************************************/
  46.         unsigned char i;
  47.         unsigned int KK;
  48.         unsigned int sn;
  49.         unsigned char CMD_TYPE;

  50.        

  51.         delay1ms(300); //延時待系統穩定
  52. /**********************************************/
  53.         beepdi();        //蜂鳴
  54. /**********************************************/
  55.         UART1_init ();         //串口初始化 串口1,timer2
  56. /**********************************************/

  57.         REN = 1;        //允許接收
  58.         ES  = 1;        //允許中斷
  59.         EA = 1;                //允許全局中斷
  60. /**********************************************/       
  61.         ledoff(1);
  62.         ledoff(2);
  63.         ledoff(3);
  64.         ledoff(4);
  65. /**********************************************/
  66.         SendString("STC15W408AS Uart Test !\r\n");
  67.         SendString("幀頭:");
  68.         SendString("aa:");
  69.         SendString("55:");
  70. /**********************************************/
  71.        
  72.        
  73.        
  74.         while (1)
  75.         {

  76.                
  77.         rec_cmd1();       
  78.         CMD_DO();



  79.         }

  80. /**********************************************/




  81. /**********************************************/
  82. }

  83. /*************        408AS        **************/
  84. void rec_cmd1(void)
  85. {
  86.        
  87.                
  88.     if (rec_cnt!=RX1_Cnt) //  接收計數有變化
  89.         {
  90.                 rec_cnt=RX1_Cnt;
  91.         /**********************************************/
  92.             if(RX1_Cnt == 0)                //收到過數據>=3字節,接收計數變化,尋找幀頭會有浪費
  93.                 {
  94.                  
  95.                 if(RX1_Buffer[29]==0xaa)                //aa 幀頭尋找
  96.                         {
  97.                            if ((RX1_Buffer[29]==0xaa)&(RX1_Buffer[30]==0x55))//AA&55雙字節定幀
  98.                                    {
  99.                                         rec_cmd=RX1_Buffer[31];                                               
  100.                                 }
  101.                         }
  102.                 }       

  103. /**********************************************/
  104.                 if(RX1_Cnt == 1)                //收到過數據>=3字節,接收計數變化,尋找幀頭會有浪費
  105.                 {                  
  106.                         if(RX1_Buffer[30]==0xaa)                //aa 幀頭尋找
  107.                         {
  108.                            if ((RX1_Buffer[30]==0xaa)&(RX1_Buffer[31]==0x55))//AA&55雙字節定幀
  109.                                    {
  110.                                         rec_cmd=        RX1_Buffer[0];                                        
  111.                                 }
  112.                         }               

  113.                 }       
  114. /**********************************************/
  115.                 if(RX1_Cnt == 2)                //收到過數據>=3字節,接收計數變化,尋找幀頭會有浪費
  116.                 {
  117.                  
  118.                         if(RX1_Buffer[31]==0xaa)                //aa 幀頭尋找
  119.                         {
  120.                            if ((RX1_Buffer[31]==0xaa)&(RX1_Buffer[0]==0x55))//AA&55雙字節定幀
  121.                                    {
  122.                                         rec_cmd=RX1_Buffer[1];                                
  123.                                        
  124.                                
  125.                                 }
  126.                         }       
  127.                        

  128.                 }       
  129. /**********************************************/
  130.                 if(RX1_Cnt >= 3)                //收到過數據>=3字節,接收計數變化,尋找幀頭會有浪費
  131.                 {
  132.                  
  133.                         if(RX1_Buffer[RX1_Cnt-3]==0xaa)                //aa 幀頭尋找
  134.                         {
  135.                                    if ((RX1_Buffer[RX1_Cnt-0x03]==0xaa)&(RX1_Buffer[RX1_Cnt-0x02]==0x55))//AA&55雙字節定幀
  136.                                    {
  137.                                         rec_cmd=RX1_Buffer[RX1_Cnt-1];       
  138.                                 }
  139.                         }       

  140.                 }         
  141.                      
  142.         }
  143. }
  144. /*************        408AS        **************/


  145. /********************* UART1中斷函數************************/
  146. /*************        408AS        **************/
  147. void CMD_DO(void)
  148. {


  149.        
  150.                                         switch(rec_cmd)
  151.                                         {
  152.                                         case 0x1://                       
  153.                                                 ledon(0x01);
  154.                                                 rec_cmd=0;       
  155.                                                 break;//               
  156.                                         case 0x02://                       
  157.                                                 ledon(0x02);
  158.                                                 rec_cmd=0;                
  159.                                                 break;//               
  160.                                         case 0x03://                       
  161.                                                 ledon(0x03);
  162.                                                 rec_cmd=0;       
  163.                                                 break;//
  164.                                         case 0x04://                       
  165.                                                 ledon(0x04);
  166.                                                 rec_cmd=0;
  167.                                                 break;//
  168.                                         case 0x5://                       
  169.                                                 displayHH1(1) ;
  170.                                                 rec_cmd=0;
  171.                                                 break;//               
  172.                                         case 0x06://                       
  173.                                                 displayHH1(2);
  174.                                                 rec_cmd=0;               
  175.                                                 break;//               
  176.                                         case 0x07://                       
  177.                                                 displayHH1(3);
  178.                                                 rec_cmd=0;       
  179.                                                 break;//
  180.                                         case 0x08://                       
  181.                                                 displayHH1(4);
  182.                                                 rec_cmd=0;
  183.                                                 break;//
  184.                                         case 0x9://                       
  185.                                                 displayHH2(1) ;
  186.                                                 rec_cmd=0;
  187.                                                 break;//               
  188.                                         case 0x0a://                       
  189.                                                 displayHH2(2);
  190.                                                 rec_cmd=0;
  191.                                                 break;//               
  192.                                         case 0x0b://                       
  193.                                                 displayHH2(3);
  194.                                                 rec_cmd=0;
  195.                                                 break;//
  196.                                         case 0x0c://                       
  197.                                                 displayHH2(4);
  198.                                                 rec_cmd=0;       
  199.                                                 break;//
  200.                                         case 0x0d://                       
  201.                                                 displayHH3(1) ;       
  202.                                                 rec_cmd=0;
  203.                                                 break;//               
  204.                                         case 0x0e://                       
  205.                                                 displayHH3(2);
  206.                                                 rec_cmd=0;               
  207.                                                 break;//               
  208.                                         case 0x0f://                       
  209.                                                 displayHH3(3);
  210.                                                 rec_cmd=0;
  211.                                                 break;//
  212.                                         case 0x10://                       
  213.                                                 displayHH3(4);
  214.                                                 rec_cmd=0;       
  215.                                                 break;//
  216.                                         case 0x11://                       
  217.                                                 displayHH3(8);
  218.                                                 rec_cmd=0;       
  219.                                                 break;//
  220.                                         default         :
  221.                                     rec_cmd=0;;       

  222.         };               
  223.                
  224. }


  225. /********************* 函數************************/
  226. //M0,M1  IO口設定模式
  227. //(0,0)  標準雙向
  228. //(0,1)  推挽輸出,強上拉輸出
  229. //(1,0)  高阻,僅輸入
  230. //(1,1)  開漏IO,內部上拉斷開
  231. /***********************************************///P口初始化 DS18B數據要OD設計

  232. void Pinit (void){       
  233.                 P3M1=P3M1SET;
  234.                 P3M0=P3M0SET;
  235.                 P1M0=P1M0SET;
  236.                 P1M1=P1M1SET;
  237.                 P2M0=P2M0SET;
  238.                 P2M1=P2M1SET;
  239.                 }

  240. /*******************************************/

  241. /**********************************************/
  242. /*
  243.        
  244. //串口數據處理               
  245. ……………………

  246. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:

串口控制臺.zip

63.44 KB, 下載次數: 19, 下載積分: 黑幣 -5

源碼--調試用-STC15W408AS

408AS.zip

334.2 KB, 下載次數: 15, 下載積分: 黑幣 -5

原理圖和數碼管以及串口控制臺編碼文檔

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区四区不卡 | 日韩欧美一区在线 | 在线视频亚洲 | 国产 日韩 欧美 在线 | 国产日韩欧美激情 | 色婷婷国产精品综合在线观看 | 亚洲国产黄 | 国产精品免费看 | 亚洲国产精品视频一区 | 欧美中文一区 | 在线男人天堂 | 成人精品一区二区 | 久久一区二区精品 | 久久久久一区二区三区 | 一区在线播放 | 91视频网址| 精品久久久久久久久久 | 国产一区二区三区在线视频 | 国产精品久久久久久亚洲调教 | 激情一区二区三区 | 久久久久亚洲 | 亚洲免费人成在线视频观看 | 九色av| 国产精品一二区 | 夜夜骚视频 | 青青草在线视频免费观看 | 精品国产一区二区国模嫣然 | 一区二区手机在线 | 久久一区二区视频 | 国产精品99久久久久久人 | 国精产品一区二区三区 | 国产精品久久久久久婷婷天堂 | 久久亚洲精品国产精品紫薇 | 国产精品久久 | 欧美黄在线观看 | 97久久精品午夜一区二区 | 国产成人黄色 | 天天干天天玩天天操 | 成人亚洲一区 | 欧美在线视频观看 | 日韩美av|