历史上的今天
今天是:2024年10月10日(星期四)
2018年10月10日 | PIC单片机之PIC16F884
2018-10-10 来源:eefocus
buck电路
这是一个降压电路,SW 在此处通入PWM ,进行降压的主要工作,Vout分压后,最高不超过芯片工作电压 (5V 也行 )输入到PIC AN1口,进行AD转换,
将转换的结果在1602上显示出来。如果电压不是想要的电压 程序便改变PWM的占空比,以达到需要的值。
主要环节在1602 的初始化 写数据 和写指令 以及 PIC的AD启动工作模块,程序如下
#include
__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
//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=temp0/10;
a3=temp0;
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的调节还没完善 不过这也不是很大难度了
史海拾趣
|
效益是企业赖以生存的前提,创新是企业发展的动力,创新活动,是市场拉动和技术推动两者的汇聚点。在过去的计划经济时代,重庆川仪和当时很多国营企业一样,技术开发严重脱离市场、脱离生产,看似研发成果不断,但真正形成产品并赚回真金白银的却不 ...… 查看全部问答> |
|
小弟把三星的SPI总线驱动编译进了内核,(开发板提供了源码但是没有加入内核)。然后用WriteFile函数发送测试数据,可以看到SPI口输出正常,但是用ReadFile读取SPI口时,一直读回0. SPI的读取时序如下图,我先用 WriteFile(hSPI, &cBuffer_out, 1, ...… 查看全部问答> |
|
读按键的值,可以通过函数GPIOPinRead来完成 如何实现中断呢?主要有以下几个步骤需要做 1. 先定义一个LED和一个KEY #define LED GPIO_PIN_0#define KEY GPIO_PIN_0 2. 在startup_rvmdk.S 文件中增加PORT_E的中断服务 ...… 查看全部问答> |
|
我用8962的spi去驱动12864,为什么无论怎么配置都无法驱动成功啊,屏幕总是出雪花,一般这种情况我认为是传输太快造成的,有高手 驱动成功过吗??求教!… 查看全部问答> |
|
我做的是IMBE语音编码算法的移植,IMBE主程序已经编译通过 且运行正常 现在要做的就是来一段语音 模拟编码和解码一下 看看合成出的语音质量 还有编码速率。请问 我们老师说要下载一个wavread.c文件 来读入语音 可是 要怎么实现读入语音程序和 ...… 查看全部问答> |
|
人人都爱易电源——转发有礼! 活动主题:人人都爱易电源——转发有礼!活动时间:10月11日—28日 活动链接:https://bbs.eeworld.com.cn/thread-352431-1-1.html… 查看全部问答> |




