标题: 闲时做的一个电流 电压表头,用的stc15单片机 [打印本页]

作者: byjj3312    时间: 2017-3-1 12:59
标题: 闲时做的一个电流 电压表头,用的stc15单片机

做的电压表头,受限于单片机的AD转换精度是10位的,用5V电源,分辨率只有5MV.加了电流取样电路,也可以作为电流检测使用。如果需要高精度。设置了2.5V的431取样电路,可以把电源的变动矫正过来。也可以作为低电压检测用

源程序:
  1. /*   采用STC15W401AS单片机。12M晶振。三位数码管显示电压值。*/
  2.                                              
  3. #include "STC15F408.h"
  4. #include <intrins.h>

  5. #define uchar unsigned char  
  6. #define uint  unsigned int   


  7. #define ADC_POWER  0x80                   //AD电源控制位
  8. #define ADC_FLAG 0x10                           //转换结束标志位。1 结束
  9. #define ADC_START 0x08                           //开始转换位
  10. #define ADC_SPEEDLL 0x00                  //转换速度540个时钟
  11. uchar ADC_POSITION;               //0x00 AD通道位置P1.0, 0x01 AD通道位置P1.1

  12. sbit bai=P1^2;
  13. sbit shi=P1^4;
  14. sbit ge=P1^5;

  15. uchar s1,sec;
  16. uint adval=0;                   //AD转换值
  17. uint  show;            //电压值
  18. uint  show1;                     //基准电压

  19. uchar code table[]={0xF5,0x05,0xD3,0x57,0x27,0x76,0xF6,0x15,0xF7,0x77,0x40};          //P3数码管数字0-9
  20. uchar code table1[]={0xFD,0x0D,0xDB,0x5F,0x2F,0x7E,0xFE,0x1D,0xFF,0x7F,0x40};          //P3数码管数字0-9带小数点

  21. /*****************************************

  22. 系统初始化
  23. *****************************************/
  24. void system_init(void)
  25. {
  26.    
  27.    TMOD=0x01;                        //定时器0工作在方式1,的定时模式
  28.    ET0=1;                            //定时器0中断允许
  29.    EA=1;                             //系统中断允许
  30.    TR0=1;                            //定时器1和定时器0开始定时
  31.    TH0=(65536-30000)/256;                       //定时器0的初值30ms
  32.    TL0=(65536-30000)%256;                                 
  33.    sec=59;
  34.    P3M1=0x00;
  35.    P3M0=0xff;
  36.    P5M1=0x00;
  37.    P5M0=0xff;
  38.    P1M1=0x00;
  39.    P1M0=0x1c;
  40. }
  41. /********************************************************
  42. * 函数名称:delay
  43. * 输    入:z 延时时间
  44. * 输    出:无
  45. * 功能描述: 毫秒级延时
  46. ********************************************************/
  47. void delay(uchar n) //延时n ms
  48. {  
  49.     uchar a,b,c;
  50.     for(c=n;c>0;c--)
  51.         for(b=222;b>0;b--)
  52.             for(a=12;a>0;a--);
  53. }

  54. /********************显示温度值***************************/

  55. void display()
  56. {  
  57.   uchar c,d,e,f;
  58.   uint         su;
  59.   if(show1>850)
  60.      c=d=e=10;
  61.   else
  62.      {
  63.       su=show;
  64.           c=su/100;                    //分离温度的各位数值
  65.           f=su%100;
  66.           d=f/10;   
  67.           e=f%10;
  68.          }
  69.   P3=table1[c];                                                  //显示百位
  70.   P5=table[c];
  71.   bai=1;
  72.   delay(5);
  73.   bai=0;
  74.        
  75.   P3=table[d];                                        //显示十位
  76.   P5=table[d];
  77.   shi=1;
  78.   delay(5);
  79.   shi=0;
  80.        
  81.   P3=table[e];                                        //显示个位
  82.   P5=table[e];
  83.   ge=1;
  84.   delay(5);
  85.   ge=0;
  86.           
  87. }

  88. /*****************************************************
  89. ** 函数名称: void adc_isr() interrupt 5
  90. ** 功能描述: AD中断,获取AD数据
  91. ** 输   入: 无
  92. ** 输   出: show
  93. ** 全局变量: show
  94. ** 调用模块: Delay_ms
  95. ********************************************************/
  96. get_ad()
  97. {                   
  98.         ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|ADC_POSITION;     //启动ADC转换
  99.         _nop_();
  100.         _nop_();
  101.         _nop_();
  102.         _nop_();
  103.                                                              //默认ADRJ=0; 高8位+低2位
  104.             while(!(ADC_CONTR & ADC_FLAG));                      //等待ADC转换结束

  105.         ADC_CONTR &= ~ADC_FLAG;                              //必须软件清0
  106.             adval=ADC_RES;                                       //00000000 00000011  高8位
  107.             adval=ADC_RES<<2|ADC_RESL;                           //00000011 11111111 右对齐 高8位+低2位         // a|b;                                    
  108.                 adval=adval/1.024;        
  109.         return (adval);
  110. }

  111. /******************取20次AD转换值 求平均值*****************/
  112. AD_work()
  113. {
  114.         uint advalf=0;                    //定义处理后的数值AD_val为浮点数
  115.         uchar i;
  116.         for(i=0;i<50;i++)
  117.            {
  118.                 advalf=advalf+get_ad();   //转换20次求平均值(提高精度)
  119.                 delay(2);

  120. ………余下程序请下载附件………

复制代码


完整代码下载:
电压表头.rar (27.61 KB, 下载次数: 561)

作者: kn988    时间: 2017-3-1 22:45
留一个记号,备用。
作者: dragon19790000    时间: 2017-3-2 08:53
牛,楼主威武!!!
作者: hangmw    时间: 2017-3-2 10:53
占个位置,回头再看
作者: nkdeng666    时间: 2017-3-3 12:28
谢谢楼主分享!!!
作者: 51单片机小白    时间: 2017-3-30 11:05
谢谢分享,留个记号,准备试试
作者: zwmwcj    时间: 2017-4-22 08:49
学习中,不错资料
作者: rs7cai    时间: 2017-4-22 21:05
留一个记号,备用。
作者: H818488842839    时间: 2017-6-5 13:45
非常好
作者: raymondau    时间: 2017-6-5 16:46
楼主附个电路就好了
作者: ziba108    时间: 2017-6-6 15:10
楼主附个电路就好了

作者: zhao58    时间: 2017-9-25 19:45
学习一下 谢谢
作者: lsrly    时间: 2017-9-28 22:06
收藏备用
作者: 879540191    时间: 2017-9-29 16:14
....看起来非常不错·
作者: gxlin    时间: 2017-9-29 16:31
发个电路图分享。
作者: YQS    时间: 2017-9-30 09:19
谢谢楼主分享好资源!没有电路原理图仿制有难度哦!
作者: lsrly    时间: 2017-10-17 15:24
显示电流不】
作者: yyfpy    时间: 2017-10-18 13:44
谢谢楼主分享!!学习!
作者: yyhyyhyyh    时间: 2017-11-3 19:41
谢谢楼主分享,值得学习
作者: 841812960    时间: 2017-11-16 14:52

谢谢楼主分享
作者: 841812960    时间: 2017-11-16 14:53
谢谢楼主分享
作者: 841812960    时间: 2017-11-17 11:18
谢谢楼主分享
作者: youngxinhua    时间: 2017-12-2 21:15
谢谢,我也留个记号备用
作者: fancunwu    时间: 2017-12-8 16:32
测量范围是多少呢
作者: AOP    时间: 2017-12-8 23:29
测量范围是多少呢楼主。。。。。
作者: dillinllp    时间: 2018-3-9 16:22
谢谢分享,留个记号,准备试试
作者: ltp    时间: 2018-3-16 13:20
谢谢楼主分享.
作者: fancunwu    时间: 2018-3-17 10:25
范围多少

作者: 呵..呵    时间: 2018-3-22 18:29
没有测试范围和电路图吗?

作者: jmkl128    时间: 2018-4-11 17:08
谢谢,涨知识了,下载
作者: 751694839    时间: 2018-10-30 06:46
看着不错哦
作者: bhjyqjs    时间: 2018-10-31 09:51
楼主真牛!谢谢分享!
作者: 拼搏83    时间: 2018-11-2 10:30
楼主可以帮我免费写个程序吗
作者: chwei1    时间: 2018-12-18 20:00
谢谢楼主共享,先收藏
作者: chwei1    时间: 2018-12-22 10:57
感谢楼主分享,确实能有个电路图就好了!!!
作者: Li平    时间: 2018-12-22 17:02
谢谢楼主分享,空了也整个玩玩。电压表电流表用的很多
作者: 祝云章    时间: 2019-1-19 13:34
谢谢分享!
作者: jifengjianwu    时间: 2019-2-1 20:32
谢谢楼主,学习了。

作者: 1860774xxxx    时间: 2019-2-2 15:39
支持一下
作者: 841812960    时间: 2019-2-19 10:30
学习一下 谢谢
作者: zhoudmm    时间: 2019-2-20 01:13
谢谢楼主分享
作者: 成森林    时间: 2019-3-13 08:20
楼主辛苦了,这种电路我正需要。
作者: 583703056A    时间: 2019-6-5 12:48
收藏正好需要这个,做个电压表
作者: 欢乐舞语    时间: 2019-7-14 16:41
这个厉害了!学习!
作者: 13534702358    时间: 2019-7-15 14:27
好样的
作者: m182892    时间: 2019-7-15 19:05
你的参考电压是多少V,adval=adval/1.024;  是怎么来的,1024是10位AD取值,缩小100倍,解释一下
作者: 13534702358    时间: 2019-7-16 15:53
电压是多久刷新一次呢 ?好像要上电才能刷新的
作者: 成森林    时间: 2019-8-5 19:31
谢谢楼主我下载了正好用得着 ,辛苦你了!
作者: 成森林    时间: 2019-8-12 18:12
楼主在吗?你的那个电压表 电流表文件试过吗?能不能用?我照你的样子做了怎么只有三个0,没有检测反应啊,不管输入有电压变化就是一直三个0 ,没有变化怎么回事?
作者: 鹏博士PBs    时间: 2019-8-13 16:20
资源不错
作者: zxy2266    时间: 2019-8-14 21:12
我有408芯片,准备做一个
作者: Liubtwinner    时间: 2019-8-23 22:45
准备做一个
作者: qwa1234    时间: 2019-8-25 18:47
正好需要
作者: hbsunjm    时间: 2019-8-26 09:23
学习中,不错资料
作者: 鹏博士PBs    时间: 2019-8-26 10:12
看起来蛮不错的 收藏一波
作者: quhong0411    时间: 2019-9-14 09:59
谢谢分享。学习一下。
作者: 认得其中    时间: 2019-10-7 22:28
学习一下 谢谢
作者: zhouqiang    时间: 2019-10-8 11:25
感谢分享收藏
作者: zingso    时间: 2019-10-14 22:55
厉害了。顶
作者: zjqzwangdong    时间: 2019-11-3 11:26
学习下,最近在琢磨电压无线回传,好玩
作者: 1302798532    时间: 2019-11-5 13:01

谢谢楼主分享!!!
作者: fuyan13    时间: 2019-12-18 09:12
学习中,不错资料
作者: 6456846846    时间: 2019-12-18 16:19
占个位置,回头再看
作者: 贺伶欢    时间: 2019-12-18 20:59
有个电路图就好啦
作者: 卢以和    时间: 2019-12-27 06:38
交流电流能显示吗
作者: pcvia    时间: 2019-12-27 11:04
谢谢,我也留个记号备用
作者: zjcou    时间: 2019-12-27 19:14
收藏了,留着学习
作者: tang8383    时间: 2020-1-8 18:58
谢谢楼主分享!!!
作者: tang8383    时间: 2020-1-8 18:58
谢谢楼主分享!!!
作者: wsh791    时间: 2020-2-1 07:34
学习了,谢谢楼主
作者: yechuan220    时间: 2020-2-1 15:54

谢谢楼主分享!!!感谢楼主精彩分享
作者: zx9330    时间: 2020-2-2 16:08
学习一下谢谢
作者: jiude    时间: 2020-3-1 21:26
楼主确定用得是stc15w401as?是15w408as吧,程序不止k吧
作者: murenxin0911    时间: 2020-3-4 07:54
高啊!非常喜欢,有空一定试试!
作者: yang03777    时间: 2020-3-7 15:55
回头有也做一个
作者: vody    时间: 2020-3-13 09:30
牛,楼主威武!!!
作者: aide51    时间: 2020-3-14 10:13
留着一哈偶备用
作者: yang03777    时间: 2020-3-21 12:46
也想做一个,正在找资料
作者: scl690115    时间: 2020-3-29 18:38

留一个记号,备用。
作者: zhousisiwuqing    时间: 2020-3-31 09:10
谢谢楼主分享,空了也整个玩玩。电压表电流表用的很多
作者: zigongwanjun    时间: 2020-4-11 22:55
不错的电路,适合初学者
作者: davidxuwg    时间: 2020-4-15 17:14
留一个记号,备用
作者: eb900001    时间: 2020-8-4 15:19
很不错的东西,值得学习,。。。。。。。哈哈
作者: tang8383    时间: 2020-12-30 17:46

学习一下 谢谢
作者: zhuoyue36524    时间: 2021-1-7 15:13
mark 留用
作者: jjwangxu2008    时间: 2021-1-8 06:58
占个位置,回头再看
作者: 3486635230    时间: 2021-1-9 21:00
很好的东西,留下一个脚印。
作者: jiajuntao    时间: 2021-5-30 22:50
精彩,给伙伴点赞。
作者: 7782    时间: 2021-6-2 09:20
刚学单片机,想收藏学习一下,可惜币不够
作者: 小菜鸡,。、    时间: 2021-6-5 17:59
虽然有点疑问,但很受用
作者: pantera    时间: 2021-6-8 23:12
PCB和图纸谁有画好的能分享吗?

作者: qq603599910    时间: 2021-6-9 08:24
uchar ADC_POSITION;       ---- 请问这是默认0x00? 看一直没有赋值直接ad启动转换时调用.
作者: WINNSUN    时间: 2024-11-10 00:46
学习了,留着不时之需,感谢!
作者: hclin    时间: 2024-11-19 01:39
程序很陽春,僅僅完成基礎功能,還需努力才有實用價值。
作者: cwb2038    时间: 2024-11-19 08:00
谢谢分享!学习一下!
作者: 06123    时间: 2024-12-27 11:28

楼主附个电路就好了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1