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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

初學51單片機制作的自動調壓電路和源程序 附變壓轉換詳表

[復制鏈接]
跳轉到指定樓層
樓主
是本人初學51時制作的自動調壓電路,設計上比較笨拙,僅供參考,參考莫笑!有單片機程序原理圖!

制作出來的實物圖如下:


電路原理圖如下:


變壓轉換詳表
220V變24V電壓比:9.166

輸入電壓低于160VLED亮,控口P1.1
輸入電壓高于260VLED亮,無輸出

單片機源程序如下:
  1. #include <stc12c2052ad.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define AD_SPEED   0x60 //0000,0000    1080個時鐘周期轉換一次,
  6. #define   nop     _nop_()


  7. //
  8. sbit v16=P1^1;
  9. sbit v17=P1^2 ;
  10. sbit v18=P1^3;
  11. sbit v19=P1^4  ;
  12. sbit v20=P1^5 ;
  13. sbit v21=P1^6  ;
  14. sbit v22=P1^7 ;
  15. sbit v23=P3^7 ;
  16. sbit v24=P3^5;
  17. sbit v25=P3^4;
  18. sbit led16=P3^3;
  19. sbit led25=P3^2;



  20. /****************************************************************/

  21. void delayms(uint);
  22. int  ADC();
  23. void InitADC();
  24. float voltage=0.0;
  25. uint  vac,V=0.0,V1=0.0,V2;
  26. float vdc=0.00 ;
  27. void kaig();
  28. /***8**************************************************************/
  29. void main()
  30. {  
  31.         InitADC();
  32.         delayms(1500);


  33. while (1)

  34.    {
  35.        WDT_CONTR=0x34;       
  36.       
  37.        delayms(100);
  38.        V2=ADC();
  39.        delayms(10);
  40.        vdc= V2/256.00*5.00 ;//單片機最高是5伏模擬電壓

  41.       if ((vdc>3.78)||(vdc<1.85))        //acv=269.35   acv=131.8
  42.            {          
  43.               P1=0XFF;
  44.               P3=0XFF;
  45.               led25=0;
  46.               led16=0;
  47.                break;
  48.           }
  49.        else
  50.            {
  51.              if (V2<107)       //vdc=2.0865 acv=148.68
  52.                 led16=~led16;
  53.              if (V2>187)          //vdc=3.6465 acv=259.8
  54.                 led25=~led25;
  55.                     delayms(100);
  56.                 kaig();

  57.            }
  58.                  
  59.        

  60.     }


  61. }


  62. /////////////////////////////
  63. void kaig()
  64. {
  65.         if (vdc<=2.31)
  66.             
  67.                     {
  68.                           
  69.                           vac=16;
  70.                       led16=0;
  71.                     }
  72.                
  73.     if (2.31<vdc&&vdc<=2.45)
  74.   
  75.                    vac=17;
  76.                         
  77.         if  (2.45<vdc&&vdc<=2.59)
  78.              
  79.                    vac=18;

  80.         if  (2.59<vdc&&vdc<=2.73)
  81.                                  
  82.                    vac=19;
  83.        
  84.         if  (2.73<vdc&&vdc<=2.87)
  85.                
  86.                    vac=20;
  87.                         
  88.         if  (2.87<vdc&&vdc<=3.01)
  89.                          
  90.                    vac=21;
  91.        
  92.         if  (3.01<vdc&&vdc<=3.15)
  93.              
  94.                    vac=22;

  95.         if  (3.15<vdc&&vdc<=3.29)
  96.              
  97.                    vac=23;
  98.        
  99.         if  (3.29<vdc&&vdc<=3.43)
  100.                  
  101.                    vac=24;
  102.        
  103.         if  (3.43<vdc&&vdc<=3.57)
  104.                  vac=25;
  105.        
  106.         if  (vdc>3.57)
  107.               {
  108.                    vac=25;
  109.                    led25=0;       
  110.               }

  111.    switch(vac)
  112.    {
  113.           
  114.         case 16:
  115.               if (v16==0)
  116.                  break;
  117.                   else
  118.                   {
  119.                      
  120.                     P1=0XFF;
  121.                     P3=0XFF;
  122.                      v16=0;
  123.                   }
  124.                   break;
  125.         case 17:
  126.              if (v17==0)
  127.                    break;
  128.                  else
  129.                    {
  130.                           P1=0XFF;
  131.                     P3=0XFF;
  132.                     v17=0;
  133.                          }
  134.                         break;
  135.         case 18:
  136.                  if(v18==0)
  137.                             break;
  138.                      else
  139.                              {
  140.                                    P1=0XFF;
  141.                            P3=0XFF;
  142.                                    v18=0;
  143.                                   }
  144.                          break;
  145.         case 19:
  146.                  if(v19==0)
  147.                          break;
  148.                          else
  149.                              {
  150.                                   P1=0XFF;
  151.                           P3=0XFF;
  152.                                   v19=0;
  153.                                    }
  154.                                    break;
  155.         case 20:
  156.                  if(v20==0)
  157.                             break;
  158.                          else
  159.                            {
  160.                            P1=0XFF;
  161.                        P3=0XFF;
  162.                               v20=0;
  163.                                     }
  164.              break;
  165.         case 21:
  166.                   if(v21==0)
  167.                           break ;
  168.                           else
  169.                              {P1=0XFF;
  170.                         P3=0XFF;       
  171.                         v21=0;
  172.                           
  173.                           }   
  174.                    break;

  175.         case 22:
  176.                   if(v22==0)
  177.                             nop;
  178.                            else
  179.                            {
  180.                                    P1=0XFF;
  181.                          P3=0XFF;
  182.                            v22=0;
  183.                   }
  184.           break;
  185.         case 23:
  186.                    if(v23==0)
  187.                              break;
  188.                                 else
  189.                                 {
  190.                             P1=0XFF;
  191.                         P3=0XFF;
  192.                                 v23=0;
  193.                                 }

  194.             break;
  195.         case 24:
  196.                     if(v24==0)
  197.                                    break;
  198.                                 else
  199.                                 {
  200.                                   P1=0XFF;
  201.                          P3=0XFF;
  202.                                 v24=0;
  203.                                 }
  204.                 break;
  205.         case 25:
  206.                     if(v25==0)
  207.                                    break;
  208.                                 else
  209.                                 {
  210.                                  P1=0XFF;
  211.                          P3=0XFF;
  212.                                 v25=0;
  213.                                 }
  214.                 break;
  215.        


  216.    }
  217.    


  218. }
  219. /*void UartInit()                //9600bps@11.0592MHz
  220. {

  221.         PCON &= 0x7f;                //波特率不倍速
  222.         SCON = 0x50;                //8位數據,可變波特率
  223.         AUXR |= 0x40;                //定時器1時鐘為Fosc,即1T
  224.         AUXR &= 0xfe;                //串口1選擇定時器1為波特率發生器
  225.         TMOD &= 0x0f;                //清除定時器1模式位
  226.         TMOD |= 0x20;                //設定定時器1為8位自動重裝方式
  227.         TL1 = 0xDC;                //設定定時初值
  228.         TH1 = 0xDC;                //設定定時器重裝值
  229.         ET1 = 0;                //禁止定時器1中斷
  230.         TR1 = 1;                //啟動定時器1
  231. }

  232.   

  233.    

  234. //
  235. //
  236.   */
  237. //AD轉換初始化 ----打開ADC電源
  238. void InitADC()
  239. {
  240. P1=0xff;
  241. ADC_CONTR|=0x80;
  242. delayms(80);
  243. //這兩個寄存器用來設置 P1口四種狀態,每一位對應一個P1引腳 ,按狀態組合操作
  244. /*****************
  245. P1M0 和P1M1 寄存器位  7      6     5    4     3      2     1     0
  246.                      P1.7  P1.6  P1.5  P1.4  P1.3  P1.2  P1.1  P1.0
  247. 同理P3M0  P3M0 也是。因為STC12C2052AD只有兩個P口,所以只有這倆組  STC12C5410AD還多P2M0 P1M0 有三組   
  248.   P1M0   P1M1                 高
  249.     0   0     普通I0口 (準雙向)        P1寄存器位  7      6     5    4     3      2     1     0
  250. 0      1     強推挽輸出 (20MA電流 )盡量少用      P1.7  P1.6  P1.5  P1.4  P1.3  P1.2  P1.1  P1.0
  251. 1  0     僅做輸入  A/D轉換時可用此模式     
  252. 1      1    開漏 ,A/D轉換時可用此模式
  253.   
  254.   例如:
  255.   要設置P1.1為 AD 輸入口
  256.   則 P1M0=0X02 ;
  257.      P1M1=0X02;   開漏即可
  258.   當不用AD時,最好 關閉ADC電源 ,恢復為IO口狀態
  259. ********************************/
  260. P1M0=0x01;//這兩個寄存器用來設置 P1口四種狀態,每一位對應一個P1引腳 ,按狀態組合操作
  261. P1M1=0x01;//設置P1.0為開漏狀態
  262. }

  263. // AD轉換程序
  264. /******************************************************
  265. 注意:這個函數里注釋的命令是通用命令,可以針對所有AD通道使用,我這就認準了P1.1一個通道,所以直接
  266. //賦值,省點"流量"!折磨我的問題就出在這個函數里的while等待語句
  267. while (1)                       //等待A/D轉換結束
  268.     {
  269.         if (ADC_CONTR & 0x10)       //0001,0000 測試A/D轉換結束否
  270.         { break; }
  271.     }
  272.   這是能用的,我原來寫的是:
  273. while (ADC_CONTR & 0x10==0);
  274. 這樣寫不能用,再說一遍:這樣就不能用了!
  275. 至于為嘛,因為 優先級,“==”比&優先級高,
  276. 所以加個括號就可以了
  277. while (  (ADC_CONTR & 0x10)   == 0  );
  278. 不經常用C語言,就會記不住啦!!
  279. 由此得到一個教訓;小問題影響效率
  280. 經驗:經常加一加括號會死啊,似乎也不耗“流量”吧!
  281. *********************************************/
  282. int ADC()
  283. {
  284.     ADC_DATA   = 0; //清除結果
  285.     ADC_CONTR = 0x60;      //轉換速度設置  0x60  最快速度
  286.     ADC_CONTR = 0xE0;               //1110,0000 清 ADC_FLAG, ADC_START 位和低 3 位          開啟AD電源保持速度設置
  287.   // ADC_CONTR =0xe1;                                   //        選擇 A/D 當前通道   P1.1  保持上句設置
  288.   //  ADC_CONTR |= 0x01;           //選擇 A/D 當前通道   P1.1
  289.     delayms(2);                       //使輸入電壓達到穩定
  290.    ADC_CONTR = 0xE8;                            //開啟轉換 1110  1001  保持上句設置
  291.    // ADC_CONTR |= 0x08;              //0000,1000 令 ADCS = 1, 啟動A/D轉換,  
  292.      while (1)                       //等待A/D轉換結束
  293.     {
  294.         if (ADC_CONTR & 0x10)       //0001,0000 測試A/D轉換結束否
  295.         { break; }
  296.     }
  297.     ADC_CONTR =0xE0;
  298.     //ADC_CONTR &= 0xE7;            //1111,0111 清 ADC_FLAG 位, 關閉A/D轉換,  
  299.     return   ADC_DATA; //返回 A/D 10 位轉換結果


  300. ……………………

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

所有資料51hei提供下載:
調壓.rar (162.1 KB, 下載次數: 26)


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: a黄在线观看 | 亚洲一区二区三区在线视频 | 日本成人中文字幕 | 亚洲国产精品激情在线观看 | 国产精品区一区二区三区 | 免费a v网站| 91亚洲欧美 | 国产91亚洲精品一区二区三区 | 免费视频一区二区 | 99久久精品一区二区成人 | 毛片一区二区 | 久久精品欧美一区二区三区不卡 | 国产精品影视在线观看 | 国产一区欧美一区 | 国产成人自拍一区 | 在线播放中文字幕 | 国产视频中文字幕 | 小h片免费观看久久久久 | 中文字幕一区二区三区四区不卡 | 婷婷成人在线 | 国产精品福利久久久 | 久久精品国产一区二区电影 | 伊人影院99 | 视频一区中文字幕 | 国产日韩久久 | 欧美日韩高清在线观看 | 欧美成人一区二免费视频软件 | 欧美精品福利视频 | 黄色福利 | 不卡的av在线| 国产精品综合色区在线观看 | 手机在线不卡av | 国产精品久久久久久久久久三级 | 日日骚网| 欧美大片一区 | 一级aaaa毛片 | 亚洲黄色在线免费观看 | 在线播放国产视频 | 亚洲精品www | 性色av网站| 国产伦一区二区三区视频 |