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

標題: 單片機數控穩壓電源的設計教程(詳細講解) [打印本頁]

作者: @單片機。。。    時間: 2017-11-20 20:09
標題: 單片機數控穩壓電源的設計教程(詳細講解)
一、系統綜述:
該項設計的主要目的是設計一種數控穩壓電源。它利用單片機STC89C51作為主控芯片,控制數字/模擬轉換器(TLC5615)的輸出電壓的大小,經過運算放大器(OPA2107)與IRF9Z24N構成負反饋系統,從而輸出恒定電壓。最后通過電位器分壓將輸出信號反饋到運算放大器(OPA2107)上,使輸出準確度可以調節。此設計通過鍵盤電路與單片機連接,讀入控制數據,利用軟件進行判斷,從而起到控制電源輸出的作用。通過LCD1602(或LED數碼管)顯示數控電源的輸出電壓,實現簡單的人機對話。該項設計具有設計簡單,控制靈活,調節方便,攜帶方便、成本低等優勢,具有較強的實用性。
總體電路圖(數碼管版)
要求有短路保護的才有對應的電路,此圖為完整版及帶短路保護的。
總體電路圖(液晶版)
要求有短路保護的才有對應的電路,此圖為完整版及帶短路保護的。
圖中采用網絡標號的方式,標號相同的代表有電氣連接!
二、原理講解:
供電部分:
P2為接線柱,是整個系統的輸入電壓端口,整個數控電源有此輸入能量。D1、D2、D3、D4為四個二極管(in4007),起整流的作用,C6為濾波電容。整流濾波電路是使供電可以為交流,同時也可以用直流供電(交流供電不要超過20V,直流不要超過35V)。受電壓限制的主要是后級運放耐壓、TL431耐壓以及7812的耐壓值。7812主要為保護7805,7805穩出5V電壓共單片機供電使用。但是7805耐壓值是15V,所以前級要加7812保護7805。

晶振部分:
C2、C3、Y1(12MHZ)與單片機端口構成震蕩電路,為51單片機提供時鐘。
復位電路:
RST連接單片機復位管腳,此電路及有上電復位功能,又有手動復位功能。C1、R2構成上電復位電路,上電瞬間C1導通,則RST為高電平,單片機將復位,電壓穩定后C1儲存的電能通過R2對地釋放掉,單片機將正常運行。同樣K2按下時RST為高電平,單片機復位,彈起來時RST為低電平,單片機正常運行。

單片機部分:
單片機默認選用STC89C51,同時兼容STC89C52、AT89S52、AT89S51、AT89C51等51單片機。
按鍵部分:
按鍵選用獨立按鍵,掃描時間短,使程序更簡單且掃描時間更短,從而提高穩定性。按鍵彈起時P20、P21、P22、P23為弱上拉狀態,所以為高電平。按鍵按下時對應的I/O口為低電平,可以被程序中的掃描函數檢測到。(寫文檔時沒什么寫的,可以在此講解自彈按鍵與自鎖按鍵區別和原理,在此朱老師省略。)

數碼管顯示部分:
(寫文檔時,可以在此講解共陽數碼管與共陰數碼管的區別和原理,在此朱老師省略。)
數碼管顯示采用四位一體共陽數碼管,這樣使電路更為簡單,只需四個8550三極管就可以將其驅動。P24、P25、P26、P27分別作為數碼管的位選端,控制是否選通哪一位數碼管。采用PNP型三極管,低電平導通,高電平截止(寫文檔時可以在此處講解8550三極管的參數等信息,朱老師在此省略)。R20、R30、R40、R50為三極管基極限流電阻,此電阻及能保護三極管又能保證三極管導通時處于完全導通狀態。R51為限流電阻,此電阻的大小直接決定數碼管的亮暗成都,在此選擇220歐姆、1/4色環電阻。數碼管的陰極端直接接單片機的P0口,而不需上拉電阻。STC89C51的單片機P0口為漏極開路,所以作為輸出時必須接上拉電路,而作為輸入時相當于數碼管作為上拉,所以不再需要上拉電阻,及簡化了電路又節省了成本。
數模轉換部分:(此為數控電壓數控調壓關鍵所在)
(寫文檔時沒什么寫的,可以在此講解TLC5615技術參數和原理,特別是轉換公式和數據協議,在此朱老師簡單介紹。)
數模轉換采用德州儀器的TLC5615,此為一片10位串行單5V電源DAC,直接電壓輸出。單片機P33、P32、P34分別連接TLC5615的時鐘端、片選端、數據端即可控制它輸出想要的電壓。此時TLC5615的6腳及參考電壓輸入端需接入2.5V的參考電壓。根據公式可知,當參考電壓為2.5V時,TLC5615將最大輸出5V電壓。
TL5615(DAC)電壓計算公式

Vout為7腳輸出電壓,Vrefin為6腳參考電壓輸入端,N為單片機通過1、2、3管腳向TLC5615寫入的數據,1024是根據這是一片10位數模轉換而計算出來的(210=1024),最后乘以二是因為TLC5615內部有2倍的增益放大器。
TLC5615內部原理圖:
                         TLC5615邏輯時序圖:

在給TLC輸入2.5V參考電壓的時候,我們用了TL431芯片。TL431是可控精密穩壓源。它的輸出電壓用兩個電阻就可以任意的設置到從Verf(2.5V)到36V范圍內的任何值。該器件的典型動態阻抗為0.2Ω,在很多應用中用它代替穩壓二極管。
同時用OPA2107作為跟隨器,減小2.5V基準電源的阻抗,再送入TLC5615 參考電壓端。
(寫文檔時,可以在此講解TL41技術參數OPA2107技術參數和原理和跟隨器電路原理)

MOS放大部分:
將上述TLC5615輸出的可調電壓送到誤差放大器(OPA2107)的反相端,通過PMOS管(F9Z24N)放大。同時在F9Z24N的輸出端用RW1(10K)電位器分壓,取一定比例的輸出電壓反饋到比較器正相端,構成一個負反饋系統(PMOS是反相放大,所以是負反饋)以保證輸出電壓的穩定。C5作為輸出濾波電容,濾掉輸出電壓紋波。根據反饋系統的穩定原理計算出輸出電壓的公式,如下:
設:Vo為輸出電壓,Vin為OPA2107的2腳輸入電壓,RWH為電位器上部分電阻,RWL為電位器下部分電阻,RW為電位器阻值。
Vo=Vin×(RW/RWL);
(寫文檔時,可以在此講解F9Z24N技術參數)
過流檢測及短路保護:
P1為電源輸出端,R11為電流檢測電阻,此電阻將電流變換成電壓。再通過U4A(OPA2107)反相放大一定的倍數。最后通過U4B與2.5V標準電平比較,若電壓大于2.5V則輸出低電平,送給單片機。單片機則認為過流就會控制TLC5615將輸出將為0V。這樣就起到了限流與短路保護的作用。
(寫文檔時,可以在此講解反相比例運算電路的原理)
報警電路:
此電路可以由單片機控制三極管(8550)的通斷來控制蜂鳴器的報警。當P36為高時,三極管不高通,為低時三極管導通蜂鳴器響。當過流或短路時,單片機切斷輸出,同時蜂鳴器報名。

單片機源程序如下:
  1. <font color="rgb(0, 0, 0)">#include<reg52.h>   
  2. #define uint unsigned int  
  3. #define uchar unsigned char  
  4. uchar a,miao,shi,fen,ri,yue,nian,week,key1n,key4n,key3n;alarmflag,temp;
  5. char amiao,afen,ashi;
  6. bit flag=0;
  7. #define yh 0x80
  8. #define er 0x80+0x40
  9. sbit rw=P3^6;
  10. sbit rs=P3^5;
  11. sbit en=P3^4;
  12. sbit IO=P1^1;
  13. sbit RST=P1^2;
  14. sbit SCLK=P1^0;
  15. sbit ACC0=ACC^0;
  16. sbit ACC7=ACC^7;
  17. //sbit key5=P1^3;
  18. sbit key1=P3^0;
  19. sbit key2=P3^1;
  20. sbit key3=P3^2;
  21. sbit key4=P3^3;
  22. sbit beep=P2^4;
  23. uchar code tab1[]={"20  -  -   "};
  24. uchar code tab2[]={"  :  :  "};
  25. uchar code tab3[]={" alarm setting: "};
  26. uchar code tab4[]={"Now is the time!"};
  27. uchar code tab5[]={"Get up quickly! "};
  28. uchar code tab6[]={"HAPPY EVERY DAY!"};
  29. uchar cnt;
  30. void delay(uint xms)
  31. {
  32. uint x,y;
  33. for(x=xms;x>0;x--)
  34. for(y=110;y>0;y--);
  35. }
  36. void write_1602com(uchar com)
  37. {
  38. rs=0;
  39. rw=0;
  40. P0=com;
  41. delay(1);
  42. en=1;
  43. delay(1);
  44. en=0;
  45. }
  46. void write_1602dat(uchar dat)
  47. {
  48. rs=1;
  49. rw=0;
  50. P0=dat;
  51. delay(1);
  52. en=1;
  53. delay(1);
  54. en=0;
  55. }
  56. void lcd_init()      
  57. {
  58.   write_1602com(0x38);
  59. write_1602com(0x08);  
  60. write_1602com(0x0c);  
  61. write_1602com(0x06);  
  62. write_1602com(0x01);
  63.      write_1602com(yh+1);
  64. for(a=0;a<14;a++)
  65. {
  66.     delay(5);
  67.      write_1602dat(tab1[a]);
  68. }
  69.   write_1602com(er+2);
  70.   for(a=0;a<8;a++)
  71. {
  72.   delay(5);
  73.   write_1602dat(tab2[a]);
  74. }
  75. }
  76. void write_byte(uchar dat)
  77. {
  78. ACC=dat;
  79. RST=1;
  80. for(a=8;a>0;a--)
  81. {
  82.   IO=ACC0;
  83.   SCLK=0;
  84.   SCLK=1;
  85.   ACC=ACC>>1;
  86. }
  87. }
  88. uchar read_byte()
  89. {
  90. RST=1;
  91. for(a=8;a>0;a--)
  92. {
  93.   ACC7=IO;
  94.   SCLK=1;
  95.   SCLK=0;
  96.   ACC=ACC>>1;
  97. }
  98. return(ACC);
  99. }
  100. void write_1302(uchar add,uchar dat)
  101. {
  102. RST=0;
  103. SCLK=0;
  104. RST=1;
  105. write_byte(add);
  106. write_byte(dat);
  107. SCLK=1;
  108. RST=0;
  109. }
  110. uchar read_1302(uchar add)
  111. {
  112. uchar temp;
  113. RST=0;
  114. SCLK=0;
  115. RST=1;
  116. write_byte(add);
  117. temp=read_byte();
  118. SCLK=1;
  119. RST=0;
  120. return(temp);
  121. }
  122. uchar BCD_Decimal(uchar bcd)
  123. {
  124. uchar Decimal;
  125. Decimal=bcd>>4;
  126. return(Decimal=Decimal*10+(bcd&=0x0f));
  127. }
  128. void ds1302_init()
  129. {
  130. RST=0;
  131. SCLK=0;
  132. write_1302(0x8e,0x00);
  133. write_1302(0x8e,0x80);
  134. }
  135. void write_sfm(uchar add,uchar dat)
  136. {
  137. uchar gw,sw;
  138. gw=dat%10;
  139. sw=dat/10;
  140. write_1602com(er+add);
  141. write_1602dat(0x30+sw);
  142. write_1602dat(0x30+gw);
  143. }
  144. void write_nyr(uchar add,uchar dat)
  145. {
  146.   uchar gw,sw;
  147.   gw=dat%10;
  148.   sw=dat/10;
  149.   write_1602com(yh+add);
  150.   write_1602dat(0x30+sw);
  151.   write_1602dat(0x30+gw);
  152. }
  153. void write_week(uchar week)
  154. {
  155. write_1602com(yh+0x0c);
  156. switch(week)
  157. {
  158.   case 1:write_1602dat('M');write_1602dat('O');write_1602dat('N');break;
  159.   case 2:write_1602dat('T');write_1602dat('U'); write_1602dat('E');break;
  160.   case 3:write_1602dat('W');write_1602dat('E');write_1602dat('D');break;
  161.   case 4:write_1602dat('T');write_1602dat('H');write_1602dat('U');break;
  162.   case 5:write_1602dat('F');write_1602dat('R');write_1602dat('T');break;
  163.   case 6:write_1602dat('S');write_1602dat('T');write_1602dat('A');break;
  164.   case 7:write_1602dat('S');write_1602dat('U');write_1602dat('N');break;
  165. }
  166. }
  167. void settime()
  168. {
  169. if(key4n==0)
  170. {
  171.   if(key1==0)
  172.     {
  173.    delay(9);
  174.    if(key1==0)
  175.    {
  176.        beep=0;//蜂鳴器短響一聲
  177.              delay(50);
  178.              beep=1;
  179.     alarmflag=0;
  180.     key1n++;
  181.     while(!key1);
  182.     switch(key1n)
  183.     {
  184.      case 1:TR0=0;
  185.            write_1602com(er+0x09);
  186.         write_1602com(0x0f);
  187.         temp=(miao)/10*16+(miao)%10;
  188.         write_1302(0x8e,0x00);
  189.         write_1302(0x80,0x80|temp);//miao
  190.         write_1302(0x8e,0x80);
  191.         break;
  192.      case 2:write_1602com(er+6);
  193.            break;
  194.         case 3:write_1602com(er+3);
  195.            break;
  196.         case 4:write_1602com(yh+0x0e);
  197.            break;
  198.      case 5:write_1602com(yh+0x0a);
  199.            break;
  200.      case 6:write_1602com(yh+0x07);
  201.         break;
  202.      case 7:write_1602com(yh+0x04);
  203.            break;
  204.      case 8:key1n=0;
  205.            write_1602com(0x0c);
  206.            alarmflag=1;      
  207.            TR0=1;
  208.         temp=(miao)/10*16+(miao)%10;
  209.         write_1302(0x8e,0x00);
  210.         write_1302(0x80,0x00|temp);
  211.         write_1302(0x8e,0x80);
  212.         break;
  213.    }
  214.   }
  215.   
  216. }
  217. if(key1n!=0)
  218. {
  219.   if(key2==0)
  220.   {
  221.    delay(10);
  222.    if(key2==0)
  223.    {
  224.     beep=0;//蜂鳴器短響一聲
  225.                 delay(50);
  226.                 beep=1;
  227.     while(!key2);
  228.     switch(key1n)
  229.     {
  230.      case 1:miao++;
  231.      if(miao==60)
  232.          miao=0;
  233.         write_sfm(0x08,miao);
  234.         temp=(miao)/10*16+(miao)%10;
  235.         write_1302(0x8e,0x00);
  236.         write_1302(0x80,temp);
  237.         write_1302(0x8e,0x80);
  238.         write_1602com(er+0x09);
  239.         break;
  240.      case 2:fen++;
  241.      if(fen==60)
  242.          fen=0;
  243.         write_sfm(0x05,fen);
  244.         temp=(fen)/10*16+(fen)%10;
  245.         write_1302(0x8e,0x00);
  246.         write_1302(0x82,temp);
  247.         write_1302(0x8e,0x80);
  248.         write_1602com(er+6);
  249.         break;
  250.      case 3:shi++;
  251.      if(shi==24)
  252.          shi=0;
  253.         write_sfm(2,shi);
  254.         temp=(shi)/10*16+(shi)%10;
  255.         write_1302(0x8e,0x00);
  256.         write_1302(0x84,temp);
  257.         write_1302(0x8e,0x80);
  258.         write_1602com(er+3);
  259.         break;
  260.      case 4:week++;
  261.      if(week==8)
  262.          week=1;
  263.         write_1602com(yh+0x0e);
  264.         write_week(week);
  265.         temp=(week)/10*16+(week)%10;
  266.         write_1302(0x8e,0x00);
  267.         write_1302(0x8a,temp);
  268.         write_1302(0x8e,0x80);
  269.         write_1602com(yh+0x0e);
  270.         break;
  271.      case 5:ri++;
  272.      if(ri==32)
  273.          ri=1;
  274.         write_nyr(9,ri);
  275.         temp=(ri)/10*16+(ri)%10;
  276.         write_1302(0x8e,0x00);
  277.         write_1302(0x86,temp);
  278.         write_1302(0x8e,0x80);
  279.         write_1602com(yh+10);
  280.         break;
  281.      case 6:yue++;
  282.      if(yue==13)
  283.          yue=1;
  284.         write_nyr(6,yue);
  285.         temp=(yue)/10*16+(yue)%10;
  286.         write_1302(0x8e,0x00);
  287.         write_1302(0x88,temp);
  288.         write_1302(0x8e,0x80);
  289.         write_1602com(yh+7);
  290.         break;
  291.      case 7:nian++;
  292.      if(nian==100)
  293.          nian=0;
  294.         write_nyr(3,nian);
  295.         temp=(nian)/10*16+(nian)%10;
  296.         write_1302(0x8e,0x00);
  297.         write_1302(0x8c,temp);
  298.         write_1302(0x8e,0x80);
  299.         write_1602com(yh+4);
  300.         break;
  301.     }
  302.    }
  303.   }
  304.   if(key3==0)
  305.   {
  306.    delay(10);
  307.    if(key3==0)
  308.    {
  309.     beep=0;//蜂鳴器短響一聲
  310.                 delay(50);
  311.        beep=1;
  312.     while(!key3);
  313.     switch(key1n)
  314.     {
  315.      case 1:miao--;
  316.      if(miao==-1)
  317.          miao=59;
  318.         write_sfm(0x08,miao);
  319.         temp=(miao)/10*16+(miao)%10;
  320.         write_1302(0x8e,0x00);
  321.         write_1302(0x80,temp);
  322.         write_1302(0x8e,0x80);
  323.         write_1602com(er+0x09);
  324.         break;
  325.      case 2:fen--;
  326.      if(fen==-1)
  327.          fen=59;
  328.         write_sfm(5,fen);
  329.         temp=(fen)/10*16+(fen)%10;
  330.         write_1302(0x8e,0x00);
  331.         write_1302(0x82,temp);
  332.         write_1302(0x8e,0x80);
  333.         write_1602com(er+6);
  334.         break;
  335.      case 3:shi--;
  336.      if(shi==-1)
  337.          shi=23;
  338.         write_sfm(2,shi);
  339.         temp=(shi)/10*16+(shi)%10;
  340.         write_1302(0x8e,0x00);
  341.         write_1302(0x84,temp);
  342.         write_1302(0x8e,0x80);
  343.         write_1602com(er+3);
  344.         break;
  345.      case 4:week--;
  346.      if(week==-0)
  347.          week=7;
  348.         write_1602com(yh+0x0c);
  349.         write_week(week);
  350.         temp=(week)/10*16+(week)%10;
  351.         write_1302(0x8e,0x00);
  352.         write_1302(0x8a,temp);
  353.         write_1302(0x8e,0x80);
  354.         write_1602com(yh+0x0e);
  355.         break;
  356.      case 5:ri--;
  357.      if(ri==0)
  358.          ri=31;
  359.         write_nyr(9,ri);
  360.         temp=(ri)/10*16+(ri)%10;
  361.         write_1302(0x8e,0x00);
  362.         write_1302(0x86,temp);
  363.         write_1302(0x8e,0x80);
  364.         write_1602com(yh+10);
  365.         break;
  366.      case 6:yue--;
  367.      if(yue==0)
  368.          yue=12;
  369.         write_nyr(6,yue);
  370.         temp=(yue)/10*16+(yue)%10;
  371.         write_1302(0x8e,0x00);
  372.         write_1302(0x88,temp);
  373.         write_1302(0x8e,0x80);
  374.         write_1602com(yh+7);
  375.         break;
  376.      case 7:nian--;
  377.      if(nian==-1)
  378.          nian=99;
  379.         write_nyr(3,nian);
  380.         temp=(nian)/10*16+(nian)%10;
  381.         write_1302(0x8e,0x00);
  382.         write_1302(0x8c,temp);
  383.         write_1302(0x8e,0x80);
  384.         write_1602com(yh+4);
  385.         break;
  386.     }
  387.    }
  388.   }
  389.    
  390. }  
  391.   }  
  392. }
  393. void setalarm()
  394. { if(flag==0)
  395.   {if(key1n==0)
  396.    
  397.    {if(key4==0)
  398.   {
  399.    delay(10);
  400.    if(key4==0)
  401.     {  
  402.      beep=0;
  403.      delay(50);
  404.      beep=1;
  405.      while(!key4);
  406.         write_1602com(0x80);
  407.      for(a=0;a<16;a++)
  408.      {
  409.       write_1602dat(tab3[a]);
  410.      }
  411.    if(key4n==0)
  412.    {
  413.     write_1602com(er+0x09);write_sfm(8,amiao);
  414.     write_1602com(er+6);write_sfm(5,afen);
  415.     write_1602com(er+3);write_sfm(2,ashi);
  416.    }
  417.     beep=0;key4n++;
  418.    switch(key4n)
  419.    {
  420.     case 1:
  421.            write_1602com(er+0x06);
  422.         write_1602com(0x0f);
  423.         temp=(fen)/10*16+(fen)%10;
  424.         write_1302(0x8e,0x00);
  425.         write_1302(0x82,0x82|temp);//miao
  426.         write_1302(0x8e,0x80);
  427.         break;
  428.     case 2:write_1602com(er+3);
  429.            break;
  430.     case 3: key4n=0;
  431.       write_1602com(0x0c);
  432.            alarmflag=1;      
  433.             lcd_init();
  434.         temp=(fen)/10*16+(fen)%10;
  435.         write_1302(0x8e,0x00);
  436.         write_1302(0x82,0x00|temp);
  437.         write_1302(0x8e,0x80);
  438.         break;
  439.    }
  440.   }
  441.   
  442. }
  443. if(key4n!=0)
  444. {
  445.   if(key2==0)
  446.   {
  447.    delay(10);
  448.    if(key2==0)
  449.    {
  450.     beep=0;//蜂鳴器短響一聲
  451.                 delay(50);
  452.                 beep=1;
  453.     while(!key2);
  454.     switch(key4n)
  455.     {
  456.      case 1:afen++;
  457.      if(afen==60)
  458.          afen=0;
  459.         write_sfm(0x05,afen);
  460.         temp=(fen)/10*16+(fen)%10;
  461.         write_1302(0x8e,0x00);
  462.         write_1302(0x82,temp);
  463.         write_1302(0x8e,0x80);
  464.         write_1602com(er+6);
  465.         break;
  466.      case 2:ashi++;
  467.      if(ashi==24)
  468.          ashi=0;
  469.         write_sfm(2,ashi);
  470.         temp=(shi)/10*16+(shi)%10;
  471.         write_1302(0x8e,0x00);
  472.         write_1302(0x84,temp);
  473.         write_1302(0x8e,0x80);
  474.         write_1602com(er+3);
  475.         break;
  476.   }
  477. }
  478.   }
  479.   if(key3==0)
  480.   {
  481.    delay(10);
  482.    if(key3==0)
  483.    {
  484.     beep=0;//蜂鳴器短響一聲
  485.                 delay(50);
  486.        beep=1;
  487.     while(!key3);
  488.     switch(key4n)
  489.     {
  490.      
  491.      case 1:afen--;
  492.      if(afen==-1)
  493.          afen=59;
  494.         write_sfm(5,afen);
  495.         temp=(fen)/10*16+(fen)%10;
  496.         write_1302(0x8e,0x00);
  497.         write_1302(0x82,temp);
  498.         write_1302(0x8e,0x80);
  499.         write_1602com(er+6);
  500.         break;
  501.      case 2:ashi--;
  502.      if(ashi==-1)
  503.          ashi=23;
  504.         write_sfm(2,ashi);
  505.         temp=(shi)/10*16+(shi)%10;
  506.         write_1302(0x8e,0x00);
  507.         write_1302(0x84,temp);
  508.         write_1302(0x8e,0x80);
  509.         write_1602com(er+3);
  510.         break;
  511.    }
  512.   }
  513.    
  514. }  
  515.   }
  516. }   
  517. }
  518.   }
  519. void timealarm()
  520. {
  521. if(shi>7)//大于7點才啟動報時
  522. {
  523.    if(alarmflag==1)//不按下設置按鍵時才有效
  524.    {
  525.   if(fen==0 && miao<2)
  526.   {
  527.    beep=0;//啟動蜂鳴器
  528.   }
  529.   else if(fen==30 && miao==5)
  530.   {
  531.      beep=0;
  532.   }
  533.   else beep=1;
  534.    }
  535. }
  536. }
  537. void init()
  538. {

  539. TMOD=0X01;
  540. EA=1;
  541. TH0=(65536-60000)/256;
  542. TL0=(65536-60000)%256;
  543. ET0=1;
  544. TR0=1;
  545. }
  546. void nz()
  547. {
  548. beep=0;
  549. delay(500);
  550. }
  551. void alarmoff()//按任意鍵關閉鬧鈴函數
  552. {
  553. if(flag==1)
  554. {

  555. if(key1==0||key2==0||key3==0||key4==0)
  556. {
  557. delay(10);
  558. if(key1==0||key2==0||key3==0||key4==0)
  559. {
  560. while(key1==0||key2==0||key3==0||key4==0)
  561. flag=0;
  562. lcd_init();
  563. }
  564. }
  565. }
  566. }
  567. void main()
  568. { beep=1;
  569. alarmflag=1;
  570. lcd_init();
  571. flag=0;
  572. ds1302_init();
  573. init();
  574.      
  575. delay(10);     
  576. while(1)
  577. {
  578.   timealarm();        
  579.   settime();  
  580.      if(flag==1)
  581.   {
  582.        write_1602com(yh);
  583.     for(a=0;a<16;a++)
  584.    {
  585.       delay(5);
  586.        write_1602dat(tab4[a]);
  587.    }
  588.     write_1602com(er);
  589.     for(a=0;a<16;a++)
  590.    {
  591.     delay(5);
  592.     write_1602dat(tab5[a]);
  593.    }
  594.   }  
  595.   else if(flag==0&&key1n==0&&key4n==0)      
  596.   {  
  597.        miao=BCD_Decimal(read_1302(0x81));  
  598.     fen=BCD_Decimal(read_1302(0x83));
  599.     shi=BCD_Decimal(read_1302(0x85));     
  600.     ri=BCD_Decimal(read_1302(0x87));
  601.     yue=BCD_Decimal(read_1302(0x89));   
  602.     week=BCD_Decimal(read_1302(0x8b));
  603.     nian=BCD_Decimal(read_1302(0x8d));   
  604.     write_sfm(8,miao);
  605.     write_sfm(5,fen);
  606.     write_sfm(2,shi);
  607.     write_nyr(9,ri);
  608.     write_nyr(6,yue);
  609.     write_nyr(3,nian);
  610.     write_week(week);
  611.   }
  612.   if((shi==ashi)&&(fen==afen))
  613.   {
  614.    if(0<miao&&miao<2)  
  615.       { nz();
  616.     flag=1;
  617.    }
  618.    
  619.   }  else  flag=0;beep=1;
  620.   setalarm();
  621.   alarmoff();
  622. }
  623.   }
復制代碼

僅供參考


作者: GUOXUAN    時間: 2017-11-23 15:30
設計教程非常好!
感謝老師不舍晝夜寫文分享.
作者: axminxie    時間: 2018-3-2 20:02
正要學習,感興分享
作者: 1076986846    時間: 2018-4-2 21:54
請教 這個最開始的輸入是多少伏
作者: aifengdian    時間: 2018-4-3 14:35
謝謝分享!PMOS管腳反了。
作者: @單片機。。。    時間: 2018-4-4 15:41
1076986846 發表于 2018-4-2 21:54
請教 這個最開始的輸入是多少伏

你可以看下橋式電路整流的分析  V輸入*0.9=V輸出
作者: @單片機。。。    時間: 2018-4-4 15:41
aifengdian 發表于 2018-4-3 14:35
謝謝分享!PMOS管腳反了。

哪個地方
作者: aa游蕩    時間: 2018-4-5 20:10
謝謝分享
作者: 吳圣中    時間: 2018-5-2 23:22
請問樓主源程序對于液晶顯示和數碼管都一樣么?

作者: 吳圣中    時間: 2018-5-3 15:18
請問蜂鳴器用的是有源的吧?

作者: hujialedeai    時間: 2018-5-16 13:10
您好,程序里引腳設置不對吧?  我下載程序就蜂鳴器報警
作者: life起床釘子戶    時間: 2018-5-16 15:28
程序不對吧,做的是可調直流穩壓電源,怎么程序里全都是年月日時分秒這些跟鬧鐘有關的
作者: 浮云半生    時間: 2018-6-30 11:30
不錯,作為入門學習資料比較實用
作者: WOFY    時間: 2018-12-21 13:43
謝謝分享
作者: wan2401463    時間: 2019-1-21 15:14
應該不錯,下載看看
作者: ifree8    時間: 2019-1-23 15:50
這個很強大!!!
作者: xiongzdd    時間: 2019-1-24 18:05
學習學習
作者: cmd9688    時間: 2019-2-21 23:33
感謝分享,我學到了很多
作者: yhs598    時間: 2019-3-23 12:33
aifengdian 發表于 2018-4-3 14:35
謝謝分享!PMOS管腳反了。

不是管腳反了,是選擇 N 型號的暢銷應管了, 電路有  2處嚴重錯誤!
作者: yhs598    時間: 2019-3-23 12:34
電路中是選擇 N 型號的暢銷應管了, 應該是 P 型,電路有  2處嚴重錯誤!希望作者改進過來!
作者: qing112233    時間: 2019-4-16 10:08
仿真圖畫不出來枯了有沒有大神救救我
作者: 搜易    時間: 2019-4-17 14:35
真的謝謝老師·

作者: 搜易    時間: 2019-4-17 14:37
@單片機。。。 發表于 2018-4-4 15:41
你可以看下橋式電路整流的分析  V輸入*0.9=V輸出

對d的

作者: 搜易    時間: 2019-4-17 14:38
真的很好,謝謝老師。he很實用

作者: 準備好行不    時間: 2019-4-21 00:20
謝謝樓主

作者: LJS0711    時間: 2019-4-24 01:32
請問是用什么軟件仿真的?
作者: 占學峰    時間: 2019-4-28 17:32
謝謝樓主分享
作者: 我是董學志    時間: 2019-5-20 19:27
yhs598 發表于 2019-3-23 12:33
不是管腳反了,是選擇 N 型號的暢銷應管了, 電路有  2處嚴重錯誤!

您好,能說明一下哪里有錯誤么??

作者: yayaya123456    時間: 2019-5-24 10:14
這個負反饋的部分在元器件庫找不到F9Z24N 可以用別的代替嗎
作者: yayaya123456    時間: 2019-5-24 10:17
這個負反饋的部分F9Z24N這個型號的元器件找不到,可以用什么代替嗎
作者: N1ckeyQu    時間: 2019-5-27 18:49
根據反饋系統的穩定原理計算出輸出電壓的公式,如下:Vo=Vin×(RW/RWL)。我想問一下,這個公式您是如何推導出來的?
作者: zyh12398    時間: 2019-5-29 08:23
很詳細的講解 正好研究一下 謝謝了
作者: zqbx123    時間: 2019-6-3 14:05
這是哪來的程序啊,,是電源的嗎?
作者: 123456@QQ    時間: 2019-8-1 11:12
感謝分享很好用

作者: FQ967    時間: 2019-8-2 09:34
先記號一下!慢慢學習!謝謝分享!
作者: 都市郎    時間: 2019-8-13 21:47
@單片機。。。 發表于 2018-4-4 15:41
哪個地方

如圖Q1接反,2腳和3腳掉換過來接就對了!

00.jpg (14.77 KB, 下載次數: 175)

00.jpg

作者: 侯鑫森    時間: 2019-8-14 15:32
教材很好             值得學習
作者: zxy2266    時間: 2019-8-14 21:09
講的很詳細,學習了
作者: ksen    時間: 2019-8-20 17:17
程序是鬧鐘,和電源沒關系吧?檢查下是否對應的上?
作者: 135151    時間: 2019-9-4 11:05
很詳細,學習了
作者: sunbear    時間: 2019-10-21 08:50
這是恒壓源還是恒流源
作者: ysandi    時間: 2019-10-21 10:31
sunbear 發表于 2019-10-21 08:50
這是恒壓源還是恒流源

這是鬧鐘。。。
作者: Hope2    時間: 2019-10-24 19:34
好極了
作者: 氣溫氣溫廢棄物    時間: 2019-10-24 22:47
吳圣中 發表于 2018-5-3 15:18
請問蜂鳴器用的是有源的吧?

蜂鳴器是有源的
作者: 氣溫氣溫廢棄物    時間: 2019-10-24 22:48
zqbx123 發表于 2019-6-3 14:05
這是哪來的程序啊,,是電源的嗎?

自己輸入打的代碼
作者: 氣溫氣溫廢棄物    時間: 2019-10-24 22:48
吳圣中 發表于 2018-5-2 23:22
請問樓主源程序對于液晶顯示和數碼管都一樣么?

一樣的,數碼管顯示的就是液晶現實的
作者: a25575703    時間: 2019-10-26 23:29
感謝版主的分享。
作者: yhl97    時間: 2020-1-2 23:36
請問這個功率是多少?
作者: xjyprc    時間: 2020-1-5 12:16
非常感謝,就是 不知道負載能力 怎么樣?調節電壓的范圍
作者: qxdqx    時間: 2020-1-12 12:27
學習學習.太好啦.謝謝!
作者: lingyuzhe2006    時間: 2020-10-27 10:39
感謝樓主無私奉獻
作者: zhyaangn    時間: 2020-11-9 16:08
有沒有電源的程序呀,急!!!
作者: 吳剛童    時間: 2021-1-21 11:21
頂一個。記號。下次用時可參考
作者: 雨晨的風    時間: 2021-1-22 10:34
設計教程非常好!
感謝師傅不舍晝夜寫文分享.
作者: 想學充電器    時間: 2021-9-15 21:28
xiongzdd 發表于 2019-1-24 18:05
學習學習

你好我想和你了解一些充電器單片機程序累的問題,可以抽出您的一點時間向您請教一下嗎

作者: Aizlna    時間: 2021-9-25 00:16
怎么我看起來是鬧鐘的程序呢?
作者: 點點點點1021    時間: 2021-12-8 16:54
你好你好,我是一名大學生,想看看你的51單片機設計穩壓源的資料,,想問問您能分享一下資料嗎
作者: 龍小白    時間: 2023-9-6 11:55
下載了好好學習,感謝分享
作者: goldenman28    時間: 2023-9-12 10:46
thanks fo rsharing
作者: tnovicet    時間: 2023-9-13 09:10

程序不對,和電源沒關系 !
作者: liushiming82    時間: 2024-1-8 22:08
樓主,你如何通過輸出電壓控制輸出電壓呢
作者: tsts022    時間: 2024-1-12 17:55
有空做個試試 感謝分享這么好的資料




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 九九99久久 | 一级黄色毛片免费 | 成人亚洲在线 | 国产一区久久精品 | 久久精品小短片 | 色播久久久 | 国产精品色婷婷久久58 | 狠狠干五月天 | 日韩一区二区三区在线视频 | 熟女毛片 | 久久精品视频亚洲 | 午夜三级在线观看 | 黄色欧美 | 区一区二在线观看 | 蜜桃视频一区二区三区 | 国产成人高清视频 | 亚洲免费在线 | 亚洲欧美激情精品一区二区 | 久久国产亚洲 | 不卡在线视频 | 99爱在线观看 | 成人国产毛片 | 国产草草视频 | 国产精品欧美精品 | 国产精品亚洲一区二区三区在线 | 国产精品一区二区在线 | 亚洲国产精品成人综合久久久 | 国产一区中文字幕 | 国产小视频在线 | 日韩在线日韩 | 成人免费网视频 | 欧美黄色小视频 | 在线免费黄色小视频 | 成人免费视频在线观看 | 国产人久久人人人人爽 | 在线一区 | 国产一区二区三区四区三区四 | 欧美群妇大交群中文字幕 | 日韩成人一区 | 国产一二三区电影 | 天天天天操 |