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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

DAC0832數控電源的單片機程序與PCB及原理圖

  [復制鏈接]
跳轉到指定樓層
樓主
Altium Designer畫的DAC0832數控電源原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機源程序如下:
  1. #include<reg52.h>
  2. typedef unsigned char uint8;
  3. typedef unsigned int  uint16;
  4. sbit V_ADD   = P3^4;           //電壓加
  5. sbit V_MIN   = P3^5;           //電壓減
  6. sbit V_SROTE = P3^6;           //讀取上次存儲的電壓
  7. sbit V_TJ    = P3^7;           //電壓調節開關
  8. /************EEPROM引腳*******************************/
  9. sbit SCL=P3^2;       //AT24C02的時鐘線
  10. sbit SDA=P3^3;       //AT24C02的數據線
  11. /*********************************************************/
  12. void delay(uint16 time);   //延時函數
  13. void led(uint8 duan,uint8 wei, uint8 dian);        //數碼管顯示函數
  14. void iic_start();                                // IIC的開始信號產生函數
  15. void iic_stop();                                // IIC的結束信號產生函數
  16. void iic_ack(bit sda1);                        // IIC的應答信號產生函數
  17. void iic_write(uint8 date);                // IIC通信,寫數據函數
  18. uint8 iic_read(uint8 sda2);                // 向EEPROM定入一個字節的數據
  19. void iic_store(uint8 date,uint8 adss);  //將date儲存到EEPROM指定的一個單元中
  20. uint8 iic_got(uint8 adss,uint8 sck);     // 將1個數據從EEPROM指定的地址中讀出
  21. void key();
  22. void display();
  23. /*********************************************************/
  24. uint8   led7[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
  25.                   0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //數碼管編碼

  26. uint8  dy_dx=0;      //電壓數字量大小
  27. uint16 V = 0;                 //電壓模擬量大小
  28. bit  v_tjv=0;                 //電壓調節開關指示變量
  29. void main()
  30. {


  31.   while(1)
  32.         {
  33.                   
  34.                 key();
  35.                   display();
  36.         }

  37. }


  38. /**********************************************
  39. 函數名:delay
  40. 行參  :time 延時基數
  41. 功能  :用while延時(6us單位)
  42. ************************************************/
  43. // 延時函數(6us單位)
  44. void delay(uint16 time)
  45. {
  46.           while(time--);

  47. }


  48. /************************************************************
  49. 函數名:led
  50. 行參  :duan--段碼 ,wei--位碼, dian--是否顯示點
  51. 功能  :數碼管顯示函數
  52. ***********************************************************/
  53. void led(uint8 duan,uint8 wei, uint8 dian)
  54. {
  55.   if(dian==1)
  56.     P1 = led7[duan]-0x80; //是否顯示點
  57.   else
  58.     P1 = led7[duan];
  59.   P2=~(1<<(wei-1));
  60.   delay(100);
  61.   P2 = 0XFF;
  62. }



  63. /**********************************************
  64. 函數名:iic_start
  65. 功能  :IIC的開始信號產生函數  
  66. ************************************************/
  67. /******************************************/
  68. void iic_start()
  69. {
  70. SDA=1;                  //可根據資料的開始時延來寫
  71. SCL=0;
  72. SCL=1;
  73. delay(1);
  74. SDA=0;
  75. delay(1);
  76. SCL=0;
  77. SDA=1;

  78. }

  79. /**********************************************
  80. 函數名:iic_stop
  81. 功能  :IIC的結束信號產生函數
  82. ************************************************/
  83. /****************************************/
  84. void iic_stop()
  85. {  
  86.   SDA=0;          //可根據資料的開始時延來寫
  87.   SCL=0;
  88.   SCL=1;
  89.   delay(1);
  90.   SDA=1;
  91.   delay(1);
  92.   SCL=0;
  93.   SDA=1;
  94.   

  95. }
  96. /**********************************************
  97. 函數名:iic_ack
  98. 行參  :sda1 要定入的指令
  99. 功能  :IIC的應答信號產生函數
  100. ************************************************/
  101. // sda1=0發送應答,sda1=1發送非應答
  102. void iic_ack(bit sda1)
  103. {
  104.    SCL=0;
  105.    SDA=sda1;
  106.    SCL=1;
  107.    delay(1);
  108.    SCL=0;
  109. }
  110. /**********************************************
  111. 函數名:iic_write
  112. 行參  :date 要定入的指令或數據
  113. 功能  :向EEPROM定入一個字節的數據
  114. ************************************************/
  115. //IIC通信,寫數據函數
  116. void iic_write(uint8 date)
  117. {
  118.    uint8 i;
  119.    SCL=0;            //接低時鐘線
  120.    for(i=0;i<8;i++)           //循環8次將8位數據送入EEPROM
  121.                 {
  122.                     if(date&0x80)        //循環取出數據的每一位
  123.                             SDA=1;            //將數據賦給EEPROM的數據線
  124.                         else
  125.                             SDA=0;            
  126.                     SCL=1;                        //拉高時鐘線
  127.                         date<<=1;                //左移一位
  128.                         SCL=0;                        //拉低時鐘線
  129.                 }
  130.    SDA=1;                                        //接收應答
  131.    SCL=0;
  132.    SCL=1;
  133.    delay(20);
  134.    SCL=0;
  135.   }
  136.   
  137. /**********************************************
  138. 函數名:iic_read
  139. 行參  :sda2 發送應答或非應答的選擇(0——非應答,1——應答)
  140. 功能  :向EEPROM定入一個字節的數據
  141. ************************************************/     
  142. //ATC2402讀數據
  143. uint8 iic_read(uint8 sda2)
  144. {
  145.   uint8 i,date=0;  //數據返回
  146.   SCL=0;                   //接低時鐘線
  147.   SDA=1;                   //拉高數據線
  148.   for(i=0;i<8;i++)
  149.                 {
  150.                    SCL=1;                //拉高時鐘線
  151.                    date=date<<1;  //左移一位
  152.                    delay(1);
  153.                    if(SDA)
  154.                    date=date|0x01; //從數據線上讀回數據賦給date
  155.                    SCL=0;                   //接低時鐘線
  156.                  }                                  
  157.   iic_ack(sda2);                   //發送應答
  158.   return date;                           //返回數據
  159. }

  160. /**********************************************
  161. 函數名:iic_store
  162. 行參  :date——要儲存的數據,adss——要存放的地址
  163. 功能  :將date儲存到EEPROM指定的一個單元中
  164. ************************************************/  
  165. void iic_store(uint8 date,uint8 adss)
  166. {
  167.   iic_start();           //發送開始信號
  168.   iic_write(0xa0);  //器件地址
  169.   iic_write(adss);  //數據要存放的地址
  170.   iic_write(date);  //存入數據
  171.   iic_stop();       //一定要寫這條停止指令。
  172.   
  173. }
  174. /**********************************************
  175. 函數名:iic_got
  176. 行參  :adss——要讀取的數據的地址,sck——為1表示發送應答,為0表示發送非應答
  177. 功能  :將1個數據從EEPROM指定的地址中讀出
  178. ************************************************/
  179. uint8 iic_got(uint8 adss,uint8 sck)
  180. {
  181.   uint8 date1;               //返回數據
  182.   iic_start();              //發送開始信號
  183.   iic_write(0xa0);    //器件地址
  184.   iic_write(adss);    //要讀取的數據的地址
  185.   iic_start();              //發送開始信號
  186.   iic_write(0xa1);    //器件地址(選擇讀)
  187.   date1=iic_read(sck);//讀取數據
  188.   if(!sck)
  189.      iic_stop();           //發送停止信號
  190.   return date1;                   //返回數據
  191. }

  192. void key()
  193. {
  194.   if(!V_TJ)
  195.           {
  196.                    while(!V_TJ)
  197.                           display();
  198.                  v_tjv=~v_tjv;
  199.           
  200.           }
  201.   if(!V_SROTE)
  202.       {
  203.                     while(!V_SROTE)
  204.                           display();
  205.                     dy_dx=iic_got(0x00,0);
  206.           }
  207.   if(v_tjv)
  208.       {
  209.                             if(!V_ADD&&dy_dx!=250)
  210.                                   {
  211.                                            dy_dx=dy_dx+2;
  212.                                          iic_store(dy_dx,0x00);
  213.                                          while(!V_ADD)
  214.                                                   display();
  215.                                          
  216.                                   
  217.                                   }
  218.                             else if(!V_MIN&&dy_dx!=0)
  219.                                     {
  220.                                            dy_dx=dy_dx-2;
  221.                                          iic_store(dy_dx,0x00);
  222.                                          while(!V_MIN)
  223.                                                   display();
  224.                                                                    
  225.                                   }
  226.           }
  227. }

  228. void display()
  229. {
  230.   P0=dy_dx;
  231.   V = dy_dx*4.8;
  232.   led(V/1000,1, 0);
  233.   led(V%1000/100,2, 1);
  234.   led(V%100/10,3, 0);
  235.   led(V%10,4, 0);

  236. }


復制代碼

所有資料51hei提供下載:
0907917shukongdianyuan.rar (5.23 MB, 下載次數: 304)


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

使用道具 舉報

沙發
ID:427869 發表于 2018-12-8 20:37 | 只看該作者
感謝樓主提供的資料,我下載下來學習參考下。
回復

使用道具 舉報

板凳
ID:298582 發表于 2019-1-4 21:32 | 只看該作者
我怎么沒找看到呢。。。感謝,學習一下
回復

使用道具 舉報

地板
ID:298582 發表于 2019-1-4 21:33 | 只看該作者

我怎么沒有找點看到,謝謝分享
回復

使用道具 舉報

5#
ID:239055 發表于 2019-6-11 19:30 來自手機 | 只看該作者
謝謝了,我也想弄一個數控電源
回復

使用道具 舉報

6#
ID:342010 發表于 2019-6-22 22:48 | 只看該作者
感謝樓主
回復

使用道具 舉報

7#
ID:541246 發表于 2019-7-14 15:03 | 只看該作者
感恩。
回復

使用道具 舉報

8#
ID:541246 發表于 2019-7-18 11:24 | 只看該作者
不錯的資料,有學習價值!
回復

使用道具 舉報

9#
ID:704663 發表于 2020-3-8 17:09 | 只看該作者
非常感謝樓主,很有意義的學習資料!
回復

使用道具 舉報

10#
ID:303894 發表于 2020-3-11 11:38 | 只看該作者
這個真好謝謝樓主
回復

使用道具 舉報

11#
ID:18797 發表于 2020-4-9 17:38 | 只看該作者
不可多得的學習資料,謝謝!!!
回復

使用道具 舉報

12#
ID:18797 發表于 2020-4-9 17:38 | 只看該作者
不可多得的學習單片機資料,謝謝!!
回復

使用道具 舉報

13#
ID:686387 發表于 2020-4-10 22:49 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

14#
ID:846847 發表于 2021-1-17 16:06 | 只看該作者
請問你這個有過流、短路保護嗎?
回復

使用道具 舉報

15#
ID:1062077 發表于 2023-3-15 20:52 | 只看該作者
感謝樓主的資料,很有幫助
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产日韩欧美 | 黄色在线观看国产 | 欧洲精品久久久久毛片完整版 | 欧美一区二区三区的 | 欧美日韩在线一区二区 | 亚洲精品在线观看网站 | 欧美日韩一区二区在线 | 国产成人精品a视频 | 狠狠草视频 | 欧美在线一区二区三区 | 精品美女在线观看视频在线观看 | 97人人澡人人爽91综合色 | a级大毛片 | 日本久久www成人免 成人久久久久 | 99这里只有精品视频 | 伊人av在线播放 | 影视先锋av资源噜噜 | 亚洲视频一区在线观看 | 日日摸夜夜添夜夜添特色大片 | www.精品一区 | 日本午夜一区二区三区 | 亚洲成人三级 | a在线视频 | 97久久久久久久久 | 亚洲精品黑人 | 在线观看国产三级 | 亚洲综合一区二区三区 | 亭亭五月激情 | 国产精品久久久久久久久久免费看 | 亚洲国产成人av好男人在线观看 | 九九精品影院 | 精品久久精品 | www久久国产| 一级片aaa | 国产一二三区精品视频 | 日韩视频精品在线 | zzzwww在线看片免费 | 99色在线视频 | 久久精品成人 | 午夜国产| 亚洲欧美综合精品久久成人 |