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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機做的萬用表仿真 功能很全面

[復制鏈接]
跳轉到指定樓層
樓主
51單片機萬用表仿真原理圖:


萬用表直流電壓測量程序:
  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. uchar code DC_disp[]="DC VOL Measure ";
  10. uchar code DC_disp2[]="value=        ";
  11. uchar code DC_disp3[]="1          ";
  12. sbit Buzz=P3^7;
  13. void DC_VOL_measure(void)                        //直流電壓測量函數
  14. {   uchar  ADTemp,num;
  15.         float ValueTemp;
  16.         WriteCom(0x01);        
  17.            WriteCom(0x80);                                                                 //顯示
  18. for(num=0;DC_disp[num]!='\0';num++)
  19.                 {
  20.                 WriteData(DC_disp[num]);                        
  21.                 Delay(10);        
  22.                 }               
  23.                 WriteCom(0x80+0x40);                                                                 //顯示
  24. for(num=0;DC_disp2[num]!='\0';num++)
  25.                 {
  26.                         WriteData(DC_disp2[num]);                        
  27.                         Delay(10);        
  28.                 }
  29.         do{                                                                                                             //高電壓選擇端,20V~200V電壓選擇測量
  30.                                              s1=0;
  31.                                             s2=0;
  32.                                             s3=1;
  33.                                                 Delay(10);
  34.                         ADTemp=ADSample(DC_VOL_adder);                        //直流電壓的采樣
  35.                         if(ADTemp>253)
  36.                         {        Buzz=0;
  37.                             WriteCom(0x80+0x46);                                                                                //顯示
  38.                                 for(num=0;DC_disp3[num]!='\0';num++)
  39.                                         {WriteData(DC_disp3[num]);
  40.                                                          Delay(10);
  41.                     }
  42.                         
  43.                           }         
  44.                  else
  45.                                         {   
  46.                                           ValueTemp=ValueConver(ADTemp);                         //采樣值轉換為對應的電壓值
  47.                                     ValueTemp=ValueTemp*100;                                                 //電壓值乘以對應的比例值
  48.                                                 FloatToChar(ValueTemp);                                                         //電壓值轉換為字符型
  49.                         
  50.                                            WriteCom(0x80+0x46);                                                                 //顯示
  51.                                                 for(num=0;num<5;num++)
  52.                                                 {
  53.                                                         WriteData(disp_value[num]);                        
  54.                                                         Delay(10);        
  55.                                                 }
  56.                                           WriteData('V');
  57.                                           WriteData(' ');               
  58.                                         }
  59.                         }  while((ADTemp>25)&&(key_number==1));
  60.                

  61.                  do                                                                                                                                                        //中端電壓選擇端,4V~40V電壓選擇端
  62.                 {                                                                                 
  63.                                                     s1=0;
  64.                                                     s2=1;
  65.                                                     s3=0;
  66.                                                         Delay(50);                                                
  67.                                         ADTemp=ADSample(DC_VOL_adder);                                 //直流電壓的采樣
  68.                                         ValueTemp=ValueConver(ADTemp);                                 //采樣值轉換為對應的電壓值
  69.                                         ValueTemp=ValueTemp*10;                                                                  //電壓值乘以對應的比例值
  70.                                         FloatToChar(ValueTemp);                                                                 //電壓值轉換為字符型
  71.                                 
  72.                                         WriteCom(0x80+0x46);                                                                                //顯示
  73.                                         for(num=0;num<5;num++)
  74.                                         {
  75.                                                 WriteData(disp_value[num]);
  76.                                                          Delay(10);
  77.                                         }
  78.                                         WriteData('V');
  79.                                         WriteData(' ');                        
  80.         } while((ADTemp>25)&&(ADTemp<253)&&(key_number==1));        

  81.                   
  82.                   do                                                                                                                                         //小端電壓選擇端,0~4V電壓選擇端
  83.            {
  84.                                                             s1=1;
  85.                                                             s2=0;
  86.                                                             s3=0;
  87.                                                                 Delay(10);
  88.                                                 ADTemp=ADSample(DC_VOL_adder);                                //直流電壓的采樣
  89.                                                 ValueTemp=ValueConver(ADTemp);                                 //采樣值轉換為對應的電壓值
  90.                                        
  91.                                                 FloatToChar(ValueTemp);                                                                //電壓值轉換為字符型
  92.                                 
  93.                                            WriteCom(0x80+0x46);                                                                   //顯示
  94.                                                 for(num=0;num<5;num++)
  95.                                                 {
  96.                                                         WriteData(disp_value[num]);
  97.                                                         Delay(10);        
  98.                                                 }
  99.                                                 WriteData('V');        
  100.                                                 WriteData(' ');
  101.         } while((ADTemp<253)&&(key_number==1));

  102. }
復制代碼


  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 RES_disp[]="RES Measure    ";
  11. uchar code RES_disp2[]="value=        ";        
  12.         
  13. void Res_measure(void)
  14. {
  15.                 uchar  ADTemp,num;
  16.                 float ValueTemp;
  17.                 WriteCom(0x01);         //清屏
  18.         WriteCom(0x80);                                                                 //顯示
  19.                 for(num=0;RES_disp[num]!='\0';num++)
  20.                 {
  21.                         WriteData(RES_disp[num]);                        
  22.                         Delay(10);        
  23.                 }
  24.                 WriteCom(0x80+0x40);                                                                 //顯示
  25.                 for(num=0;RES_disp2[num]!='\0';num++)
  26.                 {
  27.                         WriteData(RES_disp2[num]);                        
  28.                         Delay(10);        
  29.                 }                                

  30.         do{                                                                     //先選通20K通道
  31.                              s1=0;
  32.                             s2=0;
  33.                             s3=1;
  34.                                 Delay(50);
  35.                 ADTemp=ADSample(Res_adder);                                     //讀采樣值
  36.             if(ADTemp>253)
  37.                         {         WriteCom(0x80+0x46);                                //顯示
  38.         for(num=0;DC_disp3[num]!='\0';num++)
  39.                                         {
  40.                                                 WriteData(DC_disp3[num]);
  41.                                                          Delay(50);
  42.                                         }
  43.                 }
  44.                 else        
  45.                 {
  46.                                 ValueTemp=ValueConver(ADTemp);                 //采樣值0~255轉換為電壓值0~2v
  47.                                 ValueTemp=ValueTemp/2        ;                         //電壓轉換為電阻值
  48.                                 ValueTemp=ValueTemp*20000;                         //電阻值乘以對應的檔位
  49.                                 FloatToChar(ValueTemp);                                 //浮點電壓值轉換為字符型數字
  50.                            WriteCom(0x80+0x46);                                      //顯示的地址
  51.                                 for(num=0;num<5;num++)
  52.                                 {
  53.                                         WriteData(disp_value[num]);                //顯示數值
  54.                                         Delay(10);        
  55.                                 }        
  56.                                 WriteData('R');
  57.                                 WriteData(' ');                                                                                       
  58.                         
  59.                 }

  60.         }  while((ADTemp>25)&&(key_number==4));                //采樣電壓值大于0.2V

  61.         do{                                                                                  //選通2K通道
  62.                                     s1=0;
  63.                                     s2=1;
  64.                                     s3=0;
  65.                                         Delay(50);                                                  //讀采樣值
  66.                         ADTemp=ADSample(Res_adder);
  67.                         ValueTemp=ValueConver(ADTemp);                         //采樣值0~255轉換為電壓值0~2v
  68.                         ValueTemp=ValueTemp/2;                                        //電壓轉換為電阻值
  69.                         ValueTemp=ValueTemp*2000;                        //電阻值乘以對應的檔位
  70.                
  71.                         FloatToChar(ValueTemp);
  72.                    WriteCom(0x80+0x46);               
  73.         for(num=0;num<5;num++)
  74.                         {
  75.                                 WriteData(disp_value[num]);
  76.                                 Delay(10);        
  77.                         }
  78.                                 WriteData('R');
  79.                                 WriteData(' ');        
  80. }  while((ADTemp>25)&&(ADTemp<254)&&(key_number==4));//采樣電壓值大于0.2v小于2v

  81.            do{
  82.                                     s1=1;                                                         //選通200歐通道
  83.                                     s2=0;
  84.                                     s3=0;
  85.                                         Delay(50);
  86.                         ADTemp=ADSample(Res_adder);                        //AD采樣
  87.                         ValueTemp=ValueConver(ADTemp);                    //將0~255的數值轉換為0~2V的電壓值
  88.                         ValueTemp=ValueTemp/2;                                        //電壓轉換為電阻值
  89.                         ValueTemp=ValueTemp*200;                                //電阻乘以相對應的檔位值
  90.                         
  91.                         FloatToChar(ValueTemp);                                        //電阻值轉換為字符型
  92.                          WriteCom(0x80+0x46);                                        //顯示電阻值
  93.         for(num=0;num<5;num++)
  94.         {
  95.                 WriteData(disp_value[num]);
  96.                 Delay(10);
  97.                         
  98.         }
  99.                 WriteData('R');
  100.                 WriteData(' ');                        
  101. }  while((ADTemp<253)&&(key_number==4));                //采樣電壓值小于2v     

  102. }
復制代碼
顯示程序:
  1. #include<reg52.h>
  2. #include"LCD.h"

  3. #define  datasend  P0                                                //P0口數據送LCD1602
  4.          

  5. sbit LcdRs=P2^0;                                           //1602數據、命令控制端
  6. sbit LcdEn=P2^1;                                                           //1602使能端

  7. uchar  mytable0[]=" my design" ;
  8. uchar  mytable1[]="wan yong biao";
  9. uchar code line0[]="welcome you";
  10. uchar code line1[]="Value=     V";

  11. unsigned char disp_value[5]={'0','0','0','0','0'};
  12. //寫命令
  13. void WriteCom(unsigned char Com)
  14. {
  15.           LcdRs=0;                     //低電平選擇為寫指令        
  16.           datasend=Com;             //把指令寫入P0口
  17.           Delay(5);                     //參考時序圖
  18.           LcdEn=1;                         //開使能
  19.           Delay(5);                         //讀取指令
  20.           LcdEn=0;                         //關閉使能        
  21. }
  22. //寫數據
  23. void WriteData(unsigned char Data)
  24. {
  25.            LcdRs=1;                      //高電平選擇為寫數據
  26.            datasend=Data;          //把數據寫入P0口
  27.            Delay(5);                  //參考時序圖
  28.            LcdEn=1;                          //開使能
  29.            Delay(5);                  //讀取指令
  30.            LcdEn=0;                          //關閉使能
  31. }
  32. //初始化
  33. void LcdInit(void)
  34. {              uchar num;
  35.             LcdEn=0;
  36.             WriteCom(0x38);            //設置16x2顯示,5x7點陣顯示,8位數據接口
  37.             WriteCom(0x0c);            //00001DCB,D(開關顯示),C(是否顯示光標),B(光標閃爍,光標不顯示)
  38.             WriteCom(0x06);            //000001N0,N(地址指針+-1)
  39.             WriteCom(0x01);            //清屏指令  每次顯示下一屏內容時,必須清屏
  40.                 WriteCom(0x80+0x01);  //第一行,頂格顯示         
  41.         for(num=0;num<10;num++)
  42.             {
  43.                     WriteData(mytable0[num]);
  44.                           Delay(10);
  45.                 }
  46.         WriteCom(0x80+0x40);           //第二行,從第一格開始顯示
  47.         
  48.         for(num=0;num<13;num++)
  49.              {
  50.                           WriteData(mytable1[num]);
  51.                     Delay(10);
  52.                  }
  53.                     Delay(1000);
  54.                  
  55.                           WriteCom(0x01);          //清屏指令  每次顯示下一屏內容時,必須清屏
  56.                         
  57.                           WriteCom(0x80);
  58.         for(num=0;num<8;num++)
  59.                  {
  60.                           WriteData(line0[num]);
  61.                           Delay(10);
  62.                  }
  63.         
  64.                     WriteCom(0x80+0x40);
  65.         for(num=0;num<12;num++)
  66.                   {
  67.                           WriteData(line1[num]);
  68.                           Delay(10);
  69.                   }


  70. }

  71. //將浮點數據轉換為字符型數組
  72. void FloatToChar(float Data)
  73. {
  74.                 uchar Temp1[5];
  75.                 uchar Temp2[3];
  76.         
  77.                 unsigned int IntData,Temp;
  78.                 float FloatData;
  79.                 unsigned char i=0,j=0,k=0;
  80.                 IntData=(unsigned int)Data;
  81.                 FloatData=Data-IntData;
  82.         //整數部分
  83. if(IntData==0)
  84.         {
  85.                 Temp1[i]=0;
  86.                 i++;        
  87.         }
  88. while(IntData)
  89.         {
  90.                 Temp1[i]=IntData%10;
  91.                 i++;
  92.                 IntData=IntData/10;

  93.         }
  94.   //小數部分
  95. while((FloatData>0.001)&&(j<3))
  96.         {
  97.                 FloatData=FloatData*10;
  98.                 Temp=(int)FloatData;
  99.                 Temp2[j]=Temp;
  100.                 j++;
  101.                 FloatData=FloatData-Temp;

  102.         }
  103. while(i>0)
  104.         {
  105.                 disp_value[k]=Temp1[i-1]+'0';
  106.                 i--;
  107.                 k++;
  108.         }
  109.                 disp_value[k]='.';
  110.                 i=0;
  111.                 k++;
  112. while(i<j)
  113.         {
  114.                 disp_value[k]=Temp2[i]+'0';
  115.                 i++;
  116.                 k++;
  117.                                 
  118.         }

  119. }

復制代碼




下載:
http://www.zg4o1577.cn/bbs/dpj-80194-1.html

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲福利片 | 久久综合一区 | 涩涩视频在线播放 | 亚州中文字幕 | 91麻豆精品一区二区三区 | 午夜视频在线免费观看 | 99久久婷婷国产综合精品首页 | 国产亚洲精品美女久久久久久久久久 | 国产精品国产三级国产aⅴ原创 | 琪琪午夜伦伦电影福利片 | 国产成人精品一区二 | 亚洲a视频| 亚洲一区视频在线 | 国产在线一区二区三区 | 国产日韩一区二区三区 | 夜夜草视频 | 天色综合网| 成人夜晚看av | 成人免费视频一区二区 | 欧美成人免费在线视频 | 国产精品视频免费观看 | 久久精品亚洲精品国产欧美 | 综合二区 | 国产熟熟| 久久国 | 欧美精品一区在线 | 亚洲精品视频久久 | 日本视频中文字幕 | 亚洲一区免费视频 | 国产91综合一区在线观看 | 日韩在线中文字幕 | 国产一区二区三区久久久久久久久 | 成人一区二区三区 | 国产免费一二三区 | 久久精品福利 | 国产精品激情小视频 | 久久久久9999 | 国产成年人小视频 | 国产在线视频在线观看 | 日韩高清一区 | 精品久久电影 |