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

標題: 單片機PCF8591制作的電壓表和四種波形發生器(工程+仿真)分享 [打印本頁]

作者: miaomi_love    時間: 2019-6-14 23:06
標題: 單片機PCF8591制作的電壓表和四種波形發生器(工程+仿真)分享
分享一個好資料給大家學習單片機技術
工程包含PCF8591驅動文件,可以通過改變傳入參數輕松改變ADC四通道電壓測量,調用DAC函數產生DAC。
可以產生正弦波,方波,三角板和鋸齒波。
使用四個數碼管作為顯示,一個獨立按鍵作為模式切換。

PCF8591電壓表+四種波形發生器仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include <reg51.h>
  2. #include <PCF8591.h>
  3. #include <seg.h>

  4. sbit KEY = P3^7;

  5. unsigned char code sin_num[]={
  6. 0,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,
  7. 2,3,3,4,4,4,5,5,6,6,7,7,8,8,9,9,
  8. 10,10,11,12,12,13,14,15,15,16,17,18,18,19,20,21,
  9. 22,23,24,25,25,26,27,28,29,30,31,32,34,35,36,37,
  10. 38,39,40,41,42,44,45,46,47,49,50,51,52,54,55,56,
  11. 57,59,60,61,63,64,66,67,68,70,71,73,74,75,77,78,
  12. 80,81,83,84,86,87,89,90,92,93,95,96,98,99,101,102,
  13. 104,106,107,109,110,112, 113,115,116,118,120,121,123,124,126,128,
  14. 129,131, 132,134,135, 137, 139,140,142,143,145,146,148, 149,151,153,
  15. 154,156,157,159,160,162,163,165, 166,168,169,171,172,174,175,177,
  16. 178,180,181, 182,184,185,187,188,189,191,192,194,195,196,198,199,
  17. 200,201,203,204,205,206,208,209,210,211,213,214,215,216,217,218,
  18. 219,220,221,223,224,225,226,227,228,229,230,230,231,232,233,234,
  19. 235,236,237,237,238,239,240,240,241,242,243,243,244,245,245,246,
  20. 246,247,247,248,248,249,249,250,250,251,251, 251,252,252,253,253,
  21. 253,253,254,254,254,254,254,255,255,255,255, 255,255,255,255,255
  22. }; //這是正弦波上升半周期的采樣

  23. uchar Recv_Buffer;//數據接收緩沖
  24. uchar Voltage[]="0.000V  ";//數據分解為電壓x.xx
  25. float Vol_Am;                                                                //放大后的電壓值
  26. uchar key_ms;
  27. uchar mode;

  28. void delay(unsigned int x)//延時
  29. {
  30.         while(--x);
  31. }

  32. void key_pro()
  33. {
  34.         if(KEY == 0)        key_ms++;
  35.         if(key_ms        >= 5)
  36.         {
  37.                 if(KEY == 0)
  38.                 {
  39.                         key_ms = 0;
  40.                         mode++;
  41.                         if(mode >= 5)        mode = 0;
  42.                         while(!KEY);
  43.                 }
  44.         }
  45. }

  46. void DAC_Wave()
  47. {
  48.         int i;
  49.         switch(mode)
  50.   {
  51.    case 1: //三角波
  52.                         for(i=0;i<255;i++)
  53.                         {
  54.                                 DAC_PCF(i);
  55.                                 key_pro();
  56.                         }
  57.                         for(i=255;i>0;i--)
  58.                         {
  59.                                 DAC_PCF(i);
  60.                                 key_pro();
  61.                         }
  62.                         break;
  63.                         
  64.           case 2://方波
  65.                         DAC_PCF(0);
  66.                         delay(2500);
  67.                         DAC_PCF(0xff);
  68.                         delay(2500);
  69.                         break;
  70.                
  71.           case 3://三角波
  72.                         for(i=255;i>0;i--)
  73.                         {
  74.                                         DAC_PCF(i);
  75.                                         key_pro();
  76.                         }
  77.                         break;
  78.                
  79.           case 4: //正弦波 采用數組采樣值 波形更好
  80.                         for(i=0;i<255;i++)
  81.                         {
  82.                                 DAC_PCF(sin_num[i]);
  83.                                 key_pro();
  84.                         }
  85.                         for(i=255;i>=0;i--)
  86.                         {
  87.                                 DAC_PCF(sin_num[i]);
  88.                                 key_pro();
  89.                         }
  90.                         break;
  91.           default : DAC_PCF(0x00);//否則為0 防錯
  92.         }
  93. }

  94. // 轉換模數轉換后得到的值
  95. void Convert_To_Voltage(uchar val)
  96. {
  97.         Vol_Am = val;
  98.         Vol_Am = Vol_Am*5/255*1000;
  99.         Voltage[4]=(uint)Vol_Am%10+'0';
  100.         Voltage[3]=(uint)Vol_Am/10%10+'0';
  101.         Voltage[2]=(uint)Vol_Am/100%10+'0';
  102.         Voltage[0]=(uint)Vol_Am/1000%10+'0';
  103. }

  104. void dis_pro()
  105. {
  106.         if(mode == 0)
  107.         {
  108.                 ISendByte(0x00);
  109.                 Recv_Buffer=IRcvByte();
  110.                 Convert_To_Voltage(Recv_Buffer);
  111.                 seg_display((uint)Vol_Am);
  112.         }
  113.         else
  114.         {
  115.                 seg_display_One(mode);
  116.                 DAC_Wave();
  117.         }
  118. }

  119. void main()
  120. {
  121.         while(1)
  122.         {
  123.                 key_pro();
  124.                 dis_pro();
  125.         }
  126. }
復制代碼

所有資料51hei提供下載:
電壓表.zip (108.96 KB, 下載次數: 152)



作者: 2695154202    時間: 2019-6-15 12:59
好東西,謝謝分享。對我作用很大。
作者: sugarplum    時間: 2019-6-15 23:31
非常感謝!!!
作者: 超級困困    時間: 2019-7-2 18:02
請問你的protues是什么版本呀?我是8.0但打不開你的原理圖
作者: miaomi_love    時間: 2019-7-14 09:22
超級困困 發表于 2019-7-2 18:02
請問你的protues是什么版本呀?我是8.0但打不開你的原理圖

是 8.6 版本的 圖在別人那能打開的,你再試試~
作者: 威龍1410    時間: 2019-10-9 16:13
超級困困 發表于 2019-7-2 18:02
請問你的protues是什么版本呀?我是8.0但打不開你的原理圖

右鍵選擇“打開方式”選擇“proteus 8”,試試看,有驚喜喔
作者: ljg1998    時間: 2019-10-11 12:13
為什么打不開仿真?
作者: miaomi_love    時間: 2019-10-16 13:52
ljg1998 發表于 2019-10-11 12:13
為什么打不開仿真?

可能是版本比較新,我用的8.6的,你可以試試新版本的或者右鍵使用8.0的打開~




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美国产日韩一区二区三区 | 91精品久久久久久久久 | 在线观看免费高清av | 日韩1区2区| 在线观看日本高清二区 | 日韩视频中文字幕 | 免费观看成人鲁鲁鲁鲁鲁视频 | 色噜噜色综合 | 伊人久久综合 | 久久99精品久久久久久青青日本 | 日韩午夜精品 | 亚洲福利精品 | 色资源在线观看 | 久草免费在线视频 | 91免费高清| 91亚洲精品国偷拍自产在线观看 | 最新日韩精品 | 在线亚洲欧美 | av福利网站| 国产精品高清在线 | 国产成人精品一区二区三区四区 | 99久久精品视频免费 | 欧美在线一区二区三区 | 天堂亚洲| 欧美精品一区二区三区蜜桃视频 | 国产91久久久久蜜臀青青天草二 | 亚洲视频精品 | 亚洲国产成人精品女人久久久 | 五月天婷婷久久 | 久久爱综合 | 在线视频亚洲 | 日韩欧美天堂 | 久久成人国产精品 | 国产日韩欧美一区 | 秋霞a级毛片在线看 | 91免费看片 | 国产成人精品免高潮在线观看 | 美女一区二区在线观看 | 国产精品美女久久久久久免费 | 成人动慢 | 91成人在线 |