当前位置:首页 > 单片机 > 单片机
[导读]这是一个降压电路,SW 在此处通入PWM ,进行降压的主要工作,Vout分压后,最高不超过芯片工作电压 (5V 也行 )输入到PIC AN1口,进行AD转换, 将转换的结果在1602上显示出来。如果电压不是想要的电压 程序便改变PWM的占空比,以达到需要的值。 主要环节在1602 的初始化 写数据 和写指令 以及 PIC的AD启动工作模块,程序如下

 buck电路

这是一个降压电路,SW 在此处通入PWM ,进行降压的主要工作,Vout分压后,最高不超过芯片工作电压 (5V 也行 )输入到PIC AN1口,进行AD转换,

将转换的结果在1602上显示出来。如果电压不是想要的电压 程序便改变PWM的占空比,以达到需要的值。

主要环节在1602 的初始化 写数据 和写指令 以及 PIC的AD启动工作模块,程序如下 

#include<htc.h>

__CONFIG(0x201A);

#define uint unsigned int

#define uchar unsigned char

#define rs RC4   //数据命令

#define en RC5   // 使能端

#define DATA PORTD    //数据口

//RC1 作为PWM输出口

const uchar dis1[]="The voltage is:";  //asm("nop");

const uchar dis2[]="      . V";

void delay(uchar time)    //1ms

{

 uint j;

 for(time;time>0;time--)

 for(j=160;j>0;j--);

}

void lcd_wcmd(uchar cmd)

{

 rs = 0;

 en = 0;

 DATA = cmd;//将8位数据通过P0口传给1602 

 delay(2);

 en = 1;

 delay(2);

 en = 0; 

}

 

void lcd_wdat(uchar dat)

{

 rs = 1;

 en = 0;

 DATA= dat;//将8位数据通过P0口传给1602 

 delay(2);

 en = 1;

 delay(2);

 en = 0; 

}

void lcd_init()

{

 TRISC=0Xcf;  //1100 1111   

 TRISD=0X00; 

 lcd_wcmd(0x38);   ////16*2显示,5*7点阵,8位数据

 lcd_wcmd(0x0c);   //显示开,关光标

 lcd_wcmd(0x06);   //移动光标

 lcd_wcmd(0x01);   //清除LCD的显示内容

}

void pwm_init()

{

 TRISC1=1;   //CCP2 OUTPUT DISABLE 

 PR2=0XFF;

 CCP2CON=0X3C;  //0011(CCPR1L后两位))1100 11XX  PWM MODE 

 CCPR2L=0X3F;    //CCPR2L:CCP2CON<5:4>/4(PR2+1)PULSE WIDTH

     //0X3F  25%

 TMR2IF=0; 

 T2CON=0X05;    //启动定时器2 预分频比是1:4

 while(TMR2IF)

 {

  TMR2IF=0;

  TRISC1=0;

 } 

}

void adc_init()

{

 ADCON0=0X45;// f/2的频率  AN1通道 AD转换完成 禁止ADC

 ADCON1=0X80;  //右对齐 参考电压 VSS VDD

 TRISA=0X01;   //输入

 delay(5);

}

void deal_ad()

{

 uint temp;

 uint ad_sample;

 uint result;

 uchar a1,a2,a3;

 GO_DONE=1;

 while(GO_DONE);

 ad_sample=ADRESL+(ADRESH<<8);

 result=(ad_sample*500)>>10;  //参考电压5V 扩大了100倍

 temp=result;

 a1=temp/100;

 a2=temp%100/10;

 a3=temp%100%10;

 if(a1!=0)

 {

  lcd_wcmd(0x80+0x44);

  lcd_wdat(a1+0x30);

 }

 lcd_wcmd(0x80+0x45);

 lcd_wdat(a2+0x30);

 lcd_wcmd(0x80+0x47);

 lcd_wdat(a3+0x30);

}

void lcd_dis()

{

 uchar i;

 lcd_wcmd(0x80); 

 i=0;   //设置显示位置为第一行的第5个字符

 while(dis1[i]!='\0') 

 {      //显示字符"welcome!"

  lcd_wdat(dis1[i]);

  i++;

 } 

 lcd_wcmd(0x80+0X40); 

 i=0;   //设置显示位置为第一行的第5个字符

 while(dis2[i]!='\0') 

 {      //显示字符"welcome!"

  lcd_wdat(dis2[i]); 

  i++;

 }

}

void main()

{

 delay(10);

 lcd_init();    //初始化LCD  只要写起始地址就 就行了啊   

 adc_init(); 

 while(1) 

 {

  lcd_dis();

  deal_ad();

 }

// pwm_init();

 while(1);

}

不是很完美,仅供参考。PWM的调节还没完善 不过这也不是很大难度了

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭