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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

單片機(jī)數(shù)控穩(wěn)壓電源的設(shè)計(jì)教程(詳細(xì)講解)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:248123 發(fā)表于 2017-11-20 20:09 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
一、系統(tǒng)綜述:
該項(xiàng)設(shè)計(jì)的主要目的是設(shè)計(jì)一種數(shù)控穩(wěn)壓電源。它利用單片機(jī)STC89C51作為主控芯片,控制數(shù)字/模擬轉(zhuǎn)換器(TLC5615)的輸出電壓的大小,經(jīng)過(guò)運(yùn)算放大器(OPA2107)與IRF9Z24N構(gòu)成負(fù)反饋系統(tǒng),從而輸出恒定電壓。最后通過(guò)電位器分壓將輸出信號(hào)反饋到運(yùn)算放大器(OPA2107)上,使輸出準(zhǔn)確度可以調(diào)節(jié)。此設(shè)計(jì)通過(guò)鍵盤(pán)電路與單片機(jī)連接,讀入控制數(shù)據(jù),利用軟件進(jìn)行判斷,從而起到控制電源輸出的作用。通過(guò)LCD1602(或LED數(shù)碼管)顯示數(shù)控電源的輸出電壓,實(shí)現(xiàn)簡(jiǎn)單的人機(jī)對(duì)話。該項(xiàng)設(shè)計(jì)具有設(shè)計(jì)簡(jiǎn)單,控制靈活,調(diào)節(jié)方便,攜帶方便、成本低等優(yōu)勢(shì),具有較強(qiáng)的實(shí)用性。
總體電路圖(數(shù)碼管版)
要求有短路保護(hù)的才有對(duì)應(yīng)的電路,此圖為完整版及帶短路保護(hù)的。
總體電路圖(液晶版)
要求有短路保護(hù)的才有對(duì)應(yīng)的電路,此圖為完整版及帶短路保護(hù)的。
圖中采用網(wǎng)絡(luò)標(biāo)號(hào)的方式,標(biāo)號(hào)相同的代表有電氣連接!
二、原理講解:
供電部分:
P2為接線柱,是整個(gè)系統(tǒng)的輸入電壓端口,整個(gè)數(shù)控電源有此輸入能量。D1、D2、D3、D4為四個(gè)二極管(in4007),起整流的作用,C6為濾波電容。整流濾波電路是使供電可以為交流,同時(shí)也可以用直流供電(交流供電不要超過(guò)20V,直流不要超過(guò)35V)。受電壓限制的主要是后級(jí)運(yùn)放耐壓、TL431耐壓以及7812的耐壓值。7812主要為保護(hù)7805,7805穩(wěn)出5V電壓共單片機(jī)供電使用。但是7805耐壓值是15V,所以前級(jí)要加7812保護(hù)7805。

晶振部分:
C2、C3、Y1(12MHZ)與單片機(jī)端口構(gòu)成震蕩電路,為51單片機(jī)提供時(shí)鐘。
復(fù)位電路:
RST連接單片機(jī)復(fù)位管腳,此電路及有上電復(fù)位功能,又有手動(dòng)復(fù)位功能。C1、R2構(gòu)成上電復(fù)位電路,上電瞬間C1導(dǎo)通,則RST為高電平,單片機(jī)將復(fù)位,電壓穩(wěn)定后C1儲(chǔ)存的電能通過(guò)R2對(duì)地釋放掉,單片機(jī)將正常運(yùn)行。同樣K2按下時(shí)RST為高電平,單片機(jī)復(fù)位,彈起來(lái)時(shí)RST為低電平,單片機(jī)正常運(yùn)行。

單片機(jī)部分:
單片機(jī)默認(rèn)選用STC89C51,同時(shí)兼容STC89C52、AT89S52、AT89S51、AT89C51等51單片機(jī)。
按鍵部分:
按鍵選用獨(dú)立按鍵,掃描時(shí)間短,使程序更簡(jiǎn)單且掃描時(shí)間更短,從而提高穩(wěn)定性。按鍵彈起時(shí)P20、P21、P22、P23為弱上拉狀態(tài),所以為高電平。按鍵按下時(shí)對(duì)應(yīng)的I/O口為低電平,可以被程序中的掃描函數(shù)檢測(cè)到。(寫(xiě)文檔時(shí)沒(méi)什么寫(xiě)的,可以在此講解自彈按鍵與自鎖按鍵區(qū)別和原理,在此朱老師省略。)

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

Vout為7腳輸出電壓,Vrefin為6腳參考電壓輸入端,N為單片機(jī)通過(guò)1、2、3管腳向TLC5615寫(xiě)入的數(shù)據(jù),1024是根據(jù)這是一片10位數(shù)模轉(zhuǎn)換而計(jì)算出來(lái)的(210=1024),最后乘以二是因?yàn)門(mén)LC5615內(nèi)部有2倍的增益放大器。
TLC5615內(nèi)部原理圖:
                         TLC5615邏輯時(shí)序圖:

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

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

單片機(jī)源程序如下:
  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點(diǎn)才啟動(dòng)報(bào)時(shí)
  522. {
  523.    if(alarmflag==1)//不按下設(shè)置按鍵時(shí)才有效
  524.    {
  525.   if(fen==0 && miao<2)
  526.   {
  527.    beep=0;//啟動(dòng)蜂鳴器
  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()//按任意鍵關(guān)閉鬧鈴函數(shù)
  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.   }
復(fù)制代碼

僅供參考

評(píng)分

參與人數(shù) 5黑幣 +31 收起 理由
2712798427 + 5 絕世好帖!非常詳細(xì),謝謝老師分享!
fengwq + 5 回帖助人的獎(jiǎng)勵(lì)!
哎呀哎呀 + 1
aifengdian + 5 很給力!
GUOXUAN + 15 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:249545 發(fā)表于 2017-11-23 15:30 | 只看該作者
設(shè)計(jì)教程非常好!
感謝老師不舍晝夜寫(xiě)文分享.
回復(fù)

使用道具 舉報(bào)

板凳
ID:287040 發(fā)表于 2018-3-2 20:02 來(lái)自手機(jī) | 只看該作者
正要學(xué)習(xí),感興分享
回復(fù)

使用道具 舉報(bào)

地板
ID:299955 發(fā)表于 2018-4-2 21:54 來(lái)自手機(jī) | 只看該作者
請(qǐng)教 這個(gè)最開(kāi)始的輸入是多少伏
回復(fù)

使用道具 舉報(bào)

5#
ID:291837 發(fā)表于 2018-4-3 14:35 | 只看該作者
謝謝分享!PMOS管腳反了。
回復(fù)

使用道具 舉報(bào)

6#
ID:248123 發(fā)表于 2018-4-4 15:41 | 只看該作者
1076986846 發(fā)表于 2018-4-2 21:54
請(qǐng)教 這個(gè)最開(kāi)始的輸入是多少伏

你可以看下橋式電路整流的分析  V輸入*0.9=V輸出
回復(fù)

使用道具 舉報(bào)

7#
ID:248123 發(fā)表于 2018-4-4 15:41 | 只看該作者
aifengdian 發(fā)表于 2018-4-3 14:35
謝謝分享!PMOS管腳反了。

哪個(gè)地方
回復(fù)

使用道具 舉報(bào)

8#
ID:302511 發(fā)表于 2018-4-5 20:10 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

9#
ID:169431 發(fā)表于 2018-5-2 23:22 | 只看該作者
請(qǐng)問(wèn)樓主源程序?qū)τ谝壕э@示和數(shù)碼管都一樣么?
回復(fù)

使用道具 舉報(bào)

10#
ID:169431 發(fā)表于 2018-5-3 15:18 | 只看該作者
請(qǐng)問(wèn)蜂鳴器用的是有源的吧?
回復(fù)

使用道具 舉報(bào)

11#
ID:320408 發(fā)表于 2018-5-16 13:10 | 只看該作者
您好,程序里引腳設(shè)置不對(duì)吧?  我下載程序就蜂鳴器報(bào)警
回復(fù)

使用道具 舉報(bào)

12#
ID:323092 發(fā)表于 2018-5-16 15:28 | 只看該作者
程序不對(duì)吧,做的是可調(diào)直流穩(wěn)壓電源,怎么程序里全都是年月日時(shí)分秒這些跟鬧鐘有關(guān)的
回復(fù)

使用道具 舉報(bào)

13#
ID:280753 發(fā)表于 2018-6-30 11:30 | 只看該作者
不錯(cuò),作為入門(mén)學(xué)習(xí)資料比較實(shí)用
回復(fù)

使用道具 舉報(bào)

14#
ID:83761 發(fā)表于 2018-12-21 13:43 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

15#
ID:86577 發(fā)表于 2019-1-21 15:14 | 只看該作者
應(yīng)該不錯(cuò),下載看看
回復(fù)

使用道具 舉報(bào)

16#
ID:471573 發(fā)表于 2019-1-23 15:50 | 只看該作者
這個(gè)很強(qiáng)大!!
回復(fù)

使用道具 舉報(bào)

17#
ID:3358 發(fā)表于 2019-1-24 18:05 | 只看該作者
學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

18#
ID:275723 發(fā)表于 2019-2-21 23:33 | 只看該作者
感謝分享,我學(xué)到了很多
回復(fù)

使用道具 舉報(bào)

19#
ID:125158 發(fā)表于 2019-3-23 12:33 | 只看該作者
aifengdian 發(fā)表于 2018-4-3 14:35
謝謝分享!PMOS管腳反了。

不是管腳反了,是選擇 N 型號(hào)的暢銷應(yīng)管了, 電路有  2處嚴(yán)重錯(cuò)誤!
回復(fù)

使用道具 舉報(bào)

20#
ID:125158 發(fā)表于 2019-3-23 12:34 | 只看該作者
電路中是選擇 N 型號(hào)的暢銷應(yīng)管了, 應(yīng)該是 P 型,電路有  2處嚴(yán)重錯(cuò)誤!希望作者改進(jìn)過(guò)來(lái)!
回復(fù)

使用道具 舉報(bào)

21#
ID:502198 發(fā)表于 2019-4-16 10:08 | 只看該作者
仿真圖畫(huà)不出來(lái)枯了有沒(méi)有大神救救我
回復(fù)

使用道具 舉報(bào)

22#
ID:513629 發(fā)表于 2019-4-17 14:35 | 只看該作者
真的謝謝老師·
回復(fù)

使用道具 舉報(bào)

23#
ID:513629 發(fā)表于 2019-4-17 14:37 | 只看該作者
@單片機(jī)。。。 發(fā)表于 2018-4-4 15:41
你可以看下橋式電路整流的分析  V輸入*0.9=V輸出

對(duì)d的
回復(fù)

使用道具 舉報(bào)

24#
ID:513629 發(fā)表于 2019-4-17 14:38 | 只看該作者
真的很好,謝謝老師。he很實(shí)用
回復(fù)

使用道具 舉報(bào)

25#
ID:420665 發(fā)表于 2019-4-21 00:20 | 只看該作者
謝謝樓主
回復(fù)

使用道具 舉報(bào)

26#
ID:520110 發(fā)表于 2019-4-24 01:32 | 只看該作者
請(qǐng)問(wèn)是用什么軟件仿真的?
回復(fù)

使用道具 舉報(bào)

27#
ID:518484 發(fā)表于 2019-4-28 17:32 來(lái)自手機(jī) | 只看該作者
謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

28#
ID:467558 發(fā)表于 2019-5-20 19:27 | 只看該作者
yhs598 發(fā)表于 2019-3-23 12:33
不是管腳反了,是選擇 N 型號(hào)的暢銷應(yīng)管了, 電路有  2處嚴(yán)重錯(cuò)誤!

您好,能說(shuō)明一下哪里有錯(cuò)誤么??
回復(fù)

使用道具 舉報(bào)

29#
ID:502482 發(fā)表于 2019-5-24 10:14 | 只看該作者
這個(gè)負(fù)反饋的部分在元器件庫(kù)找不到F9Z24N 可以用別的代替嗎
回復(fù)

使用道具 舉報(bào)

30#
ID:502482 發(fā)表于 2019-5-24 10:17 | 只看該作者
這個(gè)負(fù)反饋的部分F9Z24N這個(gè)型號(hào)的元器件找不到,可以用什么代替嗎
回復(fù)

使用道具 舉報(bào)

31#
ID:548651 發(fā)表于 2019-5-27 18:49 | 只看該作者
根據(jù)反饋系統(tǒng)的穩(wěn)定原理計(jì)算出輸出電壓的公式,如下:Vo=Vin×(RW/RWL)。我想問(wèn)一下,這個(gè)公式您是如何推導(dǎo)出來(lái)的?
回復(fù)

使用道具 舉報(bào)

32#
ID:491340 發(fā)表于 2019-5-29 08:23 | 只看該作者
很詳細(xì)的講解 正好研究一下 謝謝了
回復(fù)

使用道具 舉報(bào)

33#
ID:442397 發(fā)表于 2019-6-3 14:05 | 只看該作者
這是哪來(lái)的程序啊,,是電源的嗎?
回復(fù)

使用道具 舉報(bào)

34#
ID:591254 發(fā)表于 2019-8-1 11:12 | 只看該作者
感謝分享很好用
回復(fù)

使用道具 舉報(bào)

35#
ID:60026 發(fā)表于 2019-8-2 09:34 | 只看該作者
先記號(hào)一下!慢慢學(xué)習(xí)!謝謝分享!
回復(fù)

使用道具 舉報(bào)

36#
ID:272625 發(fā)表于 2019-8-13 21:47 | 只看該作者

如圖Q1接反,2腳和3腳掉換過(guò)來(lái)接就對(duì)了!

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

00.jpg
回復(fù)

使用道具 舉報(bào)

37#
ID:584661 發(fā)表于 2019-8-14 15:32 | 只看該作者
教材很好             值得學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

38#
ID:198286 發(fā)表于 2019-8-14 21:09 | 只看該作者
講的很詳細(xì),學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

39#
ID:166138 發(fā)表于 2019-8-20 17:17 | 只看該作者
程序是鬧鐘,和電源沒(méi)關(guān)系吧?檢查下是否對(duì)應(yīng)的上?
回復(fù)

使用道具 舉報(bào)

40#
ID:605388 發(fā)表于 2019-9-4 11:05 | 只看該作者
很詳細(xì),學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本午夜一区 | 妞干网视频 | 一区二区视频免费观看 | 最近中文字幕第一页 | 中文字幕av高清 | 免费黄色大片 | 亚洲精品一区在线 | 成人二区| 欧美中文字幕一区 | 日本三级全黄三级a | 欧美日韩国产不卡 | 免费天天干| 四虎成人免费视频 | 国产片侵犯亲女视频播放 | 婷婷久 | 狠狠亚洲 | 男人的天堂久久 | 永久免费在线观看 | 日韩一区精品 | 成人特区| wwwxxx国产 | 国产网站在线播放 | 日产精品久久久一区二区福利 | 天天干在线播放 | 亚洲成人自拍 | 五月婷婷 六月丁香 | 黄色电影在线免费观看 | av一区二区三区四区 | 97视频在线观看免费 | 亚洲不卡在线观看 | 久久99精品国产99久久6男男 | 色婷婷久久 | 亚洲一区二区三区在线视频 | 91网在线播放 | av入口| 男人天堂网站 | 日本精品一区二区三区视频 | 国产精品久久久久久久久久久久 | 97超碰成人 | 色婷婷综合在线观看 | 国产伦一区二区三区四区 |