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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7684|回復: 7
收起左側

單片機PCF8591制作的電壓表和四種波形發生器(工程+仿真)分享

  [復制鏈接]
ID:344053 發表于 2019-6-14 23:06 | 顯示全部樓層 |閱讀模式
分享一個好資料給大家學習單片機技術
工程包含PCF8591驅動文件,可以通過改變傳入參數輕松改變ADC四通道電壓測量,調用DAC函數產生DAC。
可以產生正弦波,方波,三角板和鋸齒波。
使用四個數碼管作為顯示,一個獨立按鍵作為模式切換。

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

單片機源程序如下:
  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)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:229772 發表于 2019-6-15 12:59 | 顯示全部樓層
好東西,謝謝分享。對我作用很大。
回復

使用道具 舉報

ID:399906 發表于 2019-6-15 23:31 | 顯示全部樓層
非常感謝!!!
回復

使用道具 舉報

ID:576564 發表于 2019-7-2 18:02 | 顯示全部樓層
請問你的protues是什么版本呀?我是8.0但打不開你的原理圖
回復

使用道具 舉報

ID:344053 發表于 2019-7-14 09:22 | 顯示全部樓層
超級困困 發表于 2019-7-2 18:02
請問你的protues是什么版本呀?我是8.0但打不開你的原理圖

是 8.6 版本的 圖在別人那能打開的,你再試試~
回復

使用道具 舉報

ID:425175 發表于 2019-10-9 16:13 來自手機 | 顯示全部樓層
超級困困 發表于 2019-7-2 18:02
請問你的protues是什么版本呀?我是8.0但打不開你的原理圖

右鍵選擇“打開方式”選擇“proteus 8”,試試看,有驚喜喔
回復

使用道具 舉報

ID:622212 發表于 2019-10-11 12:13 | 顯示全部樓層
為什么打不開仿真?
回復

使用道具 舉報

ID:344053 發表于 2019-10-16 13:52 | 顯示全部樓層
ljg1998 發表于 2019-10-11 12:13
為什么打不開仿真?

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久成人av电影 | 成人精品在线视频 | 一级黄色毛片免费 | 国产免费播放视频 | 久在草| 日本欧美黄色片 | 成人av网站在线观看 | 国产精品久久久久久一区二区三区 | 精品一区在线 | 欧美精品一二三区 | 国产精品1区| 麻豆久久久9性大片 | 日韩欧美黄色 | 另类专区亚洲 | 精品中文字幕视频 | 日韩免费在线 | 国产精品久久久久久久久久久免费看 | 精品欧美一区免费观看α√ | wwww.xxxx免费| 亚洲毛片在线观看 | 久久久久国产精品午夜一区 | 99久久久99久久国产片鸭王 | 亚洲精品区 | 中文字幕综合 | 中文字幕在线观看一区二区 | 精品一区二区三 | 国产日韩欧美二区 | 日韩欧美视频 | 天堂资源最新在线 | 日韩在线欧美 | 久久精品手机视频 | 日韩欧美中文字幕在线观看 | 99久久婷婷国产综合精品电影 | 成人一区二区视频 | 国产成人高清 | 日韩在线中文字幕 | 国产精品视频一区二区三区不卡 | 国产日韩精品一区二区三区 | 国产精品久久久久久久岛一牛影视 | 日本在线播放一区二区 | 国内精品一区二区 |