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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
51单片机数控电源 tlc5615+tlc1543程序
" k3 G& o: D1 g  B4 Z) N: ^
0 S+ q" n# p8 Y. G* M2 n. }

4 N  {# y4 N$ r6 K' o( H数控电源,51单片机+tlc5615+tlc1543' o& ^" U1 e, v" o9 T; F+ ?

+ S. `4 Q4 A: b源程序:

( l$ Z. W; J$ Y" P5 Y7 |9 }- g/*最大电流为6A,最大电压为40V*/
" b' u1 A9 j  o. C$ p8 a1 L/ |+ w#include<reg52.h>- O) r2 X/ W6 O
sbit sclk5615=P1^0;                                                                                                                                /*dac tlc5615串行时钟*/9 D% z7 i( r3 q2 H4 i  |, R  ^4 e; E
sbit din5615=P1^1;                                                                                                                                 /*dac tlc5615串行数据输入*/7 ~  s5 ~8 K5 s) E; {2 X% W% j; k! ?% ?
sbit cs5615=P1^2;                                                                                                                                  /*dac tlc5615片选*/) W% A2 |& h; K! b
sbit dout5615=P1^3;                                                                                                                                /*dac tlc5615串行数据输出*/% K  V8 [. V# C! T6 v
sbit eoc1543=P3^0;. E' [1 F3 m: V) a+ X
sbit sclk1543=P3^1;
+ _! N$ n9 p3 U: B+ n4 x" qsbit addr1543=P3^2;; @6 n5 G$ s, [$ |
sbit dout1543=P3^3;& g, k& e8 `; C+ q* e
sbit cs1543=P3^4;
/ ?9 j% C% {  [void Delayms(unsigned int t)                                                                                                    //延时毫秒函数:% i. c0 l* t1 ?/ M* w
{
& g, x* k2 u. j/ L: ~( k  E        unsigned int x,y;
4 P& h. D" w& q: n! C        for(x=t;x>0;x--)
" s! A* g/ ^' y/ ^. j% B" h1 i                for(y=120;y>0;y--);
$ }/ c3 `! D* j: ~9 I& S2 P" R; o}
# F! }9 t/ v4 ]6 Hvoid TLC1543_init(void), Z7 P3 w9 V" g% x) X/ ^
{) n" T# z# s! _# Y0 H& Q  R
    cs1543=1;8 Q: t8 L1 a- c! D% x# g+ i
    sclk1543=0;5 x# H# u# ^7 o( }5 x
}9 D0 E2 @' [3 c- n; I2 U
unsigned int ReadADC_TLC1543(unsigned char ch); o  p- W% ?/ r0 j# S( l# g: T
{- M( w1 F# }: ~
    unsigned char temp;
5 ^! W: {# U$ Z* `5 a    unsigned int adc_value=0;
% t' u9 M  M( H* @" H4 Q    ch<<=4;
7 Z$ V9 T# g2 m    cs1543=0;
% m: k1 G+ p( [1 f: f: y, x    for(temp=0;temp<10;temp++)         // 将判断语句改为 temp<124 T, p/ w6 C: y9 }9 g
    {                                       // 程序可移殖至 TLC2543.
, m  B8 q/ e; L% j        adc_value<<=1;- C  H& F/ a6 y* Z
        ch<<=1;
1 K5 E) Y1 F7 C        addr1543=CY;
1 O# Y; T& @" x. M& W' l# c        if(dout1543)   4 G6 R3 _2 I' h. z2 e
                        adc_value+=1;
8 t$ G9 i9 f* O$ p7 L* Q! H0 [        sclk1543=1;
6 n8 \7 @% e3 O        Delayms(1);' {  [6 S6 p( H4 m" H
        sclk1543=0;
  k" a+ [! _( t/ |5 Y0 m    } * l5 m+ T4 n# _7 _
    cs1543=1;
& q6 P+ m7 r, h3 F8 v    return adc_value;9 _! d+ m/ K) R1 }$ g
}  S8 T4 H8 ^9 C  k: `  c
void WriteTLC5615(unsigned int wdata)                                                                                //写TLC5615数据函数:4 I' ~+ [6 C9 x2 j! C5 c: R
{
3 p( g) M9 ~& o3 a4 @! r        unsigned char i;' K7 D. R& M9 o! @  `0 I
        cs5615=0;                                                                                                                                        //片选使能
' c2 t) v3 S) k" d/ k6 y        wdata<<=2;                                                                                                                                //将数据左移两位,补两位扩展位,组成12位数据写入0 s8 V- M" n$ W
        for(i=0;i<12;i++)                                                                                                                //写入12位数据
* N6 @5 c) R1 x9 i; b        {1 U( ~; b' ?# F
                sclk5615=0;# @: |0 c" j- ?# I  ?
                din5615=(wdata&0x0800)?1:0;                                                                                                //取出最高位(第11位)写入
, L6 [1 e. ~$ q8 S2 b                sclk5615=1;                                                                                                                                //上升沿送数据
/ V! M+ [, z6 z& ^0 ~1 ]                wdata<<=1;                                                                                                                        //下一位移到最高位
: {& K7 T: T1 s. Q* I1 y6 H7 h        }4 Y. [8 q7 J; `( {$ V
        cs5615=1;                                                                                                                                        //片选禁止
5 V5 T# p- C4 V# z/ I1 T* R0 X}9 `: C) d8 z3 j7 n5 h) [
float get_average(unsigned char ch,unsigned char time): [. V! K5 |- P1 f% f! ~
{
. B. B) C+ A# G* D1 Q7 `4 q/ A        unsigned char i;
" o0 G: @/ ~& ^5 R4 b2 M        float v;
0 T5 D, z6 L) P4 x$ `' e        v=ReadADC_TLC1543(ch);* [& D" _8 }9 F9 [# J
        for(i=0;i<time;i++)/ G. e- j2 m. R2 Y
        {
) J6 I5 }7 r$ b2 P2 B                v+=v;( Z/ _6 q5 S/ L, ]$ h4 S
                Delayms(5);! V2 ~( E, }1 f. Y
        }
0 O% x4 M) g$ R- m2 O+ L. w# X        return v/time;
5 B, o3 i- \/ a2 a( G0 A$ @8 C}+ p! i# C6 ^% X( L, T! }+ P
/*unsigned char KEY_Scan(): A- y; p, ?' }) K! A
{0 C4 e% g# `* c6 d( C* ~6 Y0 y
        unsigned char temp=0;% ^/ t0 c9 S% f8 u
        unsigned char com=0x55,com1=0,com2=0;7 c) S6 f5 M  R7 g. ~$ t
        P2=0xf0;
1 g1 y4 {# K9 Q        if(P2!=0xf0)$ r4 ^+ U5 {/ Y
        {- ?0 x' p* g+ W6 A
                com1=P2;2 X* n* {5 `. o
                P2=0x0f;
$ `# d0 Z/ E: c+ {- q                com2=P2;        
( E. \2 @) m* I' W% L" L3 z$ y        }0 x# |1 }( W( ^6 }, y
        P2=0xf0;
' q# `6 k: A! R/ r2 X- Y2 e+ M    while(P2!=0xf0);          5 a" q; m8 w0 F: N$ p2 D
        temp=com1|com2;
6 B. D" j' e) ]7 l        switch(temp)
5 L8 t+ v0 L' Q$ {$ N        {8 X) l7 l( ?  S+ B( y* }6 n
                case 0xee:com=0;break;6 j$ F3 c' E  q' S/ k, _4 X3 M
                case 0xed:com=1;break;
5 \3 q; s. V9 m. Y: V9 d. o                case 0xeb:com=2;break;1 r# k  L8 ], U; w2 U
                case 0xe7:com=3;break;
' t) H! V5 K/ E( I                case 0xde:com=4;break;
$ [  B6 u1 b" \' s7 d                case 0xdd:com=5;break;" M6 K2 z: ~8 m
                case 0xdb:com=6;break;0 ?' u' O9 s6 P2 D
                case 0xd7:com=7;break;9 L! p# L( i( z/ d: |% z
                case 0xbe:com=8;break;
: v0 y0 |( C" k                case 0xbd:com=9;break;
. f% `  c1 B8 W/ L' p$ E% A                case 0xbb:com=10;break;2 K% B1 E( a1 q' e+ X+ v
                case 0xb7:com=11;break;( m! a' P; o2 c% a% |4 N
                case 0x7e:com=12;break;
* ?) k5 N/ z. B. C0 v: A' K                case 0x7d:com=13;break;" M' v* k  a( T$ l% s
                case 0x7b:com=14;break;        1 N4 C' b" A5 R( T" `
                case 0x77:com=15;break;                                 
( D- S  S* ^* ^- w2 U5 ]! y3 H        }
; W  X, ~. \. F# a        return(com);1 H7 w3 ~4 v6 P3 s/ O4 y, T  f
}*/& T1 q8 J1 {. H& ?6 p0 u# ?1 ~5 L4 e. }2 @
void main(void)                                                                                                                        4 o9 A; }& S/ G; m, ^6 d: b" U  o
{
4 U% ^0 _9 F) C  ~. E        float dat1,dat2,volt,current;
) k. J% B( f( m- j1 S. u: ]        TLC1543_init();                                                                                                                & R1 }/ A6 }& l% z8 q
        while(1)
! z4 M1 P+ |7 q        {. T% e+ `* G, z4 j, S2 r, `
                WriteTLC5615(100);/*向dac写入数据*/) [; l1 A8 X$ S7 Z
                dat1=get_average(0,10);/*通道0测电压*/
7 S0 i5 E0 a) `- V  h6 ^) r                dat2=get_average(1,10);/*通道1测电流*/
6 ?1 _/ _$ v5 I6 [6 s                volt=dat1*8;/*最大电压为40v,分压为5v,分压倍数为8倍*/
  R- J; t1 z3 a. C/ c6 O. E                current=dat2*6/5;/*最大电流6A,采样电阻为1mΩ,采样电阻上面最大电压为6mv,差分放大100倍,即最大电压为6v,分压电阻分压后变成5v*/5 X! B  N1 o1 w/ S& r# ~

9 v; I- v4 s2 ^& g% i
* P6 L" H7 @# V( A+ a8 N8 Y' h6 X
1 I* X+ {$ ]% M…………余下代码请下载附件…………
' u/ S$ g/ R% p1 C9 C% i* U7 ~7 |
$ `9 K/ R8 j  C  W) V下载:
" m# X. c8 H% o# ?) g5 I
游客,如果您要查看本帖隐藏内容请回复
( x5 W1 [* ]3 Z4 {$ F

3 D# y4 b2 i) B+ e& M+ w7 ^- ]

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-13 04:35 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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