找回密码
 注册
关于网站域名变更的通知
查看: 825854|回复: 20
打印 上一主题 下一主题

单片机20~200A大电流检测电路设计 用AD实现 带原理图,源代码

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-10 13:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
单片机20~200A大电流检测电路设计 用AD实现 带原理图,源代码
+ z, o6 i. z3 ]1 c2 Q/ w, Q9 D! l$ D6 _: J8 f! ?

: C6 i& q& _: e- a) Y这是我刚做的一个20~200A大电流检测电路,通过ADC0809转换成数字信号,通过LED显示结果,包括原理图,仿真文件,源代码。
# w  ~6 q5 o. R# ?, k将R1的电压采样到ADC0809,转换为数字信号,输入单片机
/ X% c# J/ W" ]4 ]$ g) \" [# Y! i5 a1 z
AD画的原理图(附件中可以可以下载):/ A  h$ u# p2 e" H
1 ~0 A7 w: O2 v5 |& ~$ n
' W  e' `! O. I. F6 V: b" e5 M2 M
! n+ z2 ^! k7 U- r2 C
: `) ^3 E: D; r" S4 T! b% a0 c) Y
单片机源程序:
: V+ E& j+ w, {5 z
//------------------------------51单片机头文件/ z6 M9 w* A; `( \1 `8 P: }% K% g
#include<reg51.h>
- D- `0 H# @8 o7 j
4 m; C! P9 [3 L: ^+ R, s, ^//各数字的数码管段码(共阴)( g1 K8 n+ G0 b& d5 X1 C% W
unsigned char code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管显示数组{0,1,2,3,4,5,6,7,8,9}
" v. t: K, L" s6 v& _( s
/ t' ~- k. D! V( Ksbit CLK=P3^3;    //时钟信号
2 T, G5 V0 v. o6 csbit ST=P3^6;     //启动信号,由低电平到高电平时间段复位 ,高电平到低电平时间段开始转换0 ^9 y9 e3 U4 [1 I8 h$ R& J9 ^' R* c
sbit EOC=P3^5;    //转换结束信号,当转换结束时会自动变成高电平! p1 J) `5 q. y! Q, o# C
sbit OE=P3^4;     //输出使能 ,当OE为高电平时开启输出端,OE为低电平时禁止输出
* q3 J/ ]/ j% h: Fsbit W1=P2^4;     //定义W1表示P2.4位,第一位数码管控制端, 为0时亮,为1时灭
7 p( O5 n- U9 s; G$ Nsbit W2=P2^3;          //定义W2表示P2.3位,第二位数码管控制端, 为0时亮,为1时灭- F" \5 }: B+ x
sbit W3=P2^2;          //定义W3表示P2.2位,第三位数码管控制端, 为0时亮,为1时灭
6 V" `2 J! E: u9 ?3 xsbit key=P3^7;          //定义按键控制key为P3.7
' {$ t' L: j/ x6 G/ @5 d( q" O//----------------------------1ms延时函数2 p: H; D- Q- j& y3 l
void Delayms(unsigned char ms)
& j9 o1 R, Z$ W$ N{
  {' }7 _8 M! K. Iunsigned char i;3 i& r; V# t, F; R. t
while(ms--)
/ F* {3 L9 K% [  v( hfor(i=0;i<120;i++);5 O' G& v% G! C0 u) f: e! m% _' L
}
4 _  M) }# F5 t//---------------------------显示转换结果(动态扫描模式)
; b% b* X$ C- U; {void Display(unsigned int d)
, F& v( ?/ k  y& E: F$ f  R% p3 \{
' m( p+ C/ d2 o; O* r+ c! u% `5 N        d=d*1.0/256*5*40;  //将数字量转换成模拟量的公式为5V*(d/256),采样电压值为电流值*100欧姆,所以要获得实际电流值,即为采样电压值*40倍 (n1:n2=4000:1)
! q/ h6 q; Y6 A8 z
0 c/ F! a0 g! V8 O# @        W1=0;   //第一个数码管亮
1 }  U- g/ L9 y: s        P0=DSY_CODE[d%10];  //显示第一个数码管的值 为P1的值除以10取余
! g+ s5 S1 e! G. e6 [        Delayms(6);                        //延时5ms
. k; q' H7 s4 q8 P5 o  X        W1=1;   //第一个数码管灭
6 w% a0 m! g# r/ V) q6 t) U2 e- B* j! O" C
        W2=0;0 }  K! k. O8 @: W# Y; L
        P0=DSY_CODE[d%100/10];        //显示第二个数码管的值 为P1的值除以100取余 再除以10取整
0 B: p# K/ B* h2 C        Delayms(6);) b# z, J$ b! h6 y
        W2=1;
( S& @! U' I( S. c9 X6 I. R1 w+ o0 K" x) E6 `& u+ j' E
        W3=0;
% s. r8 {1 _0 ^2 S        P0=DSY_CODE[d/100];           //显示第三个数码管的值 为P1的值除以100取整' R( q$ E9 m1 A* i+ K
        Delayms(6);
& [! j& Y. z; h' [& l' x        W3=1;! Z( K  b+ r! B$ T) m
            }( U6 x- N' q2 r1 L
//-------------------------------------------------主程序
7 @1 R" L+ F* q6 J( ?/ Q3 g  F8 I. _" Kvoid main()+ l3 L. F1 d( M+ F' @
{                                                                                 
/ F, D) [9 |8 E0 b+ \  N        TMOD=0x02; //16位定时器0工作模式设置为2
" d& T- G% O  c9 t        TH0=0x14;  //设置定时器高8位初值为0x14* T9 F+ v: |6 h( K2 ]# O& `
        TL0=0x00;  //设置定时器低8位初值为0x00$ L8 P3 C  D/ h
        TR0=1;           //开启定时器0开关. P; Y, e2 r1 f. m/ r% N
        ET0=1;           //开启定时器0中断开关
" j5 @- b  x0 Y9 m# z5 c! F        EA=1;           //开启中断总开关
1 i$ h& t! {% c7 z9 p# Q, S
6 @! W  Q  m: i9 u6 b2 Y' w* @//---------------启动 A/D 转换& W% A5 V8 C+ ?$ H% J1 l; o

# |! N" e$ ~, d//---------开始按键-----
1 U$ z# Z+ h( r' u3 B5 V7 \. LA:        while(key==1);     //等待按键按下2 M* b/ x0 @% }9 v8 i
        Delayms(1);               //延时1ms
* L  `4 X- T. o/ E$ H# K1 A        if(key==0)         //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能) 1 L$ E* C2 W' g; y& U
        while(key==0);           //当按键松开时,循环转换和显示
4 @# K! g0 Y  v: d2 _+ W! m- H( ~) }4 i4 _. [% S
                while(1)$ s0 s0 _" V9 ~2 u
                {. t* @3 s" q: c
                ST=0;7 k) W1 J0 M: a7 }* H
                ST=1;
$ i3 g3 ^- v, ?- A1 {& \" [0 [                ST=0;  
- |# O2 h, k/ `: g; o* a2 z. _8 l" \& @4 R; \/ d1 X. N/ |
                while(EOC==0);   //等待转换完成' g6 K8 W2 q. _
                OE=1;                          //开启输出端
8 g" v$ w( I9 b( q7 _- N6 K& y$ I# B- H' Z  W1 m
                Display(P1);     //将输出到单片机P1端口上的数字信号在LED显示出来
* Y1 R& _5 t" y& q5 \                OE=0;            //关闭输出端* U& Z0 s2 j4 u1 c

8 ]+ G/ Z6 n( l* r//------停止按键---------1 l0 L6 ?4 N! e3 J" k  Q. A
           if(key==0), Z+ i3 e5 Z6 ^% h# Z: p* a
                   {" E, I, y& q5 q- k6 h5 y
                        Delayms(1);$ \: ~, D5 R8 ]: A0 Q
                    if(key==0)         //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能) + T  @$ g$ T9 A  J" g
                        while(key==0);           //当按键松开时
! _8 D2 B6 O3 Q, b! I0 N& N( n: v  _/ Q6 L9 i$ E' r; x, `5 G: H

8 H" A8 p" {, f! V0 l5 K: U…………限于本文篇幅 余下代码请下载附件…………
+ R2 E: [8 S# x
  i6 u3 v; X5 ?4 I- V! L $ y! h8 A+ @$ R7 _; V6 @. [# W
全部资料打包下载:1 j; t& i3 b% M
游客,如果您要查看本帖隐藏内容请回复

+ T+ r& ~/ N+ u4 w1 n2 e6 Y" C
2 M2 `3 ~+ o* n3 h1 L7 r' S

* Y  M: M* P" H+ Z8 o

该用户从未签到

推荐
发表于 2019-10-12 21:24 | 只看该作者
多谢分享                    
5 N- B7 ~. Q: F  K) a

该用户从未签到

推荐
发表于 2020-11-23 16:06 | 只看该作者
1111111111111111111111111
: ]0 A+ {3 o1 ]; g; j, i) N3 L

该用户从未签到

推荐
发表于 2021-5-23 14:44 | 只看该作者
学习学习666666666666666

该用户从未签到

2#
发表于 2019-1-10 16:53 | 只看该作者
好东东,谢谢楼主分享

该用户从未签到

9#
发表于 2020-2-13 09:35 | 只看该作者
谢谢分享

“来自电巢APP”

该用户从未签到

10#
发表于 2020-2-13 09:37 | 只看该作者

该用户从未签到

11#
发表于 2020-5-17 21:53 | 只看该作者
这个不错 值得一看

该用户从未签到

12#
发表于 2020-9-10 10:46 | 只看该作者
  • TA的每日心情
    擦汗
    2021-3-3 15:52
  • 签到天数: 78 天

    [LV.6]常住居民II

    15#
    发表于 2021-5-27 11:20 | 只看该作者
    下载下来看一看

    “来自电巢APP”

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

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-30 22:33 , Processed in 0.156250 second(s), 29 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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