完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
uchar ADC_Val; uchar Vout = 50; //初始电压为5V,设定电压值的十倍(3.7~12V对应取值范围37~120) uint PWM_time = 0; bit Time_Flag; //时间标志位 void main(void) { uchar i = 0; //输出电压与设定电压差值 LcdInit(); //LCD1602初始化 LcdWriteCom(0x80); //LCD1602第一行 Lcd_send_string("SET ="); LcdWriteCom(0xc0); //LCD1602第二行 Lcd_send_string("VOUT="); Int_Configuration(); //中断初始化 while(1) { keyboard(); //按键扫描与处理 ISendByte(PCF8591,0x40); //选择ADC通道0 ADC_Val = IRcvByte(PCF8591) / 25.5 * 15; //ADC读数 if(Time_Flag == 1) //如果时间标志位=1,说明200ms定时到了 { Time_Flag = 0; if(ADC_Val < Vout) //如果输出电压小于设定电压 { if(PWM_Time < 150) { i = Vout - ADC_Val; if(i < 10) { PWM_Time++; PWM高电平计数值++,增加输出电压 } else { PWM_Time = Vout; //快速减小输出电压 } } } else if(ADC_Val > Vout) //如果输出电压小于设定电压 { if(PWM_Time > 0) { i = ADC_Val - Vout; if(i < 10) { PWM_Time--; //PWM高电平计数值--,减小输出电压 } else { PWM_Time = Vout; //快速减小输出电压 } } } } LcdWriteCom(0x80 + 5); //LCD1602第一行 LcdWriteData('0' + Vout%1000/100); //设定电压值的十位 LcdWriteData('0' + Vout%100/10); » //设定电压值的个位 LcdWriteData('.'); LcdWriteData('0' + Vout%10); //设定电压值的小数点后一位 LcdWriteData('V'); LcdWriteCom(0xC0 + 5); //LCD1602第二行 LcdWriteData('0' + ADC_Val%1000/100); //实际电压值的十位 LcdWriteData('0' + ADC_Val%100/10); //实际电压值的个位 LcdWriteData('.'); LcdWriteData('0' + ADC_Val%10); //实际电压值的小数点后一位 LcdWriteData('V'); } }
|
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【瑞萨RA6E2】瑞萨E2S软件安装过程,等待过程玩下97_e2 studio_ZGZZ
140 浏览 0 评论
483 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
815 浏览 0 评论
1346 浏览 2 评论
804 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16903 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 15:24 , Processed in 0.445121 second(s), Total 37, Slave 29 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
4081