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

基于51单片机的直流数字电压表(0-500V)自动切换量程

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于51单片机的直流数字电压表(0-500V)自动切换量程1 Z% e6 D9 Y0 q9 G$ R9 v1 n4 z
, d  x2 T! }8 @

# f2 }+ `2 J/ p1 j, N
实现功能:基于51单片机的0-500V自动切换量程数字电压表,测量精度<1%.
" s: c! Z/ l  g7 g' d& Z电路组成:100:1的电阻分压网络,TLC2543(12位)A/D转换芯片进行模拟信号采样,LM339电压比较器电路实现量程分档切换,51单片机进行数据处理,1602液晶显示电压及A/D转换数据值。
" U3 b; U; U9 K( d) C) E不足之处:电阻分压网络估计精度不是很高,上网查了下,99K,9K电阻误差一般1%左右,不像proteus一样一点误差都没有;还有个问题是,当在显示中测量100V以上的电压时,电压太大,对电路有危险,所以应当加保护电路,可我不知道怎样加最合适,希望网友能给点建议,最好是有曾经做过实物的建议。
7 p- N' U2 K# s! K3 _
电路原理图

' L' ?3 l% {8 D/ s# k2 u( E
% T6 h3 \' h+ V& y5 E
/ S: P# H  h# Z% c
3 o4 ^, i3 N/ `+ j+ Q$ d
5 V0 o7 L* z: |7 p- E3 D- `  P7 C+ ]( j+ f: F
#include<reg52.h>( j0 |5 ]$ W3 m: n7 X% I9 R% g5 \- \
#include<intrins.h>/ t/ B% I0 e, D# j+ z
#define uint unsigned int- q9 c' D: e% k7 E1 h) p
#define uchar unsigned char
. Z, d( x# @. E' A6 Zuint LCD[6];   //电压数据转换成LCD1602液晶字符显示% u- ?" G- h  h" l$ @& W
uint Volt;
' o+ a' s6 B1 A! P//***********TLC549管脚配置*********//; g* D" [: W, [2 X5 R, H! U
//sbit DO  = P1^0;        //时钟' s4 b3 n: l8 }1 y/ O# }1 k
//sbit CS  = P1^1;        //片选
  ?! f$ V, J" G' T//sbit CLK = P1^2;        //数据输出
. t! ]4 W* \' E/ ]//*********************************/// I7 M: Y; }' E5 f) d
sbit RS = P2^0;                        //1602液晶数据/命令选择端
5 b) {1 T( _7 Z; h2 \$ p) ?sbit RW = P2^1;                        //1602液晶读写端
+ O8 e: E" N! Z: S4 g' Jsbit E  = P2^2;                        //1602液晶使能端$ {: U! r2 U6 {/ {
sbit X1 = P2^3;
/ \- D: n' f3 @4 O$ t/ X5 q2 Tsbit X2 = P2^4;
! I2 `& I1 k! O$ Rsbit X3 = P2^5;
# l6 ?8 ?4 K* m  |sbit CS=P1^2;        //片选引脚% c6 {8 c! }& V
sbit CLK=P1^3;       //时钟脉冲引脚
8 Q9 ?& P: r: l; a7 M, m, D* u, \* Lsbit SDO=P1^0;       //数据输出引脚- g' C" f. {# X  u3 U
sbit SDI=P1^1;       //数据输入引脚/ M/ h) i1 i8 ?& ^4 N3 p0 @
sbit EOC=P1^4;                 //转换结束引脚/ d; }% E0 R  W6 s' X( s5 z
//*********ADC0809管脚配置************//& Y( A9 W. T+ S
//sbit ALE = P1^3;        //地址锁存允许信号1 o7 ]$ x5 b3 ?& u+ w+ p# `
//sbit CLK = P1^4;        //时钟脉冲输入端
4 I! O5 n1 X' d1 b' {! Y) A//sbit ST = P1^5;                //A/D转换启动信号' A9 B& c5 a1 e
//sbit EOC = P1^6;        //A/D转换结束信号8 T# K  u$ Q  ]1 U
//sbit OE = P1^7;                //数据输出允许信号5 Q- {: l# p. @. Q
//sbit ADD_A = P1^0;        //地址选择输入端
$ W- J1 A2 l' r7 d//sbit ADD_B = P1^1;$ i$ H6 A& Q( o  m* R2 N
//sbit ADD_C = P1^2;
9 H% V- m2 I: H( u; n//************************************//4 I/ T; j9 [0 a! K6 X$ Q
// Function Prototypes$ ?& g# ~& f+ L& _9 J
void check_busy(void);
1 y0 f' @( T1 d- |( n# Xvoid write_command(uchar com);$ D4 {9 j1 o3 N5 }) o+ M* x
void write_date(uchar date);
! o! B" k" }( ~2 @' F3 w3 M+ ^8 Xvoid LCD_init(void);
6 q) i: Y/ _# R7 qvoid string(uchar ad ,uchar *s);
9 t7 B* |3 r8 a) z//void lcd_test(void);
4 F# a9 B9 s% ]: e/ A: fvoid delay(uint);4 D1 F6 G2 D0 @, W
void Volt_To_LCD1602(void);2 W  W9 _2 w; H( B- ?! `1 M4 J
void delay_ms(uint xms);# Z2 F  X8 ]% u1 g& L
void Data_Conversion(void);9 A% W( [/ p! |( d' m0 W
//uchar TLC549_ADC(void);
  o# W6 R( a! l: f3 K/*******************************************8 T; a  z5 F5 n2 L
    LCD1602 driver mapped as IO peripheral
1 a; `* }! ~; M6 v# u*******************************************/  
7 l! h. @9 B# P% ?) W// Delay8 V0 t4 ^  Y9 @( J
// Delay8 m# `9 {; l( C+ }, o
void delay(uint j)0 ^: `# p. z7 u! P' ^! L  }4 p+ w" G
{ ) K# d4 X! U% J  F* L  R3 ?, Q
        uchar m = 60;+ @' a" D3 R# \' J2 u) p* _/ j  x
  for(; j>0; j--)3 n" M! y0 u. k+ k
  { $ w+ H3 M. N! M- Z2 W+ s  u
                while(--m);
! H  Y9 l+ o  \5 j9 z6 d$ i* @, a    m = 59;9 \; u0 i6 B6 H' `0 }6 A; n
    while(--m);
3 Z% b# c& H2 G" J. M& M3 P5 g/ w    m = 60;# B1 _7 ?5 g+ ^2 A: F- r6 {* |% m
  }
7 u  V( }2 v! b7 v) v}
* w1 s% m, e, I2 X( w6 ~$ j5 Y6 F! t5 A
// Test the Busy bit
$ }- v' v) l/ \' p8 _void check_busy(void)
0 b3 l; \8 p! S3 Z: x. C{ % j: f5 h3 _& N2 v
        do
5 j  {' Y6 A/ d8 r' I4 r  { : }/ R/ ?9 y8 o8 N* c
                P0 = 0xff;( {. V5 T% y% l! z* Z
    E = 0;
( w) D' z/ m5 Q; X: w) C    RS = 0; 3 F% B  v8 T# u$ }( S, t
    RW = 1;+ B6 x0 L! G$ L" k" x0 K
    E = 1;0 d+ ?0 `! O8 {" O
    _nop_();/ P- L# Y" l- L1 x" h5 c( r
  } while(P0 & 0x80);
! {" \5 x. w# _  E = 0;/ e, d+ g* N% j0 p' h  {2 g
}# R& Y: ~9 x' S) A9 }& A
& m8 s2 J5 z; C5 ]" J
// Write a command. B0 f1 e! _0 r$ S- P
void write_command(uchar com)/ `/ N1 N9 R" {
{
5 {+ ?4 o& {5 h        check_busy();
: a/ r4 o: f0 n* D8 ^/ E8 V: d  E = 0;) E4 W5 v0 Y" v- F( b* v: U
  RS = 0;
+ V6 Z: F  z) H) I) l  RW = 0;
' S. I; C1 T1 l  P0 = com;* L4 Q) U/ q. I0 |0 ^7 k6 \
  E = 1;
+ b! q- c8 s9 v  _nop_();9 R' \2 m& D; Y& i, \5 y* v
  E = 0;
* |# ?6 e  b, N7 `  delay(1);
% e; S" B: m" r8 P3 m6 T  h+ U}$ a- F4 A6 k  Y6 U0 f7 {+ d
$ k) S1 [& y! P! n
// Write Data
! z" I( _, S2 I2 ]1 Vvoid write_date(uchar date)
' G3 u% L- A  o7 s{
3 R  p3 Z3 s2 e5 f( b3 m6 L3 p        check_busy();
: m/ C# ~* X6 J- E4 j( H  E = 0;
  Z/ K. e& X# V+ O8 }! u! b  RS = 1;
0 m8 b/ |9 `5 u- ^9 l& F  RW = 0;
0 x6 @" f" n+ R$ {: t  g  P0 = date;# `. {5 @- [, W# Q5 u6 l
  E = 1;
' j/ |1 F' j# ]2 ]  _nop_();, q+ o$ K: m3 s. g6 l* E3 b, [
  E = 0;
. \5 ]/ \6 G  X5 a; s4 Y  delay(1);     X$ P6 {& e) u( L3 i4 F3 H) G2 {
}5 i& a3 y9 d  m0 X8 ^6 t
5 Y5 [0 n' g# P3 I( s
// Initialize LCD controller  N( |" X* Z. K: E+ r  w0 [
void LCD_init(void)
# [+ \3 X  W! t1 R$ y: I{
; X# c( d5 f# Y; x1 V( U/ I5 l        write_command(0x38); // 8-bits, 2 lines, 7x5 dots
0 _' G- [$ J/ E$ |: J) A' X- p  write_command(0x0C); // no cursor, no blink, enable display! v% j4 d4 }: v
  write_command(0x06); // auto-increment on
) T4 d  X" @9 x* @8 U; L  {/ X  write_command(0x01); // clear screen5 y; P9 A  I/ w3 \0 ]
  delay(1);
5 x% B( z+ @. u6 Q" M}
  h2 s# g: [3 |& ^  _5 D# |
/ S2 g3 j( `& S4 Q* `; b  ^// Display a string; @: N/ e- X, w5 X
void string(uchar ad, uchar *s)
5 R1 @: W, t  F4 I7 j4 ^. V3 R7 x6 {{ ! a: ?, M, a5 P8 w6 m( y1 I) _
        write_command(ad);
+ t% u4 o7 i4 b8 B8 [# i  while(*s>0)  [: U( |# Z- E. W" |0 R: S( m
  {
$ V( G6 Z& |. P. g2 S                 write_date(*s++);% p8 z! m3 A6 ]. H9 A9 B, u" O
     delay(100);
- F/ ^3 f' R4 r# K& f  }7 r4 w/ ~# P# k
}3 e* Z; p: n8 u7 \. w( ?3 T" I8 k
//****************************************************//
- D( }% N4 U3 X% `) U, [) V//函数名:delay_ms(uint xms)8 i$ B0 b) ]) G
//函数功能:ms级延时函数4 o4 u4 x# Y$ A  G4 {. D) P# i
//***************************************************//0 v% E8 \. U* ^, _7 l

7 i* F) I* P: B: e7 V8 |void delay_ms(uint xms)
. C! {4 w6 p* Z2 n& ^{) A6 w% N6 B0 H/ a3 A, e/ L
        uint x,y;
" q* h% Q- `. m+ G$ Z        for(x=xms;x>0;x--): C0 R: D7 M# f) s
                for(y=110;y>0;y--);
2 Q" z3 }+ q) \! g        + k1 d( Q; X1 h
}- f+ k+ X6 ?6 R8 W: b  m
/*
: @  X( r# O* c, p- J  zvoid ADC0808_Init()
7 ~( X, M$ p; p( u{
/ P. ?. P4 d8 B' J4 d: C  ST=0;' ]# k( L! T7 d+ n3 V
  OE=0;
8 b( D  H7 B* E) r) A}$ A+ o! g8 a0 m
*/
3 m( i: l8 A& }+ r$ M5 K2 p5 ]" h//***************************************************//
' {' ?' y3 _% q( k//函数名称:ADC0808_ADC()/ o. l4 u6 N" }. L2 i  V
//函数功能:读取一次A/D转换的数据
! X& F" I* |1 K# Z//***************************************************//1 J! B- E3 `3 V0 F& k
/*  V+ h$ W8 u2 H$ j
void ADC0808_ADC()
) |9 f& ]( a' X- c. |, O& j8 h{
1 a8 L/ t/ ?1 D! `  ST=0;3 Q- q/ n+ w! [8 @' t% ]
  ST=1;' a! ]( s* B# I8 Y. J! f; a
        ST=0;: t+ }; I5 d! x6 H. T0 c+ P( v! M% ?
  //OE=0;
  x, A9 P( Q' H6 a  while(EOC==0);          //自动发送0 ?8 }! ]4 ?7 s. @- B1 }2 D
  OE=1;. N4 }' f! A! R$ `4 ~

' D% R, \) @! \& w. S' z. m}
; [' |) W) Y& W( R*/
; A  H/ [8 j- P' o3 h//***************************************************//
' Y* l; N1 q1 `: S. c# t# ?* M//函数名称:TLC549_ADC()7 x0 ?! C* l, J2 D4 d
//函数功能:读取上一次A/D转换的数据,启动下一次A/D转换$ N1 [, o( V6 h4 A$ a2 P
//**************************************************//
  }# }" ], Y3 R/*
- n! b9 V/ U( G2 E( G+ Xuchar TLC549_ADC(void)
! `2 @* o  m, ^" B( j{$ P5 c# T* _& X) K4 ?7 [4 ?
        uchar n, tmp;
+ g7 B1 o  A9 z1 L; b6 r
) x2 ~3 R# {) S        CS  = 1;                     //CS置高,片选无效
- Z+ T+ o) P' N1 w$ p        CLK = 0;
' n' P# ?& M' [; e  s4 N- c5 ^4 x9 {$ L. \! g* U8 X, f( e( h
        CS  = 0;                     //CS置低,片选有效,同时DO输出高位
! a& x1 T  M8 O5 v2 ^$ ]( [. A2 j8 Y        _nop_();4 J0 _+ v! T) J5 {( D: D
        _nop_();                     //适当延迟时间1.4us Setup Time! Q! B8 Y( g6 ]4 j

& ^' g$ F: m/ ^- j1 Q        for(n = 0; n < 8; n++) //串行数据移位输入
3 r: U( q1 t4 k7 U  d) H2 {        { 8 H: M+ w/ f" U( u5 n, v1 @% F
                tmp <<= 1;
6 }3 z" x' M) l- O                tmp |=  DO;5 Q: B/ b7 Q9 d
  
  K+ R' f7 |3 R, m+ j/ E                CLK = 1;        //0.4us' A. l2 ?2 w) O* @- W
                _nop_();          //CLK transition time Max 0.1us/ I% @- b( D3 J4 A0 o6 j
                CLK = 0;        //0.4us & Z: @' y0 @( a; a
        }
$ ?$ ^, d# L+ q' R* p        CS = 1;            //CS置高,片选无效
$ ~' i5 V3 W: Y% j/ o; I8 k        for(n = 17; n != 0; n--) _nop_();  //Next Coversion需要延迟17us% B; \% Q6 ^/ x7 x; _
        return (tmp);
* w5 N* y; V2 }/ D2 a: ^, Y}
; j% `% {6 e. Y, |/ M$ v/ d*/
7 [% w' w* E+ t+ j/ {& {+ _//****************************************//6 m, o; d3 i! ]  ]7 J3 R
//函数功能:将模拟信号转换为数字信号0 ?; Z1 t- j) Z8 [
//函数名称:TLC2543_ADC()8 [9 R2 N, B6 y7 O1 L+ x
//输入参数:uchar CH_i& J$ f! i6 |& T9 c9 _
//输出参数:uint类型
" ]. `2 @7 l1 H/ F2 U, e/ S//****************************************//! p- N& x* J7 |  j& c% G6 p9 V' p) s
unsigned int TLC2543_ADC(unsigned int CH_i)           //CH_i,通道值5 Y& }- O" [1 m/ N$ J
{
; E6 x5 A0 ]1 r" i' j7 m        unsigned int AD_Val = 0;0 ?$ l8 Y' f1 V: P* O8 J4 P
        unsigned char i;2 y2 f/ S/ P: O) R1 C  x+ {
        CS = 1;                                                //一个转换周期开始
3 Z* ]7 E& F+ I/ C& ?: x. q        EOC = 0;
9 h  ]" f" f6 L3 \. H" ~        CLK = 0;                                        //为第一个脉冲做准备
; P) v/ `2 P* K! z' t( V# y        _nop_();
9 B& D" ]" h/ \( v: }        _nop_();
, [; J6 [7 z& v4 G        CS = 0;                                                //CS置0片选有效7 g, X. y9 z3 S5 f/ |6 R* L4 {. j
        EOC = 1;                                        //EOC开始应设置为高电平
7 T% ^( F" y  v9 b3 m" ^4 V  CH_i<<=4;  //将通道值(D7,D6,D5,D4)移入高四位,转换通道设置
5 T9 J1 \, K. o; t  D% u  CH_i|=0x02; //D3,D2,D1,D0=0,0,1,0 ,输出数据为12位,先输出低位
. f$ `- _9 k0 i5 Q2 Q2 V, z5 T4 p        for(i=0;i<8;i++)         //将A/D转换方式控制字写入TLC2543,并读取低8位转换结果
% f/ Y: U! E; A# J0 ^6 d3 |        {
+ J$ H' E4 z3 u* R               
+ X  ^8 e4 v* y4 T1 f          AD_Val>>=1;   //将读取结果逐位右移(先输出的是低位)   
( s" U9 ]5 @) ?& r          CLK=0;0 r3 @7 h' D9 L5 I) k4 ~% g) ~
          _nop_();
1 z+ ^* w% J( \, ~    if((CH_i&0x80)==0x80)        3 d( x% Y9 d. ?( ^/ S6 t4 D2 x( O
            SDI=1;               
2 ^) k, q- R2 S          else
( q! S/ t/ \0 ~! w& M' e            SDI=0;- l3 i2 D9 n/ y# P: E* t
            CH_i<<=1;        //在脉冲上升沿,从高位至低位依次将控制字写入TLC2543
) L* O* X2 M! J1 X  c1 {$ y      CLK=1;        
. n0 O/ N/ t* I- M' d      _nop_();) Y9 Y. w. v5 p, G+ n, q
          if(SDO==1)                    //在脉冲下降沿,TLC2543输出数据,写入AD_Val的第12位' m. ]" g7 M9 \
          {
2 v) f" S! c" @; G' }! R$ ^            AD_Val|=0x800;         
7 B5 R/ G! g. B6 z8 F! i          }. \% M/ ~1 K, Y0 M2 K7 ~, e9 j  l9 O" }
          else
, }: D4 ~; i2 V. X- W& w0 P          {1 k/ Q, m2 M' m
            AD_Val|=0x000; ' y# y- b# v+ x. Z1 q2 X
          }+ I; x- t: L( d7 y) P: \; }
        }9 P" a$ `: W# B+ ^# m& J
  SDI=0;        //8个数据流输入后,SDI端必须保持在一个固定的电平上,指引EOC变高& V7 {; o& y6 j
  for(i=8;i<12;i++)          //读取转换值的第8至第11位" Z* T# P/ p3 K
  {. ?# _  M. I+ |1 r$ @
    AD_Val>>=1;  b# q4 _* p$ ?$ h6 G; m2 |- g- |
          CLK=0;                       
% \8 F- N+ q+ J2 r" ~7 u8 b          _nop_(); ' `: p( M1 D8 S" ]! b, s
    CLK=1;      ' y9 q. r; O( b8 g
          _nop_();
" `0 I  r! D5 Z8 P/ v& W          if(SDO==1)  
8 V# k5 b) K- Q/ i2 e0 B          {
0 O3 V) m/ i) n: @  T3 d( Y4 e            AD_Val|=0x800;        //在脉冲下降沿,TLC2543输出数据,写入AD_Val的第12位. k. g2 x* X3 z4 ]  c
          }
$ T- `9 g* N) Z- l# I8 |$ R          else5 H* x. }9 Y/ f( b
          {' f3 p  B% D- k# c) R- P
            AD_Val|=0x000;         //第12位写 ‘0’
) U3 ~, n3 `. D- {# A          }
: H8 _/ j# [" e) m! a5 i, \        } & ]& }$ P2 B6 V1 N6 D, i
  CLK=0;         //在第12个时钟下降沿来临时,EOC开始变低,开始对本次采样的模拟量进行A/D转换,& v- U& R/ N7 W
  _nop_();         //给硬件一点转换时间! l" i. ~$ z( B- w/ R
  _nop_();
, a9 |7 f. O3 D7 T, t1 V+ s6 T  _nop_();/ Z( y7 h! ]/ F" F' A
  _nop_();
+ u0 v9 k7 `- ?# u  _nop_();: Q& H. X2 w# H
  _nop_();
, h; B. E( U0 |- K4 Y: E0 x8 M  CS=1;      // 停止转换,高电平无效
- @# K! i7 R4 g  }1 k' }  EOC=0;  
, r" L7 m! O  f  return AD_Val;/ D# d# k# O% Q9 i7 j1 b
}        1 A! x% a. w, f
; o5 X) a: X% H( ?; W
//****************************************//
  z+ o$ v2 y8 {/ ~6 ~//函数名称ata_Conversion()5 W* x) p, y- G) }
//函数功能:电压换算( F: B2 a2 G3 o+ z! _% W- H
//*****************************************//
" |4 y. A7 j# {) Hvoid Data_Conversion(void)2 c' s+ X  h) A; H& Q' c
{
% B$ [0 P; g( {# s        uint ad_val;
2 {) I  E8 K1 O9 F& M( n) i- O3 V  unsigned char o,p,k,l;2 t. {' [! d/ e4 u. t
        
7 p8 L( e3 ?/ A% ]$ z  b        ad_val = TLC2543_ADC(4);
, u  u1 ]+ F" w9 N& M        o=ad_val/1000;                   //取千位数字9 x: y- i3 [! I# Q/ C6 j5 s
        p=(ad_val%1000)/100;           //取百位数字
$ ~, C, s7 G, n# ^/ N) v) G        k=(ad_val%100)/10;               //取十位数字
. {  S! P" I0 b' G; j7 l        l=ad_val%10;                           //取个位数字
7 r/ P5 w) H/ v( d        write_command(0x80+0x40);' U+ T& R# W: W% n! g8 I
        write_date(0X30+o);( ?; _) ^( p7 x
        write_date(0x30+p);
7 O# M8 Z) \3 Z) ?! {6 P' A6 U        write_date(0x30+k);  c$ m, e" t5 |  N3 O) X
        write_date(0x30+l);- u2 Y$ H, l! R9 h+ `3 w3 E5 B8 P
        //delay_ms(1000);
; |- h0 w/ e" N/ V* S        if((X3==0)&&(X2==0))        //0-5V
7 L6 }" V. E! V: Q. R( G        {) a, x3 W; Q, h' g
                //ADD_A = 0;
& h# |( o: G6 n5 A                //ADD_B = 1;
9 ^: N: g" X, F! H+ v2 Q                //ADD_C = 0;6 P# Q' U" D8 _, s
                Volt          = 5.0 / 4096 * ad_val*1000;                //(100-500)
6 b% g2 S/ o/ O, c                LCD[0] = Volt/1000;         //千位2 a3 M$ s6 ^5 |- k5 `) l2 A% ~3 l
               
- `* k8 Z* X" Y# e/ W  C8 F! `( u                LCD[1] = Volt/100%10;  //百位4 v- q6 G( [  R& @! O5 `
                LCD[2] = Volt/10%10;    //十位
6 Z5 q/ w% X& ?7 P                LCD[3] = '.';                                //小数点6 C8 w. n. m1 Q7 Y
                LCD[4] = Volt%10;           //个位
  g2 Y# W' e( c( U7 L                LCD[5] = 'V';                              //字符V
& O  f5 B; g) ~' Q- B* Z/ b                                                                                                                                4 v2 I5 z: x/ a+ M0 Z
                write_command(0x80+8);
" Q, O9 k( F; w8 X. K                write_date(0x30+LCD[0]);
0 W  y, W$ ]& h               
0 y( q9 ~9 s! r) l                write_date(0x30+LCD[1]);- I4 V4 N2 U% e5 e/ K! K( g
                write_date(0x30+LCD[2]);3 Y+ E5 ?- M( r, z
                write_date(LCD[3]);7 p5 _  m3 W. @5 i. U9 K3 G
                write_date(0x30+LCD[4]);
  W5 ~  k% }9 t7 A/ G                write_date(LCD[5]);
& b. `5 D" B6 B: Y9 Z        }
' y7 K+ g1 F7 Y$ V8 `8 J8 a        if((X3==1)&&(X2==0))        //5-50V8 Z8 u: o; k+ j! \, t; y
        {
( F) R9 \$ [  g5 E* z6 u                //ADD_A = 1;
* E  K/ b9 G" E' K! M) A                //ADD_B = 0;5 f- p7 w( r$ H* M0 {) u
                //ADD_C = 0;
8 z( e% c% Q$ q2 [: D9 |+ \                Volt = 5.0/4096*ad_val*1000;        //(50-500)7 A% }! s" J) }* u
                LCD[0] = Volt/1000;         //千位7 Z' w. `, M' v# H9 s: I- C- y
                ; |: L/ p6 G1 O4 r: ^2 l' @
                LCD[1] = Volt/100%10;  //百位
$ ^. W9 D, v+ t- L$ K                ) G$ f6 U: J( a
                LCD[2] = Volt/10%10;    //十位' J4 O% |( T6 Q. b& i
                LCD[3] = '.';                                //小数点) Y4 I5 P) X- L& |5 _
                LCD[4] = Volt%10;           //个位* b# Y# p. ?* {7 q
                LCD[5] = 'V';                              //字符V
! B% G0 {% _( O  j! q2 R                                                                                                                                $ g( D7 t& x, E9 B
                write_command(0x80+8);
; U* d: q& v% M' x' `2 W                write_date(0x30+LCD[0]);- l/ M1 B6 G* G
               
9 R) u. N& F8 R, G5 X) ?1 o. m                write_date(0x30+LCD[1]);/ ?5 I8 S* o& d  [) o+ T! z
                8 b- Y$ S1 z4 Y$ Y: Y  ?6 G
                write_date(0x30+LCD[2]);' i. x6 G4 n+ m- ?( ~" D9 @
                write_date(LCD[3]);
* k: q& @* ~. E+ |# ]3 ~, S                write_date(0x30+LCD[4]);
( N, l4 a6 W3 W9 J! g1 Y8 i3 [6 z. `  ^                write_date(LCD[5]);, N9 |- k% j. T1 O5 o3 Q% p# W
        }2 n2 K5 Y0 _- g* Q
        if((X3==1)&&(X2==1))        //50V-500V' x% H" U/ n1 Y! ?$ v: q: K
        {. L. ], O7 S& v$ q
                //ADD_A = 0;
- U5 e3 H$ x1 ]0 s                //ADD_B = 0;7 ?% M$ G" O0 P, l: x
                //ADD_C = 0;
  M6 J) E' m) M                Volt   = 5.0/4096*ad_val*1000;        //(500-5000)
# Y  }, {7 P6 N: ]+ ]1 y' G' J& G                LCD[0] = Volt/1000;         //千位
. [% f" |; n: C7 l. `7 c                , \- [: h# E8 O$ d- Y+ Z4 H
                LCD[1] = Volt/100%10;  //百位
+ M. j& |1 c; @4 O/ P. ~                - p5 |+ g4 A* T& L8 S. G9 h
                LCD[2] = Volt/10%10;    //十位
/ {+ I9 V5 E; s. G3 ^                LCD[3] = '.';                                //小数点$ l- `3 m/ K' ?8 Q! j! p1 z0 |
                LCD[4] = Volt%10;           //个位
# a! m+ I- t0 _, `. y: b) X                LCD[5] = 'V';                              //字符V
( h, c% B$ s1 e1 t                                                                                                                                
7 K# g+ }0 O8 Q  [                write_command(0x80+8);8 g+ Q8 R* ]  v% T
                write_date(0x30+LCD[0]);
+ q$ e' S' t* \4 l+ N               
' |4 T1 m& S: m* y                write_date(0x30+LCD[1]);1 P0 W2 W0 ^8 Z! p
               
- ?2 r% @- @% A* M, [# C2 r                write_date(0x30+LCD[2]);7 Z/ @, ~8 {: S# H% e- u% V4 Y0 |
                write_date(LCD[3]);9 Q. y( E& L0 C7 Q' ~" H1 Z
                write_date(0x30+LCD[4]);
9 e! o( K  {7 z# H( j% ]% X" F                write_date(LCD[5]);
/ B$ h, L2 H. x7 ~- I" o        }. j- o+ A1 d* Y, F/ E
}
7 g( d- Q# p) {% A( T0 s1 @  i0 d
" O: r: J, K! \% V5 z9 w% l' R; z, nvoid Volt_To_LCD1602(void)
! C# _) H3 O/ }- T{
7 Q& I. L+ r7 d; F$ e% j! I        Data_Conversion();                     //电压换算并放大1000倍
0 m- J# f2 j; n& L1 b) U" T& x}
' q7 z, ^4 p: o5 P- S        
* q* {( A' r+ B1 Mint main()2 \& X  d+ `6 x. l" D
{
2 @! {. I+ _0 @- v) S5 i! Z* c( {        //uint m;
" L- u) C4 R2 M) L        LCD_init();
; u3 g$ [, L% \        //ADC0808_Init();9 E, I1 M  e( n  t, b
        //ADC0808_ADC();& [5 g8 w. p: p6 ?+ w# o* E* G
  delay_ms(100);
  L  E& O1 `. b  write_command(0x01);6 X6 V% Q; n- M* w
        write_command(0x80);
4 g7 c8 r1 [5 H, ?4 T, Y) @# W, Z        string(0x80,"Voltage:");: t7 O& a( X# y9 T
        //delay_ms(2000);" Z9 H" [1 _/ j  W; A* N
; `# Y; P% \+ |& F- |4 L
        while(1)- }, v, l( p7 b- U  i- \0 m
        {! y" L- t1 \$ u# u* ]6 P4 g

" X$ l! s7 G6 i( G% G" q                delay_ms(50);
, K- h0 l# c3 ]! n                Volt_To_LCD1602();
( b3 k3 d3 q+ A& P- e% {% L4 \9 R9 D                //delay_ms(4000);3 X5 I' i1 W! h% J( @  M- N* n
                2 i+ X4 r( E2 Q/ b8 z+ K
        }
$ W( c1 p% _4 C! Z; b}

6 B6 U1 N! K& u8 k0 Q: G8 p# b
下载:
游客,如果您要查看本帖隐藏内容请回复
+ ~1 p) M2 ~+ x4 N( G

该用户从未签到

2#
发表于 2019-1-31 16:02 | 只看该作者
看看楼主的代码

该用户从未签到

3#
发表于 2019-11-10 16:32 | 只看该作者
谢谢楼主的代码。$ F& a4 @7 m& C

该用户从未签到

4#
发表于 2020-5-15 16:05 | 只看该作者
感谢楼主的代码分享!
2 ]+ S, _' P$ B/ c

该用户从未签到

5#
发表于 2020-12-14 14:07 | 只看该作者
666666666666669 ^; X% f1 R  Y* f

该用户从未签到

6#
发表于 2021-2-22 20:26 | 只看该作者
谢谢分享 学习学习
  • TA的每日心情
    奋斗
    2025-6-11 15:38
  • 签到天数: 43 天

    [LV.5]常住居民I

    7#
    发表于 2022-8-31 09:19 | 只看该作者
    学习一下,谢谢分享
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-14 06:52 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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