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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

數控直流穩壓電源設計實驗報告 帶proteus仿真 源程序

  [復制鏈接]
跳轉到指定樓層
樓主
ID:137190 發表于 2016-9-9 20:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
proteus仿真基于單片機的數控穩壓電源

全部資料下載: proteus數控穩壓電源.zip (489.83 KB, 下載次數: 485)

下面是部分內容預覽:

數控穩壓電源設計報告

班級:電信10-1班   學號:3100718116              姓名:羅鋒

此次數控穩壓電源設計我主要通過51單片機控制輸出來控制電源的電壓和顯示。主流程圖如下。
主要輸出部分
加減置數部分,通過對4X4矩陣鍵盤的設置,可任意置數,加減, 自動步進,輸出波形。
預置數部分 通過撥碼開關來預置。
顯示部分 通過單片機對兩位數碼管進行動態掃描


數控0~9.9V輸出,11鍵為確定!1~10好鍵為1~0的數字
十二為三角波 13,14為加減,15自動步進


源程序:
  1. #include
  2. #include
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar aa,bb,cc,dd,jj,ii,jjj,iii,key,j;
  6. uchar time1=0;
  7. sbit led1=P2^0;
  8. sbit led2=P2^1;
  9. sbit ce=P2^4;
  10. #define timer0_count 0xfc18//定時器初值,設置time0 1/1000秒中斷一次
  11. const seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//數碼管的顯示
  12. const seg_point[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//有小數點的數碼管顯示
  13. uchar scan1;//用來分別顯示2個數碼管
  14. uchar scan2;
  15. uchar counter[2]={0xf1,0xf2};
  16. uchar vout=0; //j_片選,vout_電壓輸出

  17. static void timer0_initialize(void)//timer0的初始化
  18. //定時器的初始化程序
  19. {
  20.         EA=0;        //中斷控制器IE--停止接受中斷  
  21.                 TR0=0;        //停止計時
  22.                 TMOD=0x01;     //設置工作方式為1
  23.                 TL0=(timer0_count & 0x00ff);
  24.             TH0=(timer0_count>>8);  //設置time0 初值        
  25.                 PT0=1;    //設置timer0高優先級
  26.                 ET0=1;          //允許timer0中斷
  27.                 TR0=1;           //開始計時
  28.                 EA=1;           //開所有中斷
  29. }

  30. void delay(uint t) //tms的延時
  31. {   
  32.         uchar i;
  33.         uint j;
  34.     for(j=0;j<t;j++)
  35.                 for(i=0;i<40;i++);
  36. }
  37. void shuc(void)
  38. {         
  39.          uchar nn;
  40.          vout=2*(scan2*10+scan1);//輸出的數字量
  41.         P1=vout;
  42.         for(nn=0;nn<250;nn++)
  43.                 ;
  44.                 nn=0;//輸出是存在D/A轉換時間差所以要延時

  45. }  
  46. void shaom(void)
  47. {
  48.          P3=0x0f;//掃描是否有按鍵按下
  49.      if((P3&0x0f)!=0x0f)
  50.      dd=0;
  51.          else
  52.          dd=1;
  53. }
  54. void zdbj(void) //自動步進
  55. {
  56.         uchar rr;
  57.         jj=scan2;
  58.         ii=scan1;
  59.         shaom();
  60.         for(;jj<10;jj++)
  61.     {
  62.             for(;ii<10;ii++)
  63.                 {
  64.                          if(dd)
  65.                                  {
  66.                                          scan1=ii;
  67.                                          scan2=jj;
  68.                                         shuc();
  69.                                          for(rr=0;rr<250;rr++)
  70.                                         {
  71.                                                 shaom();
  72.                                                 if(dd)        
  73.                                                  delay(70);
  74.                                                 else
  75.                                                 break;
  76.                                         }
  77.                                          if(jj==9&&ii==9)
  78.                                          {
  79.                                                  ii=0;
  80.                                                  jj=0;
  81.                                          }
  82.         
  83.                                  }
  84.                         else
  85.                          {
  86.                                  jj=10;
  87.                                  ii=10;
  88.                          }
  89.                 }
  90.                 ii=0;
  91.     }
  92.         jj=0;
  93.         shaom();
  94.         for(;dd==0;)
  95.         shaom();

  96. }

  97. void sjb(void)        //三角波
  98. {
  99.         uchar max;
  100.         max=vout;
  101.         shaom();
  102.         for(;dd;)
  103.          {
  104.                    for(iii=0;iii<=max;iii=iii+2)
  105.                    {
  106.                           P1=iii;
  107.                         shaom();
  108.                          delay(10);
  109.                            if(dd==0)
  110.                  break;
  111.                 }
  112.                 if(dd==0)
  113.             break;
  114.                 for(;iii>0;iii=iii-2)
  115.                 {
  116.                         P1=iii;
  117.                         shaom();
  118.                         delay(5);
  119.                         if(dd==0)
  120.                         break;
  121.                 }
  122.                 if(dd==0)
  123.             break;
  124.           }
  125.            P1=max;
  126.          shaom();
  127.          for(;dd==0;)
  128.         shaom();
  129. }
  130. unsigned char keyscan(void)  //鍵盤掃描函數,使用行列反轉掃描法
  131. {
  132.          unsigned char cord_h,cord_l;//行列值中間變量
  133.         P3=0x0f;          //行線輸出全為0
  134.          cord_h=P3&0x0f;     //讀入列線值
  135.          if(cord_h!=0x0f)    //先檢測有無按鍵按下
  136.          {
  137.                   delay(70);        //去抖
  138.                   if((P3&0x0f)!=0x0f)
  139.                   {
  140.                     cord_h=P3&0x0f;  //讀入列線值
  141.                     P3=cord_h|0xf0;  //輸出當前列線值
  142.                     cord_l=P3&0xf0;  //讀入行線值                                                                                                   ;;
  143.                         while((P3&0xf0)!=0xf0);//等待松開并輸出
  144.                          {
  145.                                  time1=time1+1;
  146.                             return(cord_h+cord_l);//鍵盤最后組合碼值
  147.                          }
  148.                   }
  149.          }return(0);     //返回該值
  150. }
  151. void timer0_isr(void) interrupt 1   //timer0中斷
  152. //用于LED數碼管的動態顯示
  153. {
  154.         
  155.          TR0=0;    //停止時鐘0
  156.         P2=counter[j];
  157.         switch(j)
  158.         {
  159.                  case 0:P0=seg[scan1];break;                                                                                 
  160.                  case 1:P0=seg_point[scan2];break;
  161.                          default:break;        //j為其他情況是跳出循環
  162.         }
  163.         j++;
  164.         if(j==2)
  165.         j=0;
  166.     TL0=(timer0_count & 0x00ff);
  167.         TH0=(timer0_count>>8);  //設置time0 初值
  168.         TR0=1;         //開時鐘                                         
  169. }
  170.                                              
  171. void main(void)
  172. {                 
  173.         ce=0;
  174.         delay(5);   
  175.         scan1=(P3/2)%10;
  176.         scan2=P3/20;
  177.         ce=1;
  178.         delay(5);
  179.         shuc();

  180.         timer0_initialize();        //定時器初始化用于LED顯示
  181.     do
  182.    {     
  183.             key=keyscan();
  184.                 if(time1==1)
  185.                 switch( key)
  186.         {        
  187.                         
  188.                         case 0xee:aa=1;break;//1 按下相應的鍵顯示相對應的碼值
  189.                  case 0xed:aa=2;break;
  190.                  case 0xeb:aa=3;break;
  191.                  case 0xe7:aa=4;break;//4
  192.                  case 0xde:aa=5;break;//5
  193.                        case 0xdd:aa=6;break;//5
  194.                           case 0xdb:aa=7;break;//6
  195.                             case 0xd7:aa=8;break;//7
  196.                           case 0xbe:aa=9;break;//8
  197.                           case 0xbd:aa=0;break;//9
  198.                      case 0xbb:time1--;break;//確認
  199.                            case 0xb7: //三角波
  200.                         {
  201.                         time1=0;
  202.                         sjb();
  203.                         }
  204.                         break;
  205.                            case 0x7e:                //加
  206.                     {
  207.                                 time1=0;
  208.                              scan1++;
  209.                         if(scan1==10)
  210.                                 {
  211.                                         scan1=0;
  212.                                     scan2++;
  213.                                         if(scan2==10)
  214.                                         scan2=0;
  215.                                 }
  216.                                 shuc();
  217.                         }break;//c
  218.                           case 0x7d:                //減
  219.                     {
  220.                                 time1=0;
  221.                         scan1--;                                    
  222.                                 if(scan1==-1)
  223.                                 {         
  224.                                         scan1=9;
  225.                                         scan2--;
  226.                                         if(scan2==-1)
  227.                                         scan2=9;
  228.                                 }
  229.                                 shuc();
  230.                         }break;
  231.                               case 0x7b:                //自動步進
  232.                         {
  233.                                 time1=0;
  234.                     zdbj();
  235.                         }break;//e
  236.                           case 0x77: time1--;break;        
  237.                   }
  238.                                                            
  239.                 if(time1==2)
  240.                 switch( key)
  241.                  {        
  242.                
  243.                         case 0xee:bb=1;break;//0 按下相應的鍵顯示相對應的碼值
  244.                          case 0xed:bb=2;break;//1
  245.                           case 0xeb:bb=3;break;//2
  246.                      case 0xe7:bb=4;break;//3
  247.                      case 0xde:bb=5;break;//4
  248.                      case 0xdd:bb=6;break;//5
  249.                      case 0xdb:bb=7;break;//6
  250.                           case 0xd7:bb=8;break;//7
  251.                           case 0xbe:bb=9;break;//8
  252.                           case 0xbd:bb=0;break;//9
  253.                           case 0xbb:                //確認
  254.                         {
  255.                              scan2=0;
  256.                              scan1=aa;
  257.                                    time1=0;
  258.                                  shuc();
  259.                         }break;
  260.                           case 0xb7://三角波
  261.                         {
  262.                         time1=0;
  263.                         sjb();
  264.                         }
  265.                         break;
  266.                           case 0x7e:                //加
  267.                         {
  268.                                 time1=0;
  269.                         scan1++;
  270.                         if(scan1==10)
  271.                                 {
  272.                                         scan1=0;
  273.                                     scan2++;
  274.                                         if(scan2==10)
  275.                                         scan2=0;
  276.                                 }
  277.                                 shuc();
  278.                         }break;//c
  279.                      case 0x7d:                //減   
  280.                         {
  281.                                 time1=0;
  282.                               scan1--;                                    
  283.                                 if(scan1==-1)
  284.                                 {                  
  285.                                         scan1=9;
  286.                                         scan2--;
  287.                                         if(scan2==-1)
  288.                                          scan2=9;
  289.                                 }
  290.                                 shuc();
  291.                         }break;
  292.                           case 0x7b:                //自動步進
  293.                     {
  294.                                 time1=0;
  295.             zdbj();
  296.                         }break;//e
  297.                           case 0x77: time1--;break;
  298.                  }
  299.                 ;
  300.                 if(time1>2)
  301.                  switch( key)
  302.                  {        
  303.                
  304.                           case 0xee:time1--;break;//0 按下相應的鍵顯示相對應的碼值
  305.                           case 0xed:time1--;break;//1
  306.                           case 0xeb:time1--;break;//2
  307.                           case 0xe7:time1--;break;//3
  308.                           case 0xde:time1--;break;//4
  309.                           case 0xdd:time1--;break;//5
  310.                           case 0xdb:time1--;break;//6
  311.                           case 0xd7:time1--;break;//7
  312.                           case 0xbe:time1--;break;//8
  313.                           case 0xbd:time1--;break;//9
  314.                           case 0xbb:                //確認                 
  315.                         {   
  316.                                 time1=0;
  317.                             scan2=aa;
  318.                                   scan1=bb;
  319.                                   time1=0;
  320.                                 shuc();
  321.                         }break;
  322.                           case 0xb7://三角波
  323.                         {
  324.                         time1=0;
  325.                     sjb();
  326.                         }
  327.                         break;
  328.                           case 0x7e:                //加
  329.                     {
  330.                         scan1++;
  331.                         if(scan1==10)
  332.                                 {
  333.                                          scan1=0;
  334.                                     scan2++;
  335.                                         if(scan2==10)
  336.                                         scan2=0;
  337.                                 }
  338.                                 shuc();
  339.                         }break;//c
  340.                          case 0x7d:                //減
  341.                     {
  342.                             time1=0;
  343.                                 scan1--;                                    
  344.                                 if(scan1==-1)
  345.                                 {         
  346.                                         scan1=9;
  347.                                         scan2--;
  348.                                         if(scan2==-1)
  349.                                         scan2=9;
  350.                                 }
  351.                                 shuc();
  352.                         } break;
  353.                           case 0x7b:                //自動步進
  354.                     {
  355.                                 time1=0;
  356.                     zdbj();
  357.                         }break;//e
  358.                           case 0x77: time1--;break;
  359.             }         
  360.     }                       
  361.         while(1);
  362. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩1
回復

使用道具 舉報

沙發
ID:162103 發表于 2017-1-17 04:20 | 只看該作者
好東西,謝謝分享
回復

使用道具 舉報

板凳
ID:91162 發表于 2017-1-25 08:39 | 只看該作者
謝謝樓主分享!只是電壓表只能顯示2位,能顯示3位就好了
回復

使用道具 舉報

地板
ID:249545 發表于 2017-12-9 14:21 | 只看該作者
老師你好!請問輸出電壓范圍是多少呀?
回復

使用道具 舉報

5#
ID:147842 發表于 2018-1-15 12:12 | 只看該作者
謝謝分享
回復

使用道具 舉報

6#
ID:292583 發表于 2018-3-17 14:18 | 只看該作者

謝謝分享
回復

使用道具 舉報

7#
ID:318803 發表于 2018-4-29 16:21 | 只看該作者
這個很棒
回復

使用道具 舉報

8#
ID:321176 發表于 2018-5-3 13:45 來自手機 | 只看該作者
740014566 發表于 2018-4-29 16:21
這個很棒

能不能分享下數控直流穩壓電源,我下載不了
回復

使用道具 舉報

9#
ID:294062 發表于 2018-5-15 15:19 | 只看該作者
可以到30v嗎
回復

使用道具 舉報

10#
ID:350990 發表于 2018-6-13 11:55 | 只看該作者
感謝分享,謝兄弟
回復

使用道具 舉報

11#
ID:274090 發表于 2018-7-4 11:31 | 只看該作者
要是能用lcd1602顯示就好了
回復

使用道具 舉報

12#
ID:191910 發表于 2018-9-3 11:32 | 只看該作者
非常需要,謝謝               
回復

使用道具 舉報

13#
ID:114500 發表于 2019-1-7 12:41 | 只看該作者
謝謝分享!
回復

使用道具 舉報

14#
ID:452539 發表于 2019-1-8 12:26 | 只看該作者
這個很厲害,謝謝提供。謝謝論壇。
回復

使用道具 舉報

15#
ID:664551 發表于 2019-12-15 20:05 | 只看該作者
謝謝分享
回復

使用道具 舉報

16#
ID:524626 發表于 2020-4-18 15:18 來自手機 | 只看該作者
我想問下4×4按鍵為什么只能實現0.1加減計數呢
回復

使用道具 舉報

17#
ID:697551 發表于 2020-4-20 16:04 | 只看該作者
很好,非常感謝分享
回復

使用道具 舉報

18#
ID:840092 發表于 2020-11-7 11:25 | 只看該作者
756345338 發表于 2020-4-20 16:04
很好,非常感謝分享

能不能分享一下,下不了
回復

使用道具 舉報

19#
ID:964230 發表于 2021-11-14 12:10 來自手機 | 只看該作者
DSN文件用什么軟件打開
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲视频一区在线 | 亚洲综合日韩精品欧美综合区 | 翔田千里一区二区 | av中文字幕在线播放 | 在线观看国产视频 | 久久中文字幕一区 | 亚洲一区二区三区在线观看免费 | 蜜臀网 | 亚洲精品视频在线 | 国产欧美精品一区二区色综合 | 国产精品久久欧美久久一区 | 亚洲国产精品精华素 | 91久久| 国产黄a一级 | 成人在线一级片 | 国产免费自拍 | 亚洲一区二区三区免费 | 五月天婷婷激情 | 免费成人高清在线视频 | 天堂成人国产精品一区 | 成人亚洲视频 | 黄色国产在线视频 | 91在线电影| 日韩和的一区二在线 | 久久中文字幕一区 | 亚洲嫩草 | 999热精品 | 国产精品久久久久久久久久久久午夜片 | 国产精品毛片av一区 | www视频在线观看 | 综合自拍| 精品三级在线观看 | 观看av| 国产精品久久久久久久久久久久午夜片 | www.亚洲一区二区三区 | 亚洲视频免费一区 | 亚洲精品国产a久久久久久 午夜影院网站 | 国产偷自视频区视频 | h片在线免费观看 | 精品乱码一区二区 | 亚洲精品综合 |