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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

6 e& F- q7 _3 L, S& T
9 F' w) S! a3 I1 _% N$ b
3 F- i' w, {0 E
8 V1 X: }  r/ K! F/ s) H. ^, r* h% N$ u" i( V4 Z
' M+ u- c) v- x4 S: }

) a; X; D5 g- u. |单片机源程序如下:
# }6 P" F% o( A* Q  Q6 n) K#include"reg52.h"0 X- i& ]3 u/ N) x( [- @( A
#include"math.h"
; w1 \) C/ ?: M3 V0 h3 l#include"intrins.h"
+ m3 R4 t: s4 O" G, o4 S#include"function.h"& O  _& j& T- O2 R

; i/ w2 P# [- L: M% s) {: B#define DB P0
) N, T; d; {' k; R
3 X' E( J0 q' Y2 N% Vsbit RS = P1^4;
& ]' B9 g! }3 m) U" C+ S- I7 lsbit RW = P1^5;
# e& |: E: E4 i9 X* V9 Bsbit E  = P1^6; void busy(void)//RS=0;RW=1;wait=0闲;wait!=0忙
% L9 y) \) T0 `. j{: \- _, ^: m" H2 A
    uchar wait;
/ V$ L5 N) a+ m+ ?( I    RS = 0;- g( ^: [9 ]4 ?- K! X
    RW = 1;: L7 e( D( v4 O. x7 J% x- x3 C
    E = 1;9 g/ U5 H) G( n3 Z8 N
    for(;;)/ D7 i- H7 F- x1 {% ?
    {6 ~+ |0 M$ K$ y! Y6 I: c- X
        wait = DB;" l+ ]: z3 @4 S7 K
        wait &= 0x80;
/ h! o! R& e/ [9 g6 r        if(wait == 0)break;0 d4 f2 F7 ^3 `, o3 `9 Y- H9 l5 d# j
    }+ P; r3 v+ f- ]0 B0 d0 C
    E = 0;
7 J. @6 H; n- f7 M! r! c) A, e}# b5 g  O1 L6 z0 e, d7 j" T6 ^

; r+ j, D" n* U# ~/************************************************************************************
0 k1 Q8 r9 x1 F5 @! H                   写指令函数         
1 c) H3 Y9 u3 f4 O9 t+ @************************************************************************************/2 X+ }5 R2 ?4 C2 T; @1 r
void w_code(uchar c)//RS=0;RW=0;E下降沿
% @' v' S2 d& }{# K  s# B3 }8 p7 ^
    busy();
) H! A" }+ J6 b1 x    RS = 0;
2 s9 D; G/ r  I3 `! y    RW = 0;1 |9 F. [; t' e2 Y9 D
    DB = c;% y2 P" M2 w7 T4 r
    E = 1;
4 ]  q' Z4 W9 M    E = 0;  x* }  X8 i/ o* s
    DB = 0xff;
1 q2 y+ _  O7 K3 V0 [3 y" J& r3 p}; c# M2 l6 w! O0 i2 X: [

. X  F% z  l! p/************************************************************************************7 `8 ^0 Z4 y8 M0 j
                   写数据函数        
; v& j0 a5 ^" x- T( f  P3 P************************************************************************************// g- x' k( F  p% H1 t
void w_data(uchar d)//RS=1;RW=0;E下降沿! y$ _. P6 u3 V8 l* B' H$ d- G7 t
{
/ J8 T; u3 l' V0 N    busy();
  l8 Q& k( y% q) C    RS = 1;
' ~  |; _) M: T1 I( K) V    RW = 0;6 d4 `  B2 ~) i2 [
    DB = d;% c/ F- X6 o5 n
    E = 1;$ p: f% ?8 W* a) K3 D5 A
    E = 0;
; `* Z# x# Z# O, k' j8 \- W    DB = 0xff;' D, h3 W$ x" U1 n) k
}
' _2 i; {( a% O' x. s8 e8 P) A
. w1 Y( R4 j8 S  ?5 D7 ^5 e7 Z$ O/************************************************************************************
: s6 E& f. j; U( u0 f! h$ K                         读数据函数         ! p3 d: y( v, L/ l4 @! r4 L
************************************************************************************/2 M' m. Q! {7 t
uchar r_data(void)//RS=1;RW=1;E下降沿% j' d. J' \4 G5 V# j
{2 l# S8 N5 B5 n; ?1 _3 Z
    uchar rd_lcd;
. N' J) n* f9 }7 Z, I* z    busy();
( a) T+ G2 k8 t% s- O4 x    RS = 1;# b1 b' |9 c- B- \- ?
    RW = 1;
$ v5 y- z/ w3 {, A6 Y$ }    E = 1;
0 I' |) j; {5 w8 F) \& c+ }4 s    rd_lcd = DB;
5 d3 [4 y/ j$ `9 [: _    E = 0;) p. W1 K8 k. ^8 w3 o6 X" v
     return rd_lcd;! A& @8 a5 o+ s9 X! d
}& f2 \4 [3 G* v

" ^" W, k' }+ |/************************************************************************************. Y4 T" _, ]- a& B0 z& V1 O
                   写DGRAM:x_lcd横坐标,y_lcd纵坐标         4 k% x' ]* Z6 B3 X" |! ~
************************************************************************************/
/ t8 F) a+ \1 B3 V( r; Z' A* k- nvoid address(uchar x_lcd,uchar y_lcd)//2 Y1 L$ z2 D2 S; g' X
{% P. i. ^2 z' R8 a& h/ X( f
    w_code(y_lcd);//垂直坐标# I- z) Z4 `" b- R% ~$ D' [0 o. Q* ^
    w_code(x_lcd);//水平坐标, N* T* g, {, C; A. P# Y" u6 c* V
}$ j9 p, u% K( ]9 M+ _) o2 r) ~
7 a/ M5 n4 k9 q* R9 p
/************************************************************************************5 R# h) j6 h( W5 K6 T8 `7 L
                   初始化液晶屏- U1 i+ p2 q; l7 T
                   0:字库  1:绘图      # d; N, n- f) E; W; e
************************************************************************************/2 B4 M/ k3 Y; R/ }+ G) A
void  lcd_rst(bit a)7 j: a2 y5 o$ c) [9 T
{    x% n# {' L; f: r( r) `( p& X
    if(a)9 `7 r' g3 o& T5 I" P) ?+ \
    {
) W( D3 z- V. V0 L) `2 S    w_code(0x01);//   清屏  % g. C! A$ q, q! [7 j" O1 {* h
    w_code(0x32);//   功能设置---8BIT控制界面,绘图显示ON  7 H: h; ]! U7 F9 S  T
    w_code(0x36);//   功能设置---8BIT控制界面,扩充指令集  - Q7 N- e6 B9 b' m
    }$ Y7 c  Y# j" h& T: p) G0 ]
    else# |/ Z2 U, v. Z, K" [
    {9 d. r# C; S$ W( E3 W! W. Y& s
    w_code(0x30);// 功能设置---8BIT控制界面,基本指令集
8 y' y6 @9 v; I: c    w_code(0x0c);//显示打开,光标关,反白显示关
& u" L7 l) b+ Y+ B3 F8 l! _    w_code(0x01);// 清除屏幕显示,将DDRAM的地址计数器归零6 e+ Q$ k6 y! S$ J6 v4 O# Z
    }
# S; T( E: P) |4 [6 Q2 M6 X}4 `9 I3 E1 H, H+ I6 K! V

, X( C" v) F% \/ q/************************************************************************************
% x5 @4 N! ?! J---------------------------写整屏点阵数据
- D7 v7 j, Z; ^; Y---------------------------x :图像数据的起始地址        
  ^. e$ s- C) B8 S1 x, N2 ^7 p& K2 S************************************************************************************/
9 F7 p% ?) q% ~* o, g
7 G# H  o; U) ~' Yvoid  write_lcd_full(uint x )
: i6 ]/ g9 o' ]3 v9 I{- M: C" e0 g; W* K& @
      + ~- S4 T4 _9 q# e' P) I
      uchar  i,j,a;
8 J9 H  K. \6 n/ `* C) _) k% l      j = 0x80; //Y地址寄存器   8 X; i4 |0 L1 e
      for(a = 0;a < 32;a++)
9 R$ M1 b0 o4 M$ l+ ?0 \          {
8 y2 H. i5 `# z9 p1 U! P$ o  U        w_code(j);
/ i0 q3 U' n: ?( H* i2 U* L        j++;, V7 d  l: O0 J- D0 I, I0 S+ [% [
        w_code(0x80);//X地址寄存器) A$ d  ^7 S$ l
          for(i = 0;i < 16;i ++)6 g4 Y( p9 [+ s6 ^& q9 p
              {
: }6 `: N$ |& v3 t8 N# f            w_data(logo[x]);
7 f! v0 i5 \7 y/ k+ b; j: H( Y6 W( |            x++;
5 X7 Y+ [) c% a7 n* {* l6 `( @            }. `6 S2 X% q: U. L7 ^
        }# |4 k* k5 ]/ j: I8 R- t7 _

( Q9 ^- c! e2 e) |      j = 0x80; //Y地址寄存器  9 P) F3 e% l( i
      for(a = 0;a < 32;a++)
" ]( x/ }: b8 A6 Y          {
9 }% H$ h1 s% W        w_code(j);
: V! i# _& v. U5 ]        j++;  y/ n  B2 s, S0 ^! k/ V
        w_code(0x88);//X地址寄存器; n+ j3 z( ~5 Y* k' Q7 |3 ?$ s
          for(i = 0;i < 16;i ++)) s6 C: h6 i1 W4 W
              {
- c3 r, k5 n- H            w_data(logo[x]);
: w2 u' _3 r- g: ~            x++;
+ C8 u* S0 L7 z) I9 M            }
$ \- Y3 t* }" l: y. m. n        }) N5 N# ^$ I8 b1 D/ K) k" d1 j
}
: l- L0 Y2 G4 Z% L$ b* A8 J8 P: N5 o5 M5 O! X

Keil代码+原理图.rar

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

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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