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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于51单片机的直流数字电压表(0-500V)自动切换量程) [1 X  Z  t/ V
5 @: l6 |$ R/ a  L" ]7 h% F+ P- `6 j

% o: I6 m( ]' i% O1 n
实现功能:基于51单片机的0-500V自动切换量程数字电压表,测量精度<1%.3 f! R0 v! z( W) y" X2 k
电路组成:100:1的电阻分压网络,TLC2543(12位)A/D转换芯片进行模拟信号采样,LM339电压比较器电路实现量程分档切换,51单片机进行数据处理,1602液晶显示电压及A/D转换数据值。
* }% ^3 O# i+ p+ \8 @6 q不足之处:电阻分压网络估计精度不是很高,上网查了下,99K,9K电阻误差一般1%左右,不像proteus一样一点误差都没有;还有个问题是,当在显示中测量100V以上的电压时,电压太大,对电路有危险,所以应当加保护电路,可我不知道怎样加最合适,希望网友能给点建议,最好是有曾经做过实物的建议。

/ m9 x/ ^  U; n# s
电路原理图
/ f# O+ H8 P' B# ]1 M

6 b% Z7 w/ J0 b( y' p  o6 f& s3 B" }; C/ g8 A/ Q4 R6 y
" p- L9 M. j3 ]% `

3 \3 V* }5 O% F+ Q2 g0 n+ n! n- e. O2 F/ {6 A. n2 u* R# L
#include<reg52.h>
, J! x. a" d" N3 B#include<intrins.h>
$ [1 S! W- o9 X; X#define uint unsigned int
1 }! ~% n6 w6 t) o$ m/ O  r0 i#define uchar unsigned char5 D3 e' E8 w* t  L/ c8 G
uint LCD[6];   //电压数据转换成LCD1602液晶字符显示3 T0 M7 Z. ?0 c$ z) \
uint Volt;+ ]& d  J2 d) w7 I' `( J, ~7 W- c
//***********TLC549管脚配置*********//
  H0 M0 O( C& g) C3 u6 I//sbit DO  = P1^0;        //时钟
1 \  U4 h6 f* x1 Z" r//sbit CS  = P1^1;        //片选5 O: z/ `+ n. `( U
//sbit CLK = P1^2;        //数据输出
4 @! k3 y5 ]. w8 z! K5 ^- ^, H//*********************************//
( N, b2 }# Q( p/ i% n2 L  Msbit RS = P2^0;                        //1602液晶数据/命令选择端
" y# s/ C; A* J  D$ _8 J/ Osbit RW = P2^1;                        //1602液晶读写端9 T+ C# f7 `9 y) r! R: o
sbit E  = P2^2;                        //1602液晶使能端
3 A) k9 @: ~* M* j4 c$ {sbit X1 = P2^3;0 v2 ?! ^4 h& R9 }+ e" E
sbit X2 = P2^4;9 U2 ?' H6 ]2 V
sbit X3 = P2^5;# `" B$ v$ G) Y* Q9 {( ~
sbit CS=P1^2;        //片选引脚
7 M/ j9 v, f% K7 R7 |+ V' H  ]1 Gsbit CLK=P1^3;       //时钟脉冲引脚
. v5 j$ E0 }3 n: ?1 vsbit SDO=P1^0;       //数据输出引脚
+ ^+ `' u- A  F. S' z; Q* g9 c' ~sbit SDI=P1^1;       //数据输入引脚2 Q, v* C% Z" w  u
sbit EOC=P1^4;                 //转换结束引脚0 ~5 k, ?& `* s3 s2 D7 h
//*********ADC0809管脚配置************//
9 K, I: x5 B8 h; i//sbit ALE = P1^3;        //地址锁存允许信号* T/ ^1 w) ~. j  r2 v
//sbit CLK = P1^4;        //时钟脉冲输入端
% M" Q/ |4 D; f2 [# j//sbit ST = P1^5;                //A/D转换启动信号. o4 Y3 Z: y! a% J6 Y, t
//sbit EOC = P1^6;        //A/D转换结束信号% {) k+ {- {8 m* |
//sbit OE = P1^7;                //数据输出允许信号
+ E. c4 u% Q9 P; t6 R( O0 g//sbit ADD_A = P1^0;        //地址选择输入端
+ i. I5 s, j* J//sbit ADD_B = P1^1;+ n- k6 D, O: D
//sbit ADD_C = P1^2;
4 q8 O+ @0 A' n//************************************//; s6 Q( R! O& k* }: e3 h
// Function Prototypes
6 a/ }4 [9 n% {/ e# jvoid check_busy(void);* z- A" b! K) C4 p' I( d$ Q5 L
void write_command(uchar com);
" b( m8 l6 ?4 R' g8 Yvoid write_date(uchar date);
1 F* r6 F! h  r8 Zvoid LCD_init(void);
& u( z6 p$ A3 V5 g( x" ~void string(uchar ad ,uchar *s);
0 j# F8 W9 Z# U* a/ R$ H% a9 P5 O//void lcd_test(void);
- Y; l3 a& ^+ Cvoid delay(uint);& ?9 a. J2 u$ }8 T: M# J3 x
void Volt_To_LCD1602(void);
  j  ^1 R/ u+ R. Gvoid delay_ms(uint xms);2 {) n# m# K" S! g* f
void Data_Conversion(void);5 V. d! z% _: K- k- n
//uchar TLC549_ADC(void);
4 ~5 R8 r5 x; @$ e# P6 k/*******************************************1 O& k3 L; w* R9 c' B1 p
    LCD1602 driver mapped as IO peripheral
( e3 y( N* y+ Q1 G5 P$ M*******************************************/  
3 f) ]( i9 Z& h5 P2 c// Delay
; ^; a: I2 t! r, I  D3 n6 u// Delay
' o0 H. h" ?+ G3 x9 y; k& Pvoid delay(uint j)
8 ?& g/ D6 L& P6 w{
% @/ O- u1 l* d& R3 o2 O        uchar m = 60;
5 c4 _1 C  j" y0 k! F0 ^  for(; j>0; j--)
' s3 S) k  g% b2 w3 P  { 5 j' C4 _' W, \8 w
                while(--m);
; s% `3 k2 Y( q8 n9 l    m = 59;5 e+ ?6 t7 e- |* `! `4 Q
    while(--m);0 G+ v# r% f. J9 m; w( d8 z8 |
    m = 60;
/ z/ k2 m, a$ w7 o  }- l9 R* h- X# H: ~; [( s
}4 ]8 t: {( E3 K3 Q% X
8 p' ^5 A( ^1 j; E. V9 I# k( }
// Test the Busy bit, C" ?* r, D( Y# o# A& V( m7 {
void check_busy(void)6 e  l( L$ o( l+ H
{   P, g6 f, I; G6 P8 Z' X8 N/ _
        do
- ^0 `$ j4 u% O! c" Y8 G  { ! m0 ~5 p' U, E9 q
                P0 = 0xff;
4 N$ A$ J8 [. h( v1 T& q3 Z    E = 0;. J' h. F. v# `' ?
    RS = 0;
6 ^0 t  E" ?& T5 e/ _% r( w    RW = 1;
8 r3 R5 D2 K2 W  ?    E = 1;9 v# B5 p. D/ ^
    _nop_();
3 c" ^4 H$ ^# e8 r6 G5 y) I- C  } while(P0 & 0x80);
1 z& d3 ?2 L0 J& q4 f& i  E = 0;- b" |. e/ n9 r5 T1 \. N9 T  p
}# o; {3 j( o0 Z1 f* R, P- i

% H/ q' ~2 L4 h2 j+ x+ n( k% }// Write a command, L' J1 P9 {$ @9 }2 ?  Y
void write_command(uchar com)
  U& m$ D8 x4 s+ ^% x: F{
) Z/ b& A& r' |4 J. F        check_busy();
: z( d+ Q, ~) F  E = 0;
6 c/ a: z$ g+ Z2 r5 E  RS = 0;. d( q9 {+ h; S' w' A" i
  RW = 0;& F# Q& i) N2 I- n5 Z
  P0 = com;
1 X% p( O: y; ]* [5 o# j% ?  E = 1;
/ I8 K. A( ^; r) ~; }3 V* t  _nop_();
# f  _& Q- ]' C$ s  r8 N  E = 0;' C6 T* }4 O$ O
  delay(1);+ d" \8 m) ]" y. Y. m( r3 p
}
' w* c! {* @* u- W: z' I1 `
/ o0 w/ e! P' w/ M$ w$ n7 E// Write Data
, D1 E- x3 L; M* _' |void write_date(uchar date)6 l) a# h. F4 s9 N1 T
{ / [0 R6 z- C3 N# {8 ]3 n
        check_busy();
3 K: E# s7 H1 B2 u4 i1 Y' P% z  E = 0;  j1 I( ~& B& N( V
  RS = 1;
9 Y1 _/ J3 x( ?  RW = 0;
& S" v- O( C" g* [9 w: j, \3 n  P0 = date;
  C: S' e; H8 x1 |' v% y  E = 1;# o( g' i9 b6 x! t0 R
  _nop_();
, ~1 m" |7 r9 T# `4 i1 y" n  E = 0;7 _7 `% S# x" Q1 j
  delay(1);   
: c( T6 p$ G6 Q' V}! g4 g2 B) ~  l+ \

0 m5 \6 d0 T+ p( F1 a// Initialize LCD controller
2 R* e! Z! y4 p# s$ K+ `void LCD_init(void)" `, p1 T$ n2 l5 Z! l
{ ( w% U/ m9 `( ^, \/ s' z
        write_command(0x38); // 8-bits, 2 lines, 7x5 dots
8 ]# H! H& `' K4 q) U2 {5 ^+ l  write_command(0x0C); // no cursor, no blink, enable display( f2 `- \2 ~  r# g) a! }
  write_command(0x06); // auto-increment on
; H1 C+ c$ M, V0 s  write_command(0x01); // clear screen4 j! q, ]& }3 ]( A0 h2 @
  delay(1);
6 O3 x4 z8 l4 Y1 [& q' `}
( u1 W1 B- U" b4 k4 [7 ^. p2 A% o7 j( ]( F; c8 d
// Display a string
# N" l& z) s: fvoid string(uchar ad, uchar *s)
0 L+ G; k3 x5 d) X! M  C4 V{
" Q% v0 }2 r' C" k7 W        write_command(ad);
' }2 a  K4 T4 q# S  while(*s>0)
& m% S2 A- R; X# K# ?' O  { 2 ?8 I1 V7 I& ^4 {+ \
                 write_date(*s++);
, k+ {7 z3 `& R# \0 q     delay(100);+ s1 z3 J1 }0 _' A1 _$ h
  }
  d" a- j5 T) e  {) r( S7 {}' }4 h* s* L' n: K" ?
//****************************************************//
  o* j# K' j* @5 ?//函数名:delay_ms(uint xms): N% [: d/ ~. w: l+ a# v  K" T# D3 C
//函数功能:ms级延时函数
/ s( S: a! T3 p8 [! i0 t//***************************************************//
9 o# R1 z0 h) h+ m+ F
9 \* [8 S+ S& Q* avoid delay_ms(uint xms)
9 J9 a4 u+ a# H, m{0 @* ~9 G. P' }( j2 S8 L) N
        uint x,y;: ~6 `% [6 @& y3 o2 e
        for(x=xms;x>0;x--)
9 a& q: b# N6 {# Y, b( j                for(y=110;y>0;y--);2 D+ v. S, v# p( E" T' p
        
$ f# `' w" d9 C: r" Z% ]}
% u' M* Y2 u1 [' r! O/*
- h% k1 O8 @+ E. xvoid ADC0808_Init()
: q* e$ J- U/ k{# d. A3 C. c6 |* i0 t* T
  ST=0;
% C6 l+ A, z7 G! n  OE=0;5 r- [, }' H$ I% y
}
  Z$ p; C+ l  M$ y*/9 B( ]- ~; Q# n6 c6 E- H
//***************************************************//
  ^4 Y: ]0 j/ a! z2 a6 P$ z4 V) _//函数名称:ADC0808_ADC()
  u" }1 f8 x" N" F2 m//函数功能:读取一次A/D转换的数据
! V/ M* m; I: ?" J$ j. e) }//***************************************************//
9 T; I7 R/ @; {' q. Z& X% O/*
7 b" {5 d/ `8 _0 u( o6 Z' xvoid ADC0808_ADC()4 K' l* I) |. }$ n2 M, `
{7 \( C& {( `* N: z
  ST=0;. y& z  v) F4 p9 d# k% D
  ST=1;
" O" f: h7 r; ?6 [* [& z        ST=0;
# @+ \) H* J. S2 ^1 H  //OE=0;2 y9 g  x4 m) S; d' `* F. p- s
  while(EOC==0);          //自动发送
! W" A$ m9 x* C1 c8 k' U  OE=1;& q; w3 I0 H' p+ s: n
" k$ T) x  _" }5 a  X2 h2 D3 _2 R
}: b4 `/ o1 ?1 ]
*/
) h  h' k! ?7 Q  u$ G  j$ H//***************************************************//
& i9 R' ?& [1 U* @7 S//函数名称:TLC549_ADC()
/ D: z3 c3 Q: J% U8 s  b+ ^//函数功能:读取上一次A/D转换的数据,启动下一次A/D转换4 S5 R9 @* ~, }6 q* V  U% n
//**************************************************/// m3 ^: e* k3 D/ n
/** {4 [5 a& r( _. B  }( D2 f
uchar TLC549_ADC(void)
) t5 z& j3 x9 s  ?7 W{- k: S. b6 K8 v, N! ?" n
        uchar n, tmp;2 k1 ?; l4 G- H3 V, a
  G. ~  J( s/ [  I9 Y
        CS  = 1;                     //CS置高,片选无效
: _4 `) h8 x$ t7 G" t1 q" S; B' m        CLK = 0;2 P7 c) S- u9 m7 S5 a+ X

! Q' U2 k( I; W4 f, _4 B( H        CS  = 0;                     //CS置低,片选有效,同时DO输出高位* \# B6 I8 b; n4 I8 c7 S4 e* J! E
        _nop_();4 O3 d: H6 m( b6 @
        _nop_();                     //适当延迟时间1.4us Setup Time/ {# c) S# y8 t

6 O) v  v. K/ X        for(n = 0; n < 8; n++) //串行数据移位输入
8 ?0 k$ l  E5 X. `, e: y        { $ n* N( ?1 {* l+ ?4 @+ w
                tmp <<= 1;
5 C" F1 K4 |6 z                tmp |=  DO;
' r4 G% D% Q" l# \& k/ {  7 |  T/ m4 T6 L, u) u4 Y% X
                CLK = 1;        //0.4us1 B; H9 U9 \) w/ A, N4 \
                _nop_();          //CLK transition time Max 0.1us1 E) ?1 I3 `' b' k
                CLK = 0;        //0.4us
0 G/ j. w' o3 ~  T: v+ b8 i/ P7 N        }
" h+ |  N) }: e/ B5 F6 a        CS = 1;            //CS置高,片选无效) j' a/ M2 m+ h: j& }4 T2 h( |* [
        for(n = 17; n != 0; n--) _nop_();  //Next Coversion需要延迟17us' a; |$ H% |. n) |  l
        return (tmp);$ K* S) m  G2 }  t4 G" U5 v+ ^8 {
}
& y8 ]% s3 o; t: c, ^0 W*/2 _; U; x7 D1 D! {% T' [6 _- W  D
//****************************************//
6 C) w  _1 F) C) ?//函数功能:将模拟信号转换为数字信号
% U8 Y7 r% ], t! @! D//函数名称:TLC2543_ADC()
4 E$ L: i9 X9 e9 K% H8 |//输入参数:uchar CH_i
9 [3 ^4 s: g7 Q6 g( Y4 J3 }; @$ ^  R//输出参数:uint类型* n5 Q0 G1 o% H! Y/ k/ X$ {+ v0 `
//****************************************//# \4 d& l; }6 K' Q" m  F
unsigned int TLC2543_ADC(unsigned int CH_i)           //CH_i,通道值
5 R1 S9 U, Z( g5 u. O{
( j6 P5 u5 u, {  y" T- r+ u) l* ~        unsigned int AD_Val = 0;* n4 F; |1 y6 v( z9 K" Z6 g
        unsigned char i;
, ?' ?* x6 V5 z$ L( _0 Q- u0 m# q! K        CS = 1;                                                //一个转换周期开始$ ^4 b/ ~2 [) X; u, n( _
        EOC = 0;6 K3 x( g* F8 I, w; S8 |; k6 e
        CLK = 0;                                        //为第一个脉冲做准备' h, _6 S% V3 p' i  ^$ `3 f0 b
        _nop_();0 G9 |4 S: T) |" `3 x  ^
        _nop_();
0 f, R5 z/ ^6 V        CS = 0;                                                //CS置0片选有效& x) w3 c8 x& [! ?0 p7 f0 s: T
        EOC = 1;                                        //EOC开始应设置为高电平+ s5 @( a9 J4 {% d& l$ B% _) F7 \
  CH_i<<=4;  //将通道值(D7,D6,D5,D4)移入高四位,转换通道设置5 C! @2 D+ ^9 u9 q% Q) N
  CH_i|=0x02; //D3,D2,D1,D0=0,0,1,0 ,输出数据为12位,先输出低位
3 h4 m$ O) V- w8 U7 Q# j        for(i=0;i<8;i++)         //将A/D转换方式控制字写入TLC2543,并读取低8位转换结果( g2 z- D  _& F4 g- q
        {: T: m! G* N( K, q: p
                + E: T; I( x& N- P
          AD_Val>>=1;   //将读取结果逐位右移(先输出的是低位)    ! p# k) p: x. X. G# o* g9 f3 M) X
          CLK=0;
8 z) a6 O0 Z. [+ r3 Q9 Y. E2 t          _nop_();
; {( m$ T. c8 q& f7 T: e    if((CH_i&0x80)==0x80)        0 {* K% S# H/ X* X6 J$ r
            SDI=1;               
8 h1 @$ y9 C/ v5 s          else
& S1 Q1 f! \7 g7 |7 `6 I            SDI=0;3 F) v5 y) m  t+ n% I  H
            CH_i<<=1;        //在脉冲上升沿,从高位至低位依次将控制字写入TLC2543
/ _  q: @$ R) {* T& @0 q      CLK=1;        9 z7 P. W# g$ t7 V, j0 r4 Z
      _nop_();
; i* K3 P, X! ^# M, z8 c          if(SDO==1)                    //在脉冲下降沿,TLC2543输出数据,写入AD_Val的第12位4 y2 G+ @! b# Y5 T/ c
          {
+ ^  j/ Y" X% ]( b            AD_Val|=0x800;         
# p1 ?; g" u5 j! }2 {# i          }  C( p2 {3 H0 Y7 M+ o
          else5 A# v* K$ c& W- E, M9 ?8 `( h+ l8 L+ _2 i
          {
) `/ N3 s) q/ v: F7 `            AD_Val|=0x000; / s) e8 c  G! N( g( ]
          }
0 v0 |( H  I. r& `1 O0 L" p# e        }" D$ c# c$ l; Q+ s8 c" d
  SDI=0;        //8个数据流输入后,SDI端必须保持在一个固定的电平上,指引EOC变高8 ^1 P9 t- M+ q) D9 E% ?5 I4 N
  for(i=8;i<12;i++)          //读取转换值的第8至第11位
3 @/ k5 q& ^+ d8 Z  `2 G5 [  {
$ _2 x2 g+ @, J+ w; g    AD_Val>>=1;3 o! L% G) s; r, E6 D0 E! w8 B3 M
          CLK=0;                       ' m# F5 A; I. G: \0 Y* T
          _nop_(); 3 K7 }# z5 L+ _$ h
    CLK=1;      
6 V8 G0 G5 a3 E8 S          _nop_();
6 N# X5 W3 o- x1 m* P          if(SDO==1)  : o* Y( ?" O, y3 y6 n/ k: k" r4 ]
          {# Q, s& T, _* k7 z
            AD_Val|=0x800;        //在脉冲下降沿,TLC2543输出数据,写入AD_Val的第12位
1 ]% m5 p& K5 `( s          }
: s: P  `: [) n& W8 R          else
# l. f" M- ]0 t3 Q          {
8 @4 |6 |% M) {" l            AD_Val|=0x000;         //第12位写 ‘0’% i0 c0 s6 v/ h0 _% m
          }
+ B5 m1 r$ m2 h4 [2 t& X3 W        }
, ^" V2 h% {- u4 R; d8 ^- |% J( H  CLK=0;         //在第12个时钟下降沿来临时,EOC开始变低,开始对本次采样的模拟量进行A/D转换,* K0 Y& ?# \! E- H
  _nop_();         //给硬件一点转换时间
" r6 V7 c6 Y- Q' Y  _nop_();: F! S  W) p9 r4 ^
  _nop_();
) ]+ `* A5 |+ V  _nop_();
" ]7 p, D$ S) W( ?0 l1 Y  _nop_();
* X, U' ~0 p3 v# [! a2 t% o  _nop_();# z; r# ]' o* X" Z$ q$ k
  CS=1;      // 停止转换,高电平无效
" Q! ?2 [5 W1 K! X; O3 B  EOC=0;  
( n# l8 F8 \4 t1 c  z  return AD_Val;
) K! K* z0 R) |! Y4 _}        5 b9 a/ ~0 _: a' Z- J
% f5 S9 O# ^2 S; e
//****************************************//
3 X, R2 B6 s2 ~' j//函数名称ata_Conversion()
. V7 c6 `3 ], r$ ?1 w//函数功能:电压换算
3 Q! Q" O; H8 v$ ^//*****************************************//
( L/ v( C$ o" N2 \) c$ uvoid Data_Conversion(void): U$ H. C! M% w. a3 b7 F
{
' r" Z  ]. K2 z1 v0 ]/ `        uint ad_val;* n. A" V# {8 M' I
  unsigned char o,p,k,l;
6 M- h0 K3 g3 p        7 H$ h: p* \* W  r" ~& X
        ad_val = TLC2543_ADC(4);1 m0 n7 m7 D$ H, X4 T+ ?. W; U; R
        o=ad_val/1000;                   //取千位数字3 K+ o. E% s5 E1 c' H% P
        p=(ad_val%1000)/100;           //取百位数字
/ V; G  ~& O: H& o        k=(ad_val%100)/10;               //取十位数字1 O  u; u2 `  f: q8 S
        l=ad_val%10;                           //取个位数字' G7 ^# B. D8 L7 U- ?% J
        write_command(0x80+0x40);+ J6 Z7 }: E, F; y/ V; `
        write_date(0X30+o);/ `+ ?* d; W& j3 w+ O8 C
        write_date(0x30+p);
% c" n6 O* O/ ?+ W        write_date(0x30+k);
6 e& R, K  e! v, i        write_date(0x30+l);
; g% e' u( \- l) z" _, J3 t" D0 d        //delay_ms(1000);8 }6 z6 M; ^: U  {3 H) i
        if((X3==0)&&(X2==0))        //0-5V
4 j2 u3 b* ~( |2 h2 L        {- V/ w2 H) q' G$ Z! x- X0 c
                //ADD_A = 0;5 o; `6 g6 s# p" L" Y6 Y
                //ADD_B = 1;# m3 F8 G$ d, N5 ?5 S! c+ y5 n
                //ADD_C = 0;
  a5 P7 ^4 s  S                Volt          = 5.0 / 4096 * ad_val*1000;                //(100-500)# a$ K3 A: x* Z- E5 `# R
                LCD[0] = Volt/1000;         //千位  n9 D. G4 H8 J0 c" D5 T" T0 ^3 R
                " _5 T; |6 U8 {: q0 U
                LCD[1] = Volt/100%10;  //百位  I0 j8 j6 r2 E4 h6 @
                LCD[2] = Volt/10%10;    //十位
: S) J8 g( Q/ [) R9 I6 A  X: A                LCD[3] = '.';                                //小数点
( q4 W2 `& r' D, y                LCD[4] = Volt%10;           //个位
, s5 {( f4 N% C                LCD[5] = 'V';                              //字符V + c$ M. A6 _: b6 u" s4 R+ A
                                                                                                                                  q5 B* S. ^+ J  \2 j
                write_command(0x80+8);7 h: f; N; K$ Y* l  Y
                write_date(0x30+LCD[0]);. x/ ^; |9 y% Z
               
3 }) [" Q4 }& D3 Z. o                write_date(0x30+LCD[1]);
; ~$ _( A0 V: L% g" W) f! j5 I                write_date(0x30+LCD[2]);
8 i$ u" Z" c! u, V, @8 S                write_date(LCD[3]);( b/ Y& |5 N! T1 Z' f
                write_date(0x30+LCD[4]);- H: ]# ]5 b6 y# w# i2 v2 b
                write_date(LCD[5]);& F( R; K; p5 v- O5 x) s
        }7 ]- _( r5 U+ e8 }
        if((X3==1)&&(X2==0))        //5-50V& V8 ~8 B/ A9 N) u, W
        {. i) l' R6 K/ Q" B2 F2 X8 ^
                //ADD_A = 1;
, j/ z& E1 e$ b3 a. o7 p7 Q                //ADD_B = 0;
2 [4 M' ~& n3 B0 w+ t( k  A5 B) f                //ADD_C = 0;) p, l$ d! ]4 ^, c- n
                Volt = 5.0/4096*ad_val*1000;        //(50-500)3 U% M0 s% U/ N$ b+ U4 I# J
                LCD[0] = Volt/1000;         //千位
: i; }- N6 q8 N' I8 y                , F0 R4 G, Z. I: M4 C  |2 c- N
                LCD[1] = Volt/100%10;  //百位
/ \1 W. L) z1 d- W               
. i# z; {. {# K) b3 n6 c) l                LCD[2] = Volt/10%10;    //十位2 Z, a# L3 S* G, [2 f
                LCD[3] = '.';                                //小数点
" h' q. ^- e) K: v# u/ L6 C                LCD[4] = Volt%10;           //个位
- ^7 Q7 Y. Z4 `$ d% s                LCD[5] = 'V';                              //字符V 6 Z$ B* s, X3 u$ p/ y3 F/ [
                                                                                                                                
7 ]; W, t# i1 o                write_command(0x80+8);# u; }2 c: H1 S* k
                write_date(0x30+LCD[0]);
6 s/ _8 W* k; x1 A5 F& \6 ]                6 ?% ^- ]+ D2 O4 s9 r
                write_date(0x30+LCD[1]);
. _/ D/ a, o! Z" d# w6 S: L3 z, Y( i               
0 o! G1 D# _) R/ l                write_date(0x30+LCD[2]);
4 L" l4 K9 Z3 ?$ B                write_date(LCD[3]);
5 R2 Z) c' |  O/ p                write_date(0x30+LCD[4]);- U: y& s% x  g! E0 p
                write_date(LCD[5]);/ {4 l+ V* O2 O; {7 a5 ]2 X  c; I
        }
5 H0 u' s- i* k: Y        if((X3==1)&&(X2==1))        //50V-500V: k" P% i1 |+ b
        {9 t9 }2 ~4 c. C( X& w8 X
                //ADD_A = 0;2 Q/ D+ `4 y) Z" r' }* H9 S9 }
                //ADD_B = 0;
. q% E5 V: C! S/ E                //ADD_C = 0;
$ X5 @, N" Q. ?4 e$ i% D                Volt   = 5.0/4096*ad_val*1000;        //(500-5000)
+ s2 z8 E4 \+ ^! P                LCD[0] = Volt/1000;         //千位! m$ T. b6 s& D" O
               
2 z! W; C- x! f+ h                LCD[1] = Volt/100%10;  //百位
+ O' ~: S% Z6 H9 q. u2 x               
6 |7 Y7 E+ L8 X) B                LCD[2] = Volt/10%10;    //十位0 t, D" i% V, a0 i1 b4 D7 P6 X/ L
                LCD[3] = '.';                                //小数点
( S* m/ C( t2 B) d# u                LCD[4] = Volt%10;           //个位; ]. z0 A- r# \: A4 }
                LCD[5] = 'V';                              //字符V 2 S% z. _& F  C8 k5 F4 s3 j
                                                                                                                                
: n1 d  L1 l3 l7 q6 Z2 r                write_command(0x80+8);5 H8 q8 Z2 v1 |* W) ]
                write_date(0x30+LCD[0]);
: L6 L, Q+ t6 `6 U! q. Z/ b               
1 Z: |$ A+ ]# B4 w7 q% N$ ~  Z                write_date(0x30+LCD[1]);
( N. O+ r7 j" d* M6 u( Y+ H                % W' e: }% J/ z' R- ~$ D+ ?
                write_date(0x30+LCD[2]);, D1 p7 K; P4 D4 _
                write_date(LCD[3]);
- s/ I: s" b. a; q  q" L" {( Y                write_date(0x30+LCD[4]);
, ~6 M8 t+ {6 L9 c0 w+ n                write_date(LCD[5]);
5 N6 i# W0 ?( |7 r0 I        }) O) j4 V' p, a6 J
}
% R" O  g; }# v4 F" i! u  \4 Z+ Y: B6 s5 d. L
void Volt_To_LCD1602(void)
& O: U+ n$ z" q* A{ . F) `4 H# j- b' i+ A
        Data_Conversion();                     //电压换算并放大1000倍
: P/ c% ]: p! ~/ h7 j- W3 T}
  N9 `! N/ O* I8 T; x" J        
$ _( t  T4 W* r) j: t8 g) cint main()
  L  c' p# \0 _3 D{% J3 z0 A- o! Q0 V2 Q1 \5 L  X( y
        //uint m;
! s" y6 s# E! }1 o) N/ |        LCD_init(); 1 P# Q4 U3 j: k9 G) t6 z
        //ADC0808_Init();
0 x, J' u8 t# d7 b        //ADC0808_ADC();
$ C& l5 C' j, u  delay_ms(100);
0 [* Z- P' X. i) w  write_command(0x01);
) |/ \% F3 N; W2 H' k  \3 S  L        write_command(0x80);" A9 j7 I% |, k
        string(0x80,"Voltage:");
7 W! a( W% l% X1 _        //delay_ms(2000);
1 t) b. M6 Q) y3 p, M+ I* a  o! }; A" {
        while(1)1 t% Z- {- o) H  t3 m
        {
: I5 a+ R8 R, ]- s# D7 }+ @; j( ?3 J, Z
                delay_ms(50);
: J* ~, l& R) A% i                Volt_To_LCD1602();
$ A. E+ t& {9 m+ o  H                //delay_ms(4000);. R8 [+ U3 t4 m& X7 ?7 Q" K& [- k' P
                7 j7 k, C, _: B* a0 ]& Z4 f0 `3 u
        }
5 T: d* o( {. G; c# S) v0 N0 F' F}
9 t/ v; t, B- d% g
下载:
游客,如果您要查看本帖隐藏内容请回复
+ u4 @1 X6 A( T0 m

该用户从未签到

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

该用户从未签到

3#
发表于 2019-11-10 16:32 | 只看该作者
谢谢楼主的代码。
3 x- N& U/ T# o& }8 y" `- _

该用户从未签到

4#
发表于 2020-5-15 16:05 | 只看该作者
感谢楼主的代码分享!9 G/ {3 S! C$ G; f  l+ @8 Q

该用户从未签到

5#
发表于 2020-12-14 14:07 | 只看该作者
66666666666666
4 Y0 i8 k8 `* o1 z1 |

该用户从未签到

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, 2026-4-19 00:43 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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