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

0-30V 4A数控稳压电源制作 单片机程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
# y& q, P4 s# ]$ r
( R  u) J7 F/ H3 {1 E/ p- [

* N9 ~1 f( m# S5 P+ x0 Y" v 9 R7 A) S6 ^, ~5 G

6 B6 c5 G4 ]; X: s& n* b, y/ p; r) a; ~! U" z3 v& ~

! Z+ @& M/ Y! n1 r% d单片机源程序如下:
0 y( t6 p7 J- c* y: Q  ^" E2 e#include"reg52.h"5 F: ^5 Y1 d2 ]
#include"math.h"/ A$ h+ u4 `+ O" u$ X
#include"intrins.h"
& ^2 m3 a  r+ N: v& |+ K3 C#include"function.h"7 W! \# f: t# [7 F) w
( N: x& M3 Y& O8 e+ K/ q/ \7 r. L; T
#define DB P0
& f% C3 l- O5 m$ [! p: e# p) V/ w' F" h
sbit RS = P1^4;( U% V6 l7 x3 p2 F, E- x$ s
sbit RW = P1^5;1 k) W1 H7 m9 U5 g  c
sbit E  = P1^6; void busy(void)//RS=0;RW=1;wait=0闲;wait!=0忙8 p6 P5 i4 N# {0 q
{
# o4 s- ^$ F9 [9 _    uchar wait;6 m# V) u# l8 K* t. _
    RS = 0;
: J5 l0 W% l+ t0 Y    RW = 1;( h" G, ^' ?) ]% h
    E = 1;. i% U1 g# m; _1 b4 l
    for(;;)
; z4 S! w+ f8 \+ c' M) e    {
3 B0 |- h1 ~. B  o0 T( Z        wait = DB;8 F: s3 [. e  ~& @. |
        wait &= 0x80;$ @6 V  m" ?# c
        if(wait == 0)break;; l4 z* m$ W9 ?0 _, d
    }' g; W1 o% M  u& e3 b& U
    E = 0;
2 J& ?( w1 Y! o6 j: \& G' R5 r. g}
6 z! n( f$ ?, J! P; {
% g7 M& [7 j6 ~, |/************************************************************************************
/ L: C3 U; s) i                   写指令函数         3 r' O5 S5 \; q7 p8 j
************************************************************************************/
; L7 l) U# E2 k! S! avoid w_code(uchar c)//RS=0;RW=0;E下降沿( s& _3 M0 ~5 x/ e
{4 {" K# [0 S* _; l2 `& c
    busy();
7 {- \7 \* P" Y3 ^' a/ q    RS = 0;
* ~# {& a6 V& y5 X8 M! _' `* B% M    RW = 0;' y/ k% U$ f( j2 c+ v( _
    DB = c;" U& G& ]2 v, H" z! b, J
    E = 1;
& ?8 J# F8 W- _! q    E = 0;
+ F; h6 n  X4 V$ ~2 V: S0 U    DB = 0xff;& `, s' L; N  ^( w& I9 h6 E+ O2 ?7 N/ _* D  V
}4 M3 V6 O6 r# w( P4 u9 I+ l

) o8 T4 T  Z. F3 O/ B6 N4 R/************************************************************************************
8 w2 o1 o( {# u, s1 [8 n1 g" ?2 R                   写数据函数        
$ f3 t% e  F( G) q************************************************************************************/
" y" T, O( L7 Z" m0 d. Rvoid w_data(uchar d)//RS=1;RW=0;E下降沿8 C3 s$ j3 T: e* m8 J
{- l1 s9 H) Q. O% S1 Y
    busy();
  ]; P1 i6 }5 w8 s. ~    RS = 1;9 c# [' G: ]* }
    RW = 0;1 j6 ~$ T1 ]8 l
    DB = d;
" q( x; ?, o6 [, G; E    E = 1;
9 h3 l9 |" |1 B8 W6 q' I) r: V    E = 0;
9 T8 R( P* l" K4 T( A    DB = 0xff;8 x* T3 i& J* i+ u7 f3 ?
}
6 }# y, O. {$ B: h: z9 Z- ~" }8 f4 y! [
/************************************************************************************
7 ~' I% |& o9 \4 R# n                         读数据函数         1 q( P* R* h# s/ b; }* E  y
************************************************************************************/3 o% y9 f' l" L
uchar r_data(void)//RS=1;RW=1;E下降沿
0 \3 }! D+ }$ O! M# Y{( e1 U" R+ @# W$ g) B8 w( P) Y: F
    uchar rd_lcd;% U4 [: t5 Y1 v7 h) v* |$ N
    busy();
. {$ [8 j7 `, D$ [+ [% ^    RS = 1;
  F5 [5 y& p5 f    RW = 1;* ?! j; B- t, r0 v9 I: K
    E = 1;
% [3 q0 j! `+ m  A* R) r    rd_lcd = DB;
- I+ }% y( `9 l& v    E = 0;
6 D: G9 a& g# l. f     return rd_lcd;; A8 N1 h9 `+ i! r/ ]! v# i
}( X% @' P2 r( W& B
7 ]/ X! O. J6 B8 D5 {% Q( t
/************************************************************************************; V: l/ x) |5 f( |
                   写DGRAM:x_lcd横坐标,y_lcd纵坐标         
3 k9 H4 _" m' _; }0 _2 X************************************************************************************/
# c2 I% r; b  g% R: xvoid address(uchar x_lcd,uchar y_lcd)//) _3 S; K$ Y2 e, C1 z0 |
{1 l% ?& N# _# q' P1 U; R, q
    w_code(y_lcd);//垂直坐标1 x- v& E. l9 N' d* L/ X
    w_code(x_lcd);//水平坐标
& X$ l& K/ y6 I( t}
# I+ l* [; V5 f2 G" m: {9 Y) I' X
/************************************************************************************
6 O: k) v  ]8 ]3 Z9 e# ~( d, z$ M& @                   初始化液晶屏
; g( \6 M+ s( h2 |                   0:字库  1:绘图      
  I: B# ?  J9 d' Y************************************************************************************/
" p+ E8 {) @" L3 ]void  lcd_rst(bit a)
5 M0 i1 {0 ~  ]; u{  ; O) T' J/ H  {2 O3 Q
    if(a)1 j: ]& Q. D# p) y
    {) z. D* N5 z4 i; V; ^0 ^7 Q
    w_code(0x01);//   清屏  3 @2 Q9 L. `7 c+ v+ B
    w_code(0x32);//   功能设置---8BIT控制界面,绘图显示ON  
' C3 k6 c& t) v- O3 e( s    w_code(0x36);//   功能设置---8BIT控制界面,扩充指令集  6 V0 y! P) \+ G# ]
    }
/ Y0 E$ k4 ]3 u    else
! v  z7 I& ~+ R& Y) a4 n5 z    {5 R/ x# D  H& W* ~% F6 @# {
    w_code(0x30);// 功能设置---8BIT控制界面,基本指令集. {# N8 ^; c: i" x
    w_code(0x0c);//显示打开,光标关,反白显示关) V9 s, t4 a" y# N, X# D
    w_code(0x01);// 清除屏幕显示,将DDRAM的地址计数器归零
3 x) f" z6 i4 R; I9 d    }- i; S+ p; L. D3 [
}
9 l  ?+ j; A- r! u1 _
7 K* \6 B& [9 G9 M' D1 x/************************************************************************************
+ s) B, I7 B' `/ Q# y# R3 E# b---------------------------写整屏点阵数据
* o) n4 h/ c0 E8 `/ K. u- B---------------------------x :图像数据的起始地址        ; F2 k" f4 d$ g1 {
************************************************************************************/
+ d4 w  L" \8 \4 V6 ~* O/ k4 b; k. z1 u* w9 d7 t' A
void  write_lcd_full(uint x )+ r1 p5 w9 H, x
{; L/ B2 C0 D5 x4 _
      5 J1 C. V7 R" H5 q8 {: C
      uchar  i,j,a;$ p5 h/ V  }* h# A; @# i1 P
      j = 0x80; //Y地址寄存器   
# j+ V- ]( E  L! J  g1 O      for(a = 0;a < 32;a++)4 v7 u0 D* y, g- [- g" n
          {4 U" K9 N7 Q; o5 l1 P# ^" j& g
        w_code(j);
8 n* l. `' ^$ i( l% T        j++;
6 ]$ Y  R8 d1 `2 I        w_code(0x80);//X地址寄存器, M0 K' w3 q2 _6 J/ o
          for(i = 0;i < 16;i ++)# X7 R1 n. o' e' x6 o$ b
              {6 y. V" b0 O, G
            w_data(logo[x]);
6 ~: T/ M% V' X7 b( C4 |- B            x++;
4 c) L) A& r8 I% {  B. _            }
" a0 J$ r) u$ f2 Y4 \        }
6 j& \! ^0 _3 ]3 a! {) r
7 d; _+ S! e1 t4 h      j = 0x80; //Y地址寄存器  
7 m$ y9 z  l  D8 Y, N      for(a = 0;a < 32;a++)5 d5 c5 G) ]. `5 C( ?7 O5 G
          {" W0 V# e# Z5 q5 z" [# l. q( C
        w_code(j);% S+ g3 v" @' t8 \/ |
        j++;0 R" J, G0 I7 r7 I5 h0 T- y7 k
        w_code(0x88);//X地址寄存器* ], R" G/ L4 {5 J' [6 c, {! T
          for(i = 0;i < 16;i ++)7 v" J% ?+ K8 M" x3 P, X
              {
, ?) e% y0 i$ W* r            w_data(logo[x]);3 R& T: P: ~! G# c8 I' p# r% ?
            x++;
) N/ \; E- w* L$ M            }
; s( Y& I$ Y6 u$ F. Q3 z' M, G' f4 V        }% \. K# b4 U( U! |9 u6 x" p) o* x
}
7 v9 N9 E! R2 M/ E" G/ h. [  F) L4 v2 {* x) D

Keil代码+原理图.rar

915.43 KB, 下载次数: 0, 下载积分: 威望 -5

该用户从未签到

2#
发表于 2022-9-29 11:07 | 只看该作者
再增加一点功率,加上显示就更好了。
& y; h, |6 y, e8 c. K" y  A: b兼顾一下对恒压源进行实时监控,经过单片机分析处理后, 通过数据形式进行反馈,这样的电压更加稳定,就能构成稳定的压控电压源。

该用户从未签到

3#
发表于 2022-9-29 11:20 | 只看该作者
调整管也可以搞这个。使用一套十进制计数器完成系统的控制功能,一方面完成电压的译码显示,另一方面其输出作为EPROM 的地址输入。由EPROM的输出经D/A变换后去控制误差放大的基准电压,以控制输出步进。从而实现直流稳压。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-12 05:45 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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