亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

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

QQ登錄

只需一步,快速開始

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

單片機(jī)可控電源Proteus仿真程序 電路涉及到A/D、D/A轉(zhuǎn)換

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
可控電源,電壓可在1.25伏到9伏之間設(shè)定,電路涉及到A/D、D/A轉(zhuǎn)換、矩陣鍵盤和LED顯示。PROTEUS仿真圖和代碼見附件。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. //#include<DAC0832.c>
  3. //#include<ADC0832.c>
  4. //#include <absacc.h>
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. //#define DAC0832 XBYTE[0xfffe]          
  8. /************I/O口定義*********/
  9. sbit CS=P2^3;         //ADC0832的片選端
  10. sbit CLK=P2^2;         //時(shí)鐘端
  11. sbit DIO=P2^1;         //數(shù)據(jù)輸入輸出端
  12. sbit  up=P2^7;
  13. sbit down=P3^0;
  14. sbit L1=P2^4;
  15. sbit L2=P2^5;
  16. sbit L3=P2^6;
  17. sbit WR2=P2^0;
  18. sbit LED1=P2^7;
  19. sbit LED2=P3^7;
  20. uint cdi=0,dy=0;
  21. uchar key=12,flag=0,h=0,m=0,l=0;
  22. uint ge,dian,xiao1,xiao2;
  23. uchar code table[]={        //共陽數(shù)碼管顯示定義
  24. 0x03,0x9f,0x25,0x0d,
  25. 0x99,0x49,0x41,0x1f,
  26. 0x01,0x09};
  27. void delay();
  28. uint A_D();
  29. void display();
  30. void DAC();
  31. void key_test();

  32. void delay(uchar i)   //i=1延遲1ms
  33. {
  34.     uchar a,b,c;
  35.     for(c=i;c>0;c--)
  36.         for(b=142;b>0;b--)
  37.             for(a=2;a>0;a--);
  38. }

  39. void vol_up()
  40. {
  41.          cdi+=1;
  42.          DAC();
  43.             delay(1);
  44.          dy=A_D()*9/5;
  45.          ge=dy/51;                // 計(jì)算整數(shù)部分
  46.          dian=(dy%51)*100/51;        //計(jì)算小數(shù)部分
  47.          xiao1=dian/10;          //取小數(shù)點(diǎn)后第一位
  48.          xiao2=dian%10;           //去小數(shù)點(diǎn)后第二位
  49. }

  50. void vol_down()
  51. {
  52.          cdi-=1;
  53.          DAC();
  54.             delay(1);
  55.          dy=A_D()*9/5;
  56.          ge=dy/51;                // 計(jì)算整數(shù)部分
  57.          dian=(dy%51)*100/51;        //計(jì)算小數(shù)部分
  58.          xiao1=dian/10;          //取小數(shù)點(diǎn)后第一位
  59.          xiao2=dian%10;           //去小數(shù)點(diǎn)后第二位
  60. }
  61. /*****  
  62. *函數(shù)名稱:   void dispaly1()                     
  63. *輸入?yún)?shù):  共0個(gè)參數(shù);  
  64. *輸出參數(shù):  共0個(gè)參數(shù);  
  65. *返回值:    無;  
  66. *需儲(chǔ)存的參數(shù): 共0個(gè)參數(shù);      
  67. *功能介紹:         顯示電壓值                     
  68. *****/
  69. void display()
  70. {   
  71.         if(flag==0)
  72.         {
  73.         P1=table[ge]&0xfe;         
  74.         P1=table[ge]&0xfe;                  //顯示整數(shù)位,與0x01是為了顯示小數(shù)點(diǎn)       
  75.         L1=1;                
  76.         delay(1);
  77.         L1=0;
  78.         P1=table[xiao1];                 //顯示小數(shù)點(diǎn)后第一位
  79.         L2=1;
  80.         delay(1);
  81.         L2=0;
  82.         P1=table[xiao2];          //顯示小數(shù)點(diǎn)后第二位,
  83.         L3=1;
  84.         delay(1);
  85.         L3=0;
  86.         }
  87.         else
  88.         {
  89.         P1=table[h]&0xfe;         
  90.         P1=table[h]&0xfe;                  //顯示整數(shù)位,與0x01是為了顯示小數(shù)點(diǎn)       
  91.         L1=1;                
  92.         delay(1);
  93.         L1=0;
  94.         P1=table[m];                 //顯示小數(shù)點(diǎn)后第一位
  95.         L2=1;
  96.         delay(1);
  97.         L2=0;
  98.         P1=table[l];          //顯示小數(shù)點(diǎn)后第二位,
  99.         L3=1;
  100.         delay(1);
  101.         L3=0;
  102.         }
  103. }


  104. /*****  
  105. *函數(shù)名稱:   uchar A_D()                     
  106. *輸入?yún)?shù):  共0個(gè)參數(shù);  
  107. *輸出參數(shù):  共0個(gè)參數(shù);  
  108. *返回值:    有;  
  109. *需儲(chǔ)存的參數(shù): 共0個(gè)參數(shù);      
  110. *功能介紹:         采集電壓                    
  111. *****/
  112. uint A_D()
  113. {
  114.         uint dat;
  115.         uchar i;
  116.         CS=1;        //一個(gè)轉(zhuǎn)換周期開始
  117.         CLK=0;        //為第一個(gè)脈沖準(zhǔn)備
  118.         CS=0;        //CS置0,片選有效
  119.         DIO=1;        //DIO置1,規(guī)定起始信號(hào)
  120.         CLK=1;        //第一個(gè)脈沖
  121.         CLK=0;        //第一個(gè)脈沖的下降沿,此前DIO必須是高電平
  122.         DIO=1;        //DIO置1,通道選擇信號(hào)
  123.         CLK=1;        //第二個(gè)脈沖,第2、3個(gè)脈沖下沉之前,DI必須跟別輸入
  124.                         //兩位數(shù)據(jù)用于選擇通道,這里選通道CH1
  125.         CLK=0;        //第二個(gè)脈沖下降沿
  126.         DIO=1;//DI置1,選擇通道1
  127.         CLK=1;//第三個(gè)脈沖
  128.         CLK=0;//第三個(gè)脈沖下降沿
  129.         DIO=1;//第三個(gè)脈沖下沉沿之后,輸入端DIO失去作用,應(yīng)置1
  130.         CLK=1;//第四個(gè)脈沖
  131.         for(i=0;i<8;i++)          //高位在前,循環(huán)8次讀出8位數(shù)據(jù)
  132.         {
  133.                 CLK=1;                   //第四個(gè)脈沖
  134.                 CLK=0;
  135.                 dat<<=1;                  //將下面存儲(chǔ)的低位數(shù)據(jù)右移
  136.                 dat|=(uchar)DIO; //將輸出數(shù)據(jù)DIO通過或運(yùn)算存儲(chǔ)在dat最低位
  137.         }
  138.         CS=1;//片選無效
  139.         return dat;
  140. }

  141. void DAC()
  142. {       
  143.         P0 = cdi;
  144.         WR2=0;
  145.         WR2=1;
  146. }

  147. /*****  
  148. *函數(shù)名稱:   void key_test()                     
  149. *輸入?yún)?shù):  共0個(gè)參數(shù);  
  150. *輸出參數(shù):  共0個(gè)參數(shù);  
  151. *返回值:    無;  
  152. *需儲(chǔ)存的參數(shù): 共0個(gè)參數(shù);      
  153. *功能介紹:         鍵盤掃描程序,采用行反轉(zhuǎn)法對(duì)鍵盤進(jìn)行掃描,確定鍵值                        
  154. *****/
  155. void key_test()
  156. {         
  157.         uchar temp=0;       
  158.                 delay(10);        //去抖
  159.                 if((P3&0x0f)!=0x0f)
  160.                 {
  161.                         temp=P3;
  162.                         P3=0x70;
  163.                         temp=temp|P3; //將行列值或即可得到每個(gè)鍵的編碼
  164.                         switch(temp)
  165.                         {
  166.                         case 0x3e:key=1;break; //1
  167.                         case 0x5e:key=2;break; //2
  168.                         case 0x6e:key=3;break; //3
  169.                         case 0x3d:key=4;break; //4
  170.                         case 0x5d:key=5;break; //5
  171.                         case 0x6d:key=6;break; //6
  172.                         case 0x3b:key=7;break; //7
  173.                         case 0x5b:key=8;break; //8
  174.                         case 0x6b:key=9;break; //9
  175.                         case 0x37:key=10;break;        //*
  176.                         case 0x57:key=0;break;        //0
  177.                         case 0x67:key=11;break;        //#
  178.                         default:key=12;
  179.                         }
  180.                         while((P3&0x70)!=0x70);        //判斷松手檢測(cè)
  181.                 }
  182. }
  183. void main()
  184. {
  185.         uint i=0;
  186.         uchar set_ok=0;
  187.         LED1=0;
  188.         DAC();
  189.         delay(1);
  190.         dy=A_D()*9/5;
  191.         ge=dy/51;                // 計(jì)算整數(shù)部分
  192.         dian=(dy%51)*100/51;        //計(jì)算小數(shù)部分
  193.         xiao1=dian/10;          //取小數(shù)點(diǎn)后第一位
  194.         xiao2=dian%10;           //去小數(shù)點(diǎn)后第二位
  195.         display();
  196.         while(1)
  197.         {               
  198.                          P3=0x0f;
  199.                  if((P3&0x0f)!=0x0f)
  200.                           { key_test();
  201.                                 if(key==10)                                   //設(shè)置鍵
  202.                                     {        LED1=1;
  203.                                             flag=1;
  204.                                             key=12;
  205.                                      }
  206.                                 else if(key==11)                   //確定鍵
  207.                                     {
  208.                                             flag=0;
  209.                                             LED1=0;
  210.                                             key=12;
  211.                                                   set_ok=1;
  212.                                      }
  213.                                                                                          
  214.                                 else if(key!=12)                         //其他數(shù)字鍵
  215.                                         {       
  216.                                            if(flag==1)
  217.                                            {
  218.                                               h=m;
  219.                                                   m=l;
  220.                                                   l=key;
  221.                                                   key=12;
  222.                                                 }
  223.                                          }                                               
  224.                             }

  225.                         if(set_ok==1)
  226.                         {
  227.                            set_ok=0;
  228.                            if(h>ge)
  229.                            {
  230.                               do
  231.                                   {vol_up();}
  232.                                   while(h>ge);
  233.                                 }
  234.                                 else if(h<ge)
  235.                                 {
  236.                                   do
  237.                                   {vol_down();}
  238.                                   while(h<ge);
  239.                                 }

  240.                                 if(m>xiao1)
  241.                            {
  242.                               do
  243.                                   {vol_up();}
  244.                                   while(m>xiao1);
  245.                                 }
  246.                                 else if(m<xiao1)
  247.                                 {
  248.                                   do
  249.                                   {vol_down();}
  250.                                   while(m<xiao1);
  251.                                 }
  252.                         }       
  253.                                                                
  254.                         display();
  255.                 }
  256. }
復(fù)制代碼

所有資料51hei提供下載:
可控電源.zip (62.27 KB, 下載次數(shù): 59)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表