日本高清不卡中文字幕-一起草草视频在线观看-亚洲精品一区二区三区色-国产亚洲精品免费视频

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當前位置:首頁 >> 技術(shù)中心 >> 單片機入門 >> PIC單片機之PIC16F884

PIC單片機之PIC16F884

關(guān)鍵字:PIC16F884 PIC單片機 作者:admin 來源:不詳 發(fā)布時間:2018-05-18  瀏覽:19

buck電路

buck電路圖

這是一個降壓電路,SW 在此處通入PWM ,進行降壓的主要工作,Vout分壓后,最高不超過芯片工作電壓 (5V 也行 )輸入到PIC AN1口,進行AD轉(zhuǎn)換,

將轉(zhuǎn)換的結(jié)果在1602上顯示出來。如果電壓不是想要的電壓 程序便改變PWM的占空比,以達到需要的值。

主要環(huán)節(jié)在1602 的初始化 寫數(shù)據(jù) 和寫指令 以及 PIC的AD啟動工作模塊,程序如下 

#include<htc.h>

__CONFIG(0x201A);

#define uint unsigned int

#define uchar unsigned char

#define rs RC4   //數(shù)據(jù)命令

#define en RC5   // 使能端

#define DATA PORTD    //數(shù)據(jù)口

//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位數(shù)據(jù)通過P0口傳給1602 

 delay(2);

 en = 1;

 delay(2);

 en = 0; 

}

 

void lcd_wdat(uchar dat)

{

 rs = 1;

 en = 0;

 DATA= dat;//將8位數(shù)據(jù)通過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位數(shù)據(jù)

 lcd_wcmd(0x0c);   //顯示開,關(guān)光標

 lcd_wcmd(0x06);   //移動光標

 lcd_wcmd(0x01);   //清除LCD的顯示內(nèi)容

}

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 預(yù)分頻比是1:4

 while(TMR2IF)

 {

  TMR2IF=0;

  TRISC1=0;

 } 

}

void adc_init()

{

 ADCON0=0X45;// f/2的頻率  AN1通道 AD轉(zhuǎn)換完成 禁止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;   //設(shè)置顯示位置為第一行的第5個字符

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

 {      //顯示字符"welcome!"

  lcd_wdat(dis1[i]);

  i++;

 } 

 lcd_wcmd(0x80+0X40); 

 i=0;   //設(shè)置顯示位置為第一行的第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的調(diào)節(jié)還沒完善 不過這也不是很大難度了

編輯:admin  最后修改時間:2019-10-12

聯(lián)系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08

Copyright © 2014-2023 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號-4

阜新市| 牙克石市| 甘肃省| 讷河市| 喀喇| 古蔺县| 柳林县| 砀山县| 象山县| 桂平市| 社旗县| 象山县| 平和县| 台江县| 常熟市| 盐城市| 永平县| 海晏县| 东宁县| 江油市| 葫芦岛市| 游戏| 杂多县| 河北省| 德安县| 乐东| 泗阳县| 比如县| 贺兰县| 和林格尔县| 东台市| 南阳市| 宁阳县| 临沂市| 平潭县| 虞城县| 湖南省| 剑川县| 咸宁市| 揭阳市| 霍邱县|