|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
STC12C2051AD电容表(含程序和原理图)
: z1 z4 U6 B( T& o
* H! B Z6 Q$ y( ^1 D8 E7 O K6 o+ Z6 g1 o+ S( P
3 N' E+ v4 ~/ r0 ]6 w
+ y7 ^' K0 |, u. D有仿真文件,有WPS的文档,有PCB图。8 [2 g) I# V7 Z# H0 a
过了这个村就没这个店了。
5 {$ H# X- p* P V/ k1 |* M需要的赶紧下手。
" T; W' {, i- [$ y测量范围2nF~2000uF。* S; b- ]1 e1 v$ [ G4 u: r1 z" V0 I
只能测电容。3 K' p% | G. q. F1 i
数码管共阴。; @$ b# i1 l+ \# _1 e" z
四个档位。
( A: z+ N s# d# v' f误差可调节。4 R3 W! u: I1 k2 W) ?4 O, v
制作简单。
+ X$ Q/ ?1 P; t o" `成功率高。
2 Q; q$ J1 \1 j n( `数码管四位。
. R T! b: T) v2 @不用小数点。1 O3 ~3 o. V7 }* c" J
7 V( x$ t% U# e. X
! k8 a# p! i R. J
#include <reg51.h> k* }1 {) n- e5 G' c
unsigned char j,n,t,DispBuf[4];
# x/ r: ]) C" x# Z+ Nunsigned int cap;: O7 R& F+ [5 ]) H. x m
unsigned char code; O$ P- ]* J5 X& v6 B ~
BitTab[4]={0xbf,0xdf,0xef,0xf7};//位驱动码3 z0 t4 K: _& T W* Z' V& ^
unsigned char code
5 b3 [0 ^/ \4 e" |DispTab[11]={0xfe,0x70,0xed,0xf9,0x73,0xdb,0xdf,0xf0,0xff,0xfb,0x40};//字形码$ b k0 }" y' i w) b# ?; F9 W% N
sbit P1_2=P1^2;
# J; q6 s/ j; Y7 A. Q+ z# Tsbit P3_6=P3^6;, E0 T, L& y7 p- |
main() //主程序; g7 H& s; F' j+ S) d
{ TMOD=0x11;//定时器T0、T1均工作于定时方式15 t& t5 F+ B2 E, G1 H
TH1=0xec;
5 K, _4 [, M4 Q TL1=0x78;//T1定时时间为5ms) D6 m9 S, ~7 T s" c
IE=0X88; //开中断1 V3 a! m+ a2 k' X3 p7 }2 v* S( Y
TR1=1; //开定时器T1+ `+ w3 _, K* V) `: W
for(;;) //无限循环,定时中断返回点) S4 N' o4 G+ T8 I# z$ O
;
. V4 ]) c% X) z. i- H# y/ K L" T} C' D$ X: j$ Z5 `* |
Timer1() interrupt 3//定时中断服务程序( V+ Q. ~, y: o8 {7 _% V
{ TH1=0xec;
1 N+ N0 f( [3 o* X2 o; @/ I( a+ c0 H TL1=0x78;
) a8 `" ^) l$ G2 j, L. E* g t=BitTab[j];//取位值
! `2 z" B8 s& B4 U/ F1 B# W P1=P1|0x78;//P1.3-P1.6送15 K& F/ u. W, T8 T; n
P1=P1&t; //P1.3-P1.6输出取出的位值# }8 j) v1 w- U
t=DispBuf[j];//取出待显示的数
0 F) k% I0 D+ {% j" @: {$ t3 O t=DispTab[t];//取字形码
\5 B1 j& w# |. L7 s F P3=t; //字型码由P3输出显示
5 p! \3 D/ f! \* b/ `! ` j++; //j作为数码管的计数器,取值0-3,显示程序通过它确认显示哪个数码管3 w8 A' C0 U: ]1 T1 ]
if(j==4)" P4 c4 Y: V- P
j=0;
$ J! r/ ^! M2 I, M/ N n++;, m' G5 M: t- Q8 ^$ Z+ S; M L
if(n==48)//每过48个中断测一次电容量
4 p* J$ x# F0 _; a) I; q/ x {
l) r8 b& \. t, g; r0 ]; C0 y n=0;
7 I V2 B$ M3 j7 c' g, X' Q$ f TH0=0;
9 [$ Y z I; w7 j n TL0=0;
4 N5 L" J3 ~* c+ @" _) g P1_2=1;//电容开始充电/ d. t8 H& L8 n/ z3 P
TR0=1; //开定时器T0
# e r+ {) N% } for( 3_6==0;)//判断充电电压达到参考电压否7 V8 P- ?% i8 D; E; a1 z% G1 `: Q
;, c0 }4 S! C0 T
TR0=0;//充电电压达到参考电压,关定时器T0
' `$ g! ~$ c1 r+ d P1_2=0;
$ C l7 \9 d5 m% n cap=TL0|(TH0<<8);//取定时器T0中的数值5 e# Q1 I6 X4 P
cap=cap-3;//修正误差8 v" L+ \% m$ f' d# L# r
if(cap>=2000)
; z$ |& V- `+ `! w, X/ B6 C {- u, r8 ^/ i. {& H
DispBuf[3]=10;, j, K' s. ~. E* \7 r# O( V% J) s4 k
DispBuf[2]=10;2 K2 j; g$ L7 G( ~% S/ w: v$ G
DispBuf[1]=10;6 W1 [, M% ~% L9 J4 m5 }
DispBuf[0]=1; //超量程,最高位显示1,其余各位不显示(灭)3 X7 u4 q2 ~! [
}
' s, `7 |0 C c) D+ v/ M# k: t+ J if(cap<6000) //不超量程,取各位数值
0 a# j5 [0 a$ S! ^5 _& L {. I0 ?. d' a+ e% O# j2 B
DispBuf[3]=cap%10;//取个位数
0 Q9 S7 t' @1 N1 N( e1 m" u
1 S0 |$ f" s% w5 g2 W( ~ DispBuf[2]=cap%100/10;//取十位数) \( [( O3 J; c% e, z
( \$ s* G' x0 z5 `3 B4 X/ i( U9 J DispBuf[1]=cap%1000/100;//取百位数) ?5 n' N' Y/ Z4 y
DispBuf[0]=cap/1000;//取千位数
a3 t" J) |$ t8 S; @& P6 K- I0 E% o6 X4 K, E) F1 @
. c# `, j+ w" R: \; Z2 L! ~6 O0 Q }
& h( d9 g/ U( I+ q4 M }3 d( |; z2 m4 t* G$ H0 y& |
}
& d# M8 J! }- K+ T) v, A: D: J5 p7 U: M
下载:
6 I" i0 e& W* H; Q/ q; \
& i6 r' X, b* k" c( f" Y' x: g# ]! Z$ @" U3 H; E# J
|
|