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

51单片机数控电源 tlc5615+tlc1543程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
51单片机数控电源 tlc5615+tlc1543程序+ V$ k* P/ x0 `- f
  A6 a0 ~$ q0 s, U) R' T; z5 d

& g. x0 i! \1 F0 v4 e& _数控电源,51单片机+tlc5615+tlc1543% S% q+ c8 z2 V8 I
! m# q( T6 X  _* s5 }) @
源程序:
- M0 j! q: K' o9 p) p1 R( u
/*最大电流为6A,最大电压为40V*/
. p: a% K2 V+ ~4 g0 F#include<reg52.h>( D/ E" L0 n% K8 y$ x
sbit sclk5615=P1^0;                                                                                                                                /*dac tlc5615串行时钟*/* C" O3 j) g* I. _& ~& m/ w
sbit din5615=P1^1;                                                                                                                                 /*dac tlc5615串行数据输入*/* g* U, X) T8 K" i7 S
sbit cs5615=P1^2;                                                                                                                                  /*dac tlc5615片选*/
' d3 O3 [- D7 y( Fsbit dout5615=P1^3;                                                                                                                                /*dac tlc5615串行数据输出*/0 ^$ z  `4 {0 h" r9 a1 K4 ?
sbit eoc1543=P3^0;
# O" N3 l: V& W6 j; Dsbit sclk1543=P3^1;
# y- T( U. P' S1 V/ usbit addr1543=P3^2;" N4 n4 k& t0 h* J
sbit dout1543=P3^3;
3 r& g5 w8 f: asbit cs1543=P3^4;4 m$ M9 I6 z; h  `( ~2 y
void Delayms(unsigned int t)                                                                                                    //延时毫秒函数:
( u  E# R5 p  v$ o( n{
: l! C- i! E9 @8 P, y( l, o$ H        unsigned int x,y;2 ?( S/ h; l/ b, G9 Q6 t
        for(x=t;x>0;x--)
9 `) |5 p! h& R# O( l: Z$ E& V                for(y=120;y>0;y--);
* Q2 ?' f8 y7 D2 p}9 ]0 a  R' _5 _3 a
void TLC1543_init(void)9 j$ R" R% W( d0 K; L8 h
{6 F6 H$ |! ~9 B" |0 o5 u+ `; L
    cs1543=1;8 D. z. P0 Q, c* F$ J* D5 L
    sclk1543=0;; e; `& h$ ~; X  r: D6 y/ o* q
}
5 J, \1 H+ p3 z% U! _: P- Qunsigned int ReadADC_TLC1543(unsigned char ch)
# T0 s+ [9 }. t! L5 R/ F3 x$ u7 W{0 O& p1 b" p+ x) r1 g% `' ]
    unsigned char temp;
, x! I/ w. O/ Z. {    unsigned int adc_value=0;9 w3 n7 _* D' g! d
    ch<<=4;
& W2 b4 x7 ?. s8 [0 b    cs1543=0;
1 E2 Z3 f3 K( g6 @9 _4 n    for(temp=0;temp<10;temp++)         // 将判断语句改为 temp<12
6 W0 n& h: A( L$ X. w; ^4 B+ u* q    {                                       // 程序可移殖至 TLC2543.
) Q0 h( j/ J4 {7 c: [. J        adc_value<<=1;$ K; ~4 z7 k- C% [! P2 Y/ i
        ch<<=1;/ y5 O3 X! G/ ~) \! n
        addr1543=CY;
& e- E0 ^* b, t        if(dout1543)   
3 S( r+ {8 d- b/ y                        adc_value+=1;  D9 y6 u! O; r5 P) f
        sclk1543=1;2 D* w  m* R( s, P2 ^
        Delayms(1);. n7 F# V3 U/ d/ @
        sclk1543=0;$ K( e. k- y! b2 ]& N
    }
$ s! \. B" B' t! c, L1 {$ Q9 o    cs1543=1;0 u( W9 v9 S6 C: e' _( w. d
    return adc_value;
5 V9 `! z! R7 S' c}
$ b, [3 _( o& D& ~* K- k: B/ @void WriteTLC5615(unsigned int wdata)                                                                                //写TLC5615数据函数:# G7 T- E! t: @
{3 h% @$ k7 w" W% R# H# Q! f( Y# K
        unsigned char i;
! |/ o( @( T/ \, D& n+ U  }6 n$ Q8 n4 ?6 {        cs5615=0;                                                                                                                                        //片选使能
, G2 ~. L# N$ v6 U        wdata<<=2;                                                                                                                                //将数据左移两位,补两位扩展位,组成12位数据写入$ d4 i, q" K1 I: W- @# x) d/ _# }4 T
        for(i=0;i<12;i++)                                                                                                                //写入12位数据
1 b+ i1 M2 s/ }* p. H5 s        {* o3 R2 l+ @: ?, i& n( j
                sclk5615=0;
: w/ U  W. y, w: P4 G2 L! \                din5615=(wdata&0x0800)?1:0;                                                                                                //取出最高位(第11位)写入( E$ Q. J6 I4 @+ J' M# c0 w: {
                sclk5615=1;                                                                                                                                //上升沿送数据
. x# }( |5 N  U( x* G' L                wdata<<=1;                                                                                                                        //下一位移到最高位
7 w& @/ K+ M6 c( @9 y' G: P3 H5 ^9 \2 k        }
+ ~* V8 B8 d3 S+ o6 {        cs5615=1;                                                                                                                                        //片选禁止% }! Y# K$ [- T( d( m
}1 d6 ^3 k7 M$ Q9 N# Z
float get_average(unsigned char ch,unsigned char time)
. |7 u9 L; t" M{, }6 d8 p& m5 L* Q: \
        unsigned char i;
/ E/ S: H5 l8 L! h8 e; j4 v9 `( b        float v;, B+ i% i6 r* w' \" m2 o8 G: {
        v=ReadADC_TLC1543(ch);# R. J: R$ q! R& }1 D
        for(i=0;i<time;i++), ?; [) o9 A* }4 s0 L0 k
        {
. q8 K5 ^" z+ r- c                v+=v;7 F- ]( M- @" F& ]# p! I1 t/ v
                Delayms(5);3 z! g- ~  `, Q
        }' p4 ~% N$ M6 d* F2 ]. O; W
        return v/time;& x; b, B+ K; k6 x
}
  ?3 {9 P/ |" u4 q; w6 N5 b  k/*unsigned char KEY_Scan(). p4 k3 l+ D7 G0 W
{
  D  m/ P. Y2 K6 [6 m, H/ n. M        unsigned char temp=0;4 C8 N( b+ Q2 @, y$ Y
        unsigned char com=0x55,com1=0,com2=0;5 m9 r" Z) o7 ~1 d- Z& D5 @- `
        P2=0xf0;, [& l) F( H. h2 X; A- t
        if(P2!=0xf0)
% t- y# x% ]0 `! i" |        {- V* {' W+ M. f( T7 t# r" j
                com1=P2;4 z5 U# g( @# Q
                P2=0x0f;  x1 Z2 Q! v( h" s3 P* J* V
                com2=P2;        
! h8 c% a( |+ ^' J3 z) V        }
1 m6 b: L  ?+ S# {. k2 [        P2=0xf0;
0 A* o8 o( M, J( M; y    while(P2!=0xf0);          # U* Q% j9 n. s
        temp=com1|com2;
, u/ I5 J% R3 B4 g. G7 V2 h! y        switch(temp)
) l+ o  f, K8 _        {
, z, V% ^5 w1 R* {9 Z* Q/ u! G                case 0xee:com=0;break;% i* N% {/ C1 x1 T' z  l  W  M; @
                case 0xed:com=1;break;. f$ l4 p* x2 j( H7 `" ?
                case 0xeb:com=2;break;. N) E% e7 \% N( n: m! D
                case 0xe7:com=3;break;: D: M" V6 K8 b
                case 0xde:com=4;break; 8 r! u# F+ f% w2 g/ n
                case 0xdd:com=5;break;
1 Q4 W! Y; O6 V9 E                case 0xdb:com=6;break;8 y3 S7 B4 v, ^$ L5 f7 Q
                case 0xd7:com=7;break;% F: [4 c) e/ e! c/ @( g' X6 k
                case 0xbe:com=8;break;
- s1 p; D  L5 F9 F  ]" }                case 0xbd:com=9;break;# ?0 p4 l/ L! ~
                case 0xbb:com=10;break;' O7 W" ~$ q2 G, {
                case 0xb7:com=11;break;
; C4 [) E5 E$ X! k) w4 f: n! K                case 0x7e:com=12;break;
6 x" d% T0 p$ f/ x# t                case 0x7d:com=13;break;1 j; p$ B% ^4 |8 [6 {6 R$ ?
                case 0x7b:com=14;break;        : `7 A: g, O. q1 }" d0 w
                case 0x77:com=15;break;                                 
6 R) @% Q6 n% W4 r$ e  l4 G/ t        }
, ~2 [5 `. k9 @2 L        return(com);5 i' y& }9 H' O3 y: u
}*/
9 B2 n4 s9 s. J9 U8 Y5 O" Y6 A! avoid main(void)                                                                                                                        
5 D. ?3 C3 v& O' \+ H- P! _{  J: ^, L/ F5 Q
        float dat1,dat2,volt,current;0 |; x4 L0 Y+ y! w" h
        TLC1543_init();                                                                                                                ; o' y; s. M; H8 v  g
        while(1); W% d% d# |$ P  H9 H. ^
        {& ~8 S9 C: N, \5 h! e/ `( @
                WriteTLC5615(100);/*向dac写入数据*/6 n1 {% e; e: Q4 g
                dat1=get_average(0,10);/*通道0测电压*/
$ w, X' V4 ]  T7 L" ?  h- {                dat2=get_average(1,10);/*通道1测电流*/& m% P9 @% K  J0 T0 \, T
                volt=dat1*8;/*最大电压为40v,分压为5v,分压倍数为8倍*/2 m5 M. v$ c5 m  }0 U8 t
                current=dat2*6/5;/*最大电流6A,采样电阻为1mΩ,采样电阻上面最大电压为6mv,差分放大100倍,即最大电压为6v,分压电阻分压后变成5v*/
2 }! c, q9 L3 u4 ?( v
+ V% A- b' Y( T+ r) l" k/ ^1 m. L" `9 n" w. z$ _2 `- [
6 ]. t# T2 a: J/ Z
…………余下代码请下载附件…………
8 k* ^! l, i( A& ~) S
0 _: c. B& h! e0 T" R% s4 ?下载:& a* M/ [' H: H% b9 @' j0 U
游客,如果您要查看本帖隐藏内容请回复

* P9 i, Z# q" ~; a; b5 {' O

' L/ I, I/ k; l: Q0 s2 z9 y, O: s

该用户从未签到

4#
发表于 2021-9-6 00:37 | 只看该作者
0P0000000688
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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