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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機萬用表仿真及源碼 能測直流 交流電壓 電流 電容和電阻

  [復制鏈接]
跳轉到指定樓層
樓主
ID:140725 發表于 2017-3-30 17:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這是一個51單片機做的仿真設計,一個能測直流電壓 交流電壓 電流 電容和電阻的功能十分強大的單片機萬用表仿真分享給大家:

萬用表繼電器附操作圖 萬用表的仿真原理圖:


整個仿真文件界面截圖(各個電路模塊分開放置的):


單片機萬用表程序源碼:
  1. #include<reg52.h>
  2. #include"LCD.h"
  3. #include"Delay.h"
  4. #include"AD.h"
  5. #include<measure_define.h>
  6. #include<KEY_FUNCTION_DEFINE.H>
  7. #include<Cap_define.h>
  8. void ININT_int1(void);

  9. extern uchar key_number;
  10. extern uchar disp_value[5];
  11. void main(void)
  12. {         
  13.                 uchar num=0;
  14.                 s1=0;                                          
  15.                 s2=0;
  16.                 s3=0;
  17.                 key_number=1;                           //初始化按鍵的值為0
  18.         
  19.                 LcdInit();                                    //LCD1602有初始化  

  20.                 WriteCom(0x80+0x46);                //1602第二行顯示 value=00000v
  21.                 for(num=0;num<5;num++)                           
  22.                 {
  23.                         WriteData(disp_value[num]);
  24.                         Delay(10);        
  25.                 }         
  26.         ININT_int1();                                            //外部中斷1的初始化
  27.         Tmie0_init();                                                //定時器0的初始化
  28.                  
  29. while(1)
  30.         {
  31.                         if(key_number==1)                  //按鍵值為1
  32.                         {
  33.                                 DC_VOL_measure();          //直流電壓的測量
  34.                         }

  35.                         if(key_number==2)                  //按鍵值為2
  36.                         {
  37.                                 AC_VOL_measure();     //交流電壓的測量
  38.                         }

  39.                         if(key_number==3)                  //按鍵值為3
  40.                         {
  41.                                 Circuit_measure();          //電流的測量
  42.                         }                        
  43.                         
  44.                         if(key_number==4)                   //按鍵值為4
  45.                         {
  46.                                 Res_measure();                   //電阻的測量
  47.                         }                        
  48.                         
  49.                         if(key_number==5)                   //按鍵值為5
  50.                         {
  51.                                 WriteCom(0x01);                   //清屏
  52.                                 Cap_disp_init();           //電容顯示初始化
  53.                                  Cap_measure();                   //電容的測量
  54.                         }        /**/
  55.                         

  56.         }         
  57. }                 
復制代碼

下載:
單片機萬用表仿真及源碼.7z (1.66 MB, 下載次數: 910)

評分

參與人數 3黑幣 +15 收起 理由
1273880452 + 5 共享資料的黑幣獎勵!
zysadd + 5 很給力!
zzwk123456 + 5 很給力!

查看全部評分

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

使用道具 舉報

沙發
ID:140725 發表于 2017-3-30 17:02 | 只看該作者
這個萬用表實現交流電壓檢測的單片機程序代碼:
  1. #include<reg52.h>
  2. #include"Delay.h"
  3. #include<KEY_FUNCTION_DEFINE.H>
  4. #include<measure_define.h>
  5. #include"AD.h"
  6. #include"LCD.h"

  7. extern uchar disp_value[5];
  8. extern uchar key_number;
  9. extern uchar code  DC_disp3[];
  10. uchar code AC_disp[]="AC VOL Measure ";
  11. uchar code AC_disp2[]="value=        ";
  12. void AC_VOL_measure(void)                                //交流電壓測量函數
  13. {
  14.                 uchar  ADTemp,num;
  15.                 float ValueTemp;
  16.                 WriteCom(0x01);                                                        //清屏
  17.               WriteCom(0x80);                                                    //顯示
  18.                 for(num=0;AC_disp[num]!='\0';num++)
  19.                 {
  20.                         WriteData(AC_disp[num]);                        
  21.                         Delay(10);        
  22.                 }
  23.                 WriteCom(0x80+0x40);                                   //顯示
  24.                 for(num=0;AC_disp2[num]!='\0';num++)
  25.                 {
  26.                         WriteData(AC_disp2[num]);                        
  27.                         Delay(10);        
  28.                 }               
  29.                         
  30.                 do{                                                                     
  31.                              s1=0;                                         //選擇200v最高檔
  32.                             s2=0;
  33.                             s3=1;
  34.                                 Delay(50);
  35.                 ADTemp=ADSample(AC_VOL_adder);               
  36.                 if(ADTemp>253)                                          //當超過量程時,顯示為1
  37.                 {         WriteCom(0x80+0x46);                                //顯示
  38.                         for(num=0;DC_disp3[num]!='\0';num++)
  39.                         {
  40.                                 WriteData(DC_disp3[num]);
  41.                                          Delay(10);
  42.                         }
  43.                 }         
  44.                 else                 
  45.                         {
  46.                         ValueTemp=ValueConver(ADTemp);         //測量的電壓值轉換         
  47.                     ValueTemp=ValueTemp*100;                 //電壓值乘以檔位         
  48.                                 FloatToChar(ValueTemp);                 //電壓值轉換為字符串
  49.                            WriteCom(0x80+0x46);                        //第二行顯示電壓值         
  50.                                 for(num=0;num<5;num++)
  51.                                 {
  52.                                         WriteData(disp_value[num]);                        
  53.                                         Delay(10);        
  54.                                 }
  55.                          WriteData('V');
  56.                         WriteData(' ');                                
  57.                         
  58.                         }
  59.                                                                                                            
  60.                 }  while((ADTemp>20)&&(key_number==2));

  61.                  do
  62.                 {                                                                                 
  63.                             s1=0;                                                   //選擇20v檔
  64.                             s2=1;
  65.                             s3=0;
  66.                                 Delay(50);                                                
  67.                 ADTemp=ADSample(AC_VOL_adder);             //起動AD進行采樣
  68.                 ValueTemp=ValueConver(ADTemp);                 //AD進行轉換
  69.                 ValueTemp=ValueTemp*10;                                 //電壓乘以檔位         
  70.                 FloatToChar(ValueTemp);                                 //電壓轉換為字符串
  71.              WriteCom(0x80+0x46);                                 //第二行顯示所測電壓值
  72.                 for(num=0;num<5;num++)
  73.                 {
  74.                         WriteData(disp_value[num]);
  75.                                  Delay(10);
  76.                 }
  77.                 WriteData('V');
  78.                 WriteData(' ');                                         
  79.             } while((ADTemp>24)&&(ADTemp<253)&&(key_number==2));        
  80. do
  81.            {
  82.                             s1=1;                                                //選擇2V檔
  83.                             s2=0;
  84.                             s3=0;
  85.                                 Delay(50);
  86.                 ADTemp=ADSample(AC_VOL_adder);                //起動AD進行采樣
  87.                 ValueTemp=ValueConver(ADTemp);                 //電壓值轉換為字符串
  88.         FloatToChar(ValueTemp);
  89.            WriteCom(0x80+0x46);
  90.                 for(num=0;num<5;num++)
  91.                 {
  92.                         WriteData(disp_value[num]);
  93.                         Delay(15);        
  94.                 }
  95.                 WriteData('V');        
  96.                 WriteData(' ');
  97.          } while((ADTemp<253)&&(key_number==2));

  98. }
復制代碼
回復

使用道具 舉報

板凳
ID:140725 發表于 2017-3-30 17:04 | 只看該作者
電容檢測程序:
  1. #include<reg52.h>
  2. #include"Delay.h"
  3. #include"AD.h"
  4. #include"LCD.h"
  5. #include<Cap_define.h>
  6. extern uchar disp_value[5];
  7. extern uchar key_number;
  8. uchar code CAP_disp[]="CAP Measure ";
  9. uchar code CAP_disp2[]="value=     uF ";
  10. sbit NE555_3OUT=P3^2;                                                 //NE555的3腳
  11. sbit NE555_2IN=P3^5;                                                 //NE555的2腳
  12. uint Puls_width;                                         //高電平的寬度
  13. float Cap_value;                                         //電容值


  14. void Tmie0_init(void)
  15. {
  16.                 TMOD=0X09;                                                         //定時器0  定時方式1 ;GATE=1,只有INT0引腳為高且TR0置1時,定時器才開始工作
  17.                 TH0=0;
  18.                 TL0=0;
  19.                 TR0=1;
  20.                 ET0=0;
  21.                 EA=1;
  22. }
  23. void Cap_disp_init(void)
  24. {
  25.                 uchar num;
  26.                 WriteCom(0x80);                                                 //顯示電容測量字符串
  27.                 for(num=0;CAP_disp[num]!='\0';num++)
  28.                 {
  29.                         WriteData(CAP_disp[num]);                         
  30.                         Delay(10);       
  31.                 }
  32.                 WriteCom(0x80+0x40);                                 //顯示
  33.                 for(num=0;CAP_disp2[num]!='\0';num++)
  34.                 {
  35.                         WriteData(CAP_disp2[num]);                         
  36.                         Delay(10);       
  37.                 }
  38.        

  39. }

  40.                                                                                                                                                        
  41. void Cap_measure(void)                                                                //電容測量函數
  42. {       
  43.                 uchar num;
  44.                 uint temp0;
  45.         while(key_number==5)                                                                //按鍵是否為5;
  46.         {
  47.                 TH0=0;                                                                                        //重置定時器0的初值
  48.                 TL0=0;                                                                                        //模擬555的單穩態電路
  49.                 NE555_2IN=1;

  50.                 NE555_2IN=0;
  51.                 Delay(10);
  52.                 NE555_2IN=1;
  53.                 Delay(1000);
  54.        
  55.           temp0=TH0;
  56.                 Puls_width=(temp0<<8)|TL0;                                 //高電壓的寬度

  57.                 Cap_value=(Puls_width)/(1.1*1000);         //電容值的計算
  58.        
  59.                 FloatToChar(Cap_value);                                                                //將數值轉換為字型值
  60.                 WriteCom(0x80+0x46);                                                                 //顯示
  61.                         for(num=0;num<5;num++)
  62.                         {
  63.                                 WriteData(disp_value[num]);                         
  64.                                 Delay(10);       
  65.                         }
  66.                 WriteData('u');
  67.                 WriteData('F');               
  68.        
  69.         }       
  70.        
  71.        


  72. }       

復制代碼
回復

使用道具 舉報

地板
ID:140725 發表于 2017-3-30 17:05 | 只看該作者
萬用表檢測電流的源程序:
  1. #include<reg52.h>
  2. #include"Delay.h"
  3. #include<KEY_FUNCTION_DEFINE.H>
  4. #include<measure_define.h>
  5. #include"AD.h"
  6. #include"LCD.h"
  7. extern uchar disp_value[5];
  8. extern uchar key_number;
  9. extern uchar code  DC_disp3[];
  10. uchar code CC_disp[]="Current Measure  ";
  11. uchar code CC_disp2[]="value=        ";
  12. void Circuit_measure(void)
  13. {       uchar  ADTemp,num;
  14.                 float ValueTemp;
  15.                 WriteCom(0x01);                                                //清屏
  16.              WriteCom(0x80);                                             //顯示電流測量字符串
  17.          for(num=0;CC_disp[num]!='\0';num++)         
  18.                 {WriteData(CC_disp[num]);                         
  19.                 Delay(10);        }                                                                                                                                          
  20.                 WriteCom(0x80+0x40);                                                                  //顯示
  21.          for(num=0;CC_disp2[num]!='\0';num++)
  22.                 {WriteData(CC_disp2[num]);                         
  23.                         Delay(10);        }
  24.         do{                                                                            //        選擇2A檔
  25.                              s1=0;
  26.                             s2=0;
  27.                             s3=1;
  28.                                 Delay(5);
  29.                 ADTemp=ADSample(Circuit_adder);                   //AD開始采樣
  30.         if(ADTemp>253)
  31.                 { WriteCom(0x80+0x46);                                                                                //顯示
  32.                 for(num=0;DC_disp3[num]!='\0';num++)
  33.                 {WriteData(DC_disp3[num]);
  34.                         Delay(50);}
  35.                 }         
  36.         else
  37.                 {ValueTemp=ValueConver(ADTemp);                         //
  38.                  ValueTemp=ValueTemp*1000;                                       //                           
  39.                  FloatToChar(ValueTemp);                                            //浮點電壓值轉換為字符型數字
  40.               WriteCom(0x80+0x46);                                 //顯示的地址
  41.                  for(num=0;num<5;num++)
  42.                 {WriteData(disp_value[num]);                          //顯示數值
  43.                         Delay(50);        }
  44.                  WriteData('m');
  45.                  WriteData('A');        }                                                                                                 
  46.                 }  while((ADTemp>24)&&(key_number==3));         //采樣值大于200mA

  47.                 do{                                                                                  //選通200mA通道
  48.                             s1=0;
  49.                             s2=1;
  50.                             s3=0;
  51.                                 Delay(5);                                                  //讀采樣值
  52.                 ADTemp=ADSample(Circuit_adder);
  53.                 ValueTemp=ValueConver(ADTemp);
  54.                 ValueTemp=ValueTemp*100;                                         
  55.                 FloatToChar(ValueTemp);
  56.         //        LcdDisplayValue(Value);
  57.                 WriteCom(0x80+0x46);
  58.                 for(num=0;num<5;num++)
  59.                 {
  60.                         WriteData(disp_value[num]);
  61.                         Delay(50);       
  62.                 }
  63.                 WriteData('m');       
  64.                 WriteData('A');                         
  65.         }  while((ADTemp>24)&&(ADTemp<253)&&(key_number==3));        //采樣電壓值大于20mA小于200mA

  66.                    do{
  67.                             s1=1;
  68.                             s2=0;
  69.                             s3=0;
  70.                                 Delay(5);
  71.                 ADTemp=ADSample(Circuit_adder);
  72.                 ValueTemp=ValueConver(ADTemp);
  73.                 ValueTemp=ValueTemp*10;
  74.                 FloatToChar(ValueTemp);
  75. //          LcdDisplayValue(Value);
  76.            WriteCom(0x80+0x46);
  77.                 for(num=0;num<5;num++)
  78.                 {
  79.                         WriteData(disp_value[num]);
  80.                         Delay(50);       
  81.                 }
  82.                 WriteData('m');       
  83.                 WriteData('A');                                       
  84.         }  while((ADTemp<253)&&(key_number==3));//采樣電壓值小于20mA   
  85.        
  86. }       
復制代碼
回復

使用道具 舉報

5#
ID:113235 發表于 2017-4-17 16:44 | 只看該作者
好強大,不知能不能實際做成功呢
回復

使用道具 舉報

6#
ID:197660 發表于 2017-5-7 19:35 | 只看該作者
可以剛好是我想要的
回復

使用道具 舉報

7#
ID:138990 發表于 2017-5-23 08:36 來自手機 | 只看該作者
好東西
回復

使用道具 舉報

8#
ID:204053 發表于 2017-5-25 14:42 | 只看該作者
可以測負的電壓值嗎?
回復

使用道具 舉報

9#
ID:88550 發表于 2017-10-21 00:03 | 只看該作者
好強大,不知能不能實際做成功呢
回復

使用道具 舉報

10#
ID:227096 發表于 2017-10-21 12:43 | 只看該作者
感謝樓主分享,正好拿來學習下
回復

使用道具 舉報

11#
ID:239388 發表于 2017-10-21 17:03 來自手機 | 只看該作者
好強大
回復

使用道具 舉報

12#
ID:274478 發表于 2018-1-10 19:53 | 只看該作者
剛好要學習,謝謝樓主,功能真的很強大
回復

使用道具 舉報

13#
ID:196311 發表于 2018-1-10 22:44 | 只看該作者
DC好像沒有負壓功能,這是數字表都有的
回復

使用道具 舉報

14#
ID:275109 發表于 2018-1-12 10:58 | 只看該作者
請問有任務書嗎
回復

使用道具 舉報

15#
ID:275109 發表于 2018-1-12 12:59 | 只看該作者
電流不分交直流嗎
回復

使用道具 舉報

16#
ID:8222 發表于 2018-1-13 07:25 | 只看該作者
謝謝分享,這個ADC是什么芯片來的?
回復

使用道具 舉報

17#
ID:275109 發表于 2018-1-18 18:36 | 只看該作者
51單片機小白 發表于 2017-4-17 16:44
好強大,不知能不能實際做成功呢

不知道有沒有pcb圖
回復

使用道具 舉報

18#
ID:163044 發表于 2018-2-8 19:46 | 只看該作者

剛好要學習,謝謝樓主
回復

使用道具 舉報

19#
ID:273519 發表于 2018-3-24 18:04 | 只看該作者

下載后,這個程序不能編譯啊。。。
回復

使用道具 舉報

20#
ID:128402 發表于 2018-4-21 13:12 | 只看該作者
不能編譯是什么問題,一堆錯誤
回復

使用道具 舉報

21#
ID:314911 發表于 2018-4-24 14:31 | 只看該作者
大佬好!能不能加個頻率測量的功能啊!
回復

使用道具 舉報

22#
ID:273519 發表于 2018-4-25 14:22 | 只看該作者
1039629873 發表于 2018-4-21 13:12
不能編譯是什么問題,一堆錯誤

我改了一個月還沒改出來,放棄了。。。壓縮包里原來的hex居然可以用,神奇
回復

使用道具 舉報

23#
ID:69408 發表于 2018-9-8 14:55 來自手機 | 只看該作者
看看學習學習!
回復

使用道具 舉報

24#
ID:388870 發表于 2018-9-10 16:25 | 只看該作者
謝謝分享
回復

使用道具 舉報

25#
ID:183132 發表于 2018-10-29 15:28 | 只看該作者
Newdas 發表于 2018-4-25 14:22
我改了一個月還沒改出來,放棄了。。。壓縮包里原來的hex居然可以用,神奇

你好,我改好了,在每個用到變量的模塊(函數),先定義變量數據類型就可以。
回復

使用道具 舉報

26#
ID:424067 發表于 2018-11-10 14:46 | 只看該作者
y712323 發表于 2018-10-29 15:28
你好,我改好了,在每個用到變量的模塊(函數),先定義變量數據類型就可以。

請問能發份資料嗎?
回復

使用道具 舉報

27#
ID:424067 發表于 2018-11-10 15:05 | 只看該作者
大伙可以給一下資料么
回復

使用道具 舉報

28#
ID:432005 發表于 2018-11-23 19:00 | 只看該作者
測量精度怎么樣?
回復

使用道具 舉報

29#
ID:13074 發表于 2018-12-7 12:16 | 只看該作者
好強大學習了!
回復

使用道具 舉報

30#
ID:31094 發表于 2018-12-14 21:05 | 只看該作者
謝謝分享!!!
回復

使用道具 舉報

31#
ID:233587 發表于 2019-2-18 17:37 | 只看該作者
好事  牛逼一比
回復

使用道具 舉報

32#
ID:505572 發表于 2019-4-6 01:29 | 只看該作者

謝謝分享!!!
回復

使用道具 舉報

33#
ID:578835 發表于 2019-7-6 10:41 | 只看該作者
好厲害,膜拜樓主
回復

使用道具 舉報

34#
ID:539658 發表于 2019-11-2 20:43 | 只看該作者
厲害呀,值得學習
回復

使用道具 舉報

35#
ID:634898 發表于 2019-11-3 20:20 | 只看該作者
功能很強大  
回復

使用道具 舉報

36#
ID:408573 發表于 2020-5-5 11:34 | 只看該作者
太強了謝謝分享  學習到了~
回復

使用道具 舉報

37#
ID:741800 發表于 2020-5-12 16:46 | 只看該作者
很給力!
回復

使用道具 舉報

38#
ID:114240 發表于 2020-6-16 11:13 | 只看該作者
程序有錯誤啊!!

1111.png (125.29 KB, 下載次數: 157)

1111.png
回復

使用道具 舉報

39#
ID:782036 發表于 2020-6-17 14:19 | 只看該作者
非常給力
回復

使用道具 舉報

40#
ID:782710 發表于 2020-6-18 00:45 | 只看該作者
謝謝分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费a网站 | 国产成人免费视频 | 国产综合在线视频 | 国产专区免费 | 欧美综合国产精品久久丁香 | 国产免费一区 | 成人3d动漫一区二区三区91 | 中文一区| 亚洲视频在线一区 | 日本爱爱| 精品中文字幕久久 | 国产精品久久久久久吹潮 | 国产高清免费视频 | 黄色一级大片在线免费看产 | 久久国产三级 | 欧美日本韩国一区二区 | 国产一区二区三区久久久久久久久 | 欧美一级免费看 | 伊人网伊人网 | 在线免费看黄 | 国内精品免费久久久久软件老师 | 黄色片视频免费 | 免费一区 | 成人精品鲁一区一区二区 | 亚洲人久久 | 日韩三级在线 | 看羞羞视频| 国产传媒 | 亚洲国产一区二区视频 | 91操操操| 国产区在线观看 | 一区二区三区国产在线观看 | 午夜精品久久久久久久久久久久 | 狠狠干2020 | 91视频亚洲| 日日日操 | 射久久 | 日韩视频在线免费观看 | 看毛片网站 | 久久久久久国产精品免费免费狐狸 | 亚洲综合色视频在线观看 |