51单片机可不可以通过编程随意改变开关电源电压?

51单片机可不可以通过编程随意改变开关电源电压?,第1张

可以改变电压,加乎或上随意两个字就杠杠的,只能说在有限的范围内改变,原来输出12V的饥樱电源,把电压提高到24V,VOR过高会烧MOS管,降压到5V就没事,实验用的宽电压可调电源里面有继电器将电压叠加起来的,比如前面说的24V可以通过两个12V用岁肢伍继电器串起来

本人估计,你是用proteus仿真做的吧,因为DAC0832的工作脉冲散冲你是靠IO口取反来实现的,以下是我对程序的注释,由于你没给出原理图,有不合理之处在所难勉.

有些地方我认为没必要说的就不细说,不明再问

#include<reg51.h>

#include<absacc.h>

//头文件,可使用其中定义的宏来访问绝对地址

#define

dac0832

XBYTE[0X7fff]

//DAC位置定义,跟据实际原理图而定

unsigned

char

code

shu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}

//数码管码值表

float

s

/*******************DAC0832控制位的定义,视实际原理图而定*************/

sbit

ALE=P3^0

//DAC0832

ALE脚工作脉冲位定义

sbit

START=P3^1

//DAC0832

START位定义

sbit

EOC=P3^2

//转换结束标志位

sbit

OE=P3^3

//输出允许位

sbit

SHCP=P2^0

//数码管驱动芯片(如595)位定义

sbit

DS=P2^1

//同上

sbit

STCP=P2^2

//同上

sbit

P11=P3^5

sbit

P12=P3^7

sbit

clk=P2^6

//DAC0832

工作脉冲

/************************************************/

unsigned

char

j,k,m,n,i,a

unsigned

int

b

void

delay(unsigned

char

t)

{

while(t--)

}

void

display()

//静态数码管的显示

{

j=0x01

for(i=0i<8i++)

{

if((shu[m]&j)==0)

{

DS=0}

else

{DS=1}

SHCP=1

SHCP=0

j<<=1

}

P12=0

P11=1

STCP=0

STCP=1

delay(200)

j=0x01

for(i=0i<8i++)

{

if((shu[n]&j)==0)

{

DS=0}

else

{DS=1}

SHCP=1

SHCP=0

j<<=1

}

P11=0

P12=1

STCP=0

STCP=1

delay(200)

}

void

main()

{

P2=0X87

/////////定森中时器1初始化////////////////

TMOD=0X20

TH1=0X06

TL1=0X06

EA=1

ET1=1

TR1=1

while(1)

{

//DAC0832地址锁存脉冲

ALE=1

ALE=0

//DAC0832

开始转换脉冲

START=1

START=0

while(EOC==0)

//等待转冲春歼换完毕

OE=1

//开始读

k=P1

//读数据

a=P1

//读数据

b=a*6

m=b/1000

//取千位数

n=b%1000/100

//取百位数

dac0832=k

display()

//数码管显示

}

}

void

time()

interrupt

3

//DAC0932脉冲

{

clk=!clk

//位取反


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12503711.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-25
下一篇2025-08-25

发表评论

登录后才能评论

评论列表(0条)

    保存