找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2179|回复: 1
打印 上一主题 下一主题
收起左侧

单片机电容测量仪代码

[复制链接]
跳转到指定楼层
楼主
ID:370972 发表于 2018-7-13 15:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
具体见附件,有代码。

单片机源程序如下:
  1. #include "delay.h"
  2. #include "GPIO.h"
  3. #include "config.h"
  4. #include "lcd_12864.h"
  5. #include "display.h"

  6. sbit key0=P1^0;
  7. sbit key1=P1^1;
  8. sbit key2=P1^2;

  9. sbit big_case=P1^5;
  10. sbit small_case=P1^6;


  11. long int freq,n,cap;
  12. //uchar n;
  13. uchar lcd_i;
  14. uint count_t0,s;
  15. uchar keystate='A';

  16. uchar code dis1[]={"<-电容测量仪->"};
  17. uchar code dis2[]={"频率:         Hz"};
  18. uchar code dis3[]={"电容:          F"};
  19. uchar code dis4[]={"档位:"};

  20. uchar code dis_auto[]={"自动挡"};
  21. uchar code dis_big[]={"大量程"};
  22. uchar code dis_small[]={"小量程"};


  23. //端口初始化
  24. void        GPIO_config(void)
  25. {
  26.         GPIO_InitTypeDef        GPIO_InitStructure;
  27.         GPIO_InitStructure.Pin  = GPIO_Pin_All;               
  28.         GPIO_InitStructure.Mode = GPIO_PullUp;               
  29.         GPIO_Inilize(GPIO_P0,&GPIO_InitStructure);
  30. //        GPIO_Inilize(GPIO_P1,&GPIO_InitStructure);
  31.         GPIO_Inilize(GPIO_P2,&GPIO_InitStructure);
  32. //        GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);
  33. }

  34. //定时器0初始化
  35. void Timer0Init(void)                //1毫秒@11.0592MHz--16位自动重装
  36. {
  37.         AUXR |= 0x80;                //定时器时钟1T模式
  38.         TMOD &= 0xF0;                //设置定时器模式
  39.         TL0 = 0xCD;                //设置定时初值
  40.         TH0 = 0xD4;                //设置定时初值
  41.         TF0 = 0;                //清除TF0标志
  42.         TR0 = 1;                //定时器0开始计时
  43.        
  44.         ET0=1;
  45.         EA=1;
  46. }

  47. //外部中断0初始化
  48. void exint0_init()
  49. {
  50.         INT0=1;
  51.         IT0=1;//设置INT0中断类型(1:仅下降沿;0:上升沿和下降沿)
  52.         EX0=1;//使能INT0
  53. }

  54. void main()
  55. {
  56.        
  57.         GPIO_config();//端口初始化
  58.         lcd_init();//液晶初始化
  59.         Timer0Init();//定时器0初始化
  60.         exint0_init();//外部中断初始化
  61.        
  62.         //显示测量变量及档位
  63.         lcd_dis_str(0,0,dis1);
  64.         lcd_dis_str(1,0,dis2);
  65.         lcd_dis_str(2,0,dis3);
  66.         lcd_dis_str(3,0,dis4);
  67.        
  68.        
  69.        
  70.         while(1)
  71.         {
  72.                 dis_freq(freq);
  73.                 switch(keystate)
  74.                 {
  75.                        
  76.                         //默认自动挡---------------------------------------------
  77.                         case 'A':
  78.                                 lcd_dis_str(3,5,dis_auto);//显示自动挡
  79.                                
  80.                                 if(freq>40000)
  81.                                 {
  82.                                         big_case=1;
  83.                                         small_case=0;
  84.                                         cap = 1430000000 / (3* (freq+1));//计算电容值
  85.                                 }
  86.                                 else
  87.                                 {
  88.                                         big_case=0;
  89.                                         small_case=1;
  90.                                         cap = 1430000000 / (20001* freq)-27;//计算电容值
  91.                                 }
  92.                                 dis_cap(cap);//显示电容值
  93.                                
  94.                                 if(key1==0)//key1按下切换到大量程
  95.                                 {
  96.                                         delay_ms(5);
  97.                                         if(key1==0)
  98.                                         {
  99.                                                 keystate='B';
  100.                                                 while(!key1);
  101.                                         }
  102.                                 }
  103.                                
  104.                                 if(key2==0)//key2按下切换到小量程
  105.                                 {
  106.                                         delay_ms(5);
  107.                                         if(key2==0)
  108.                                         {
  109.                                                 keystate='C';
  110.                                                 while(!key2);
  111.                                         }
  112.                                 }
  113.                                 break;
  114.                                
  115.                                
  116.                         //大量程档位---------------------------------------------------
  117.                         case 'B':
  118.                                
  119.                                 big_case=1;
  120.                                 small_case=0;
  121.                        
  122.                                 cap = 1430000000 / (3* (freq+1));//计算电容值
  123.                                 dis_cap(cap);//显示电容值
  124.                                 lcd_dis_str(3,5,dis_big);//显示大量程
  125.                        
  126.                                 if(key0==0)//key0按下切换到自动挡
  127.                                 {
  128.                                         delay_ms(5);
  129.                                         if(key0==0)
  130.                                         {
  131.                                                 keystate='A';
  132.                                                 while(!key0);
  133.                                         }
  134.                                 }
  135.                                
  136.                                 if(key2==0)//key2按下切换到小量程
  137.                                 {
  138.                                         delay_ms(key2==0);
  139.                                         if(key2==0)
  140.                                         {
  141.                                                 keystate='C';
  142.                                                 while(!key2);
  143.                                         }
  144.                                 }
  145.                                 break;
  146.                                
  147.                                
  148.                         //小量程档位---------------------------------------------
  149.                         case 'C':
  150.                                
  151.                                 big_case=0;
  152.                                 small_case=1;
  153.                                
  154.                                 cap = 1430000000 / (20001* freq)-27;//计算电容值
  155.                                 dis_cap(cap);//显示电容值
  156.                        
  157.                                 lcd_dis_str(3,5,dis_small);//显示小档位
  158.                        
  159.                                 if(key0==0)//key0按下切换到自动挡
  160.                                 {
  161.                                         delay_ms(5);
  162.                                         if(key0==0)
  163.                                         {
  164.                                                 keystate='A';
  165.                                                 while(!key0);
  166.                                         }
  167.                                 }
  168.        
  169.                                 if(key1==0)//key1按下切换到大量程
  170.                                 {
  171.                                         delay_ms(5);
  172.                                         if(key1==0)
  173.                                         {
  174.                                                 keystate='B';
  175.                                                 while(!key1);
  176.                                         }
  177.                                 }
  178.                                 break;
  179.                         }
  180.                        
  181. ……………………

  182. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
电容测量仪2.0.zip (110.95 KB, 下载次数: 56)



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:383112 发表于 2019-12-29 14:35 | 只看该作者
你好,这各测量电容范围是多少呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表