完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我用PWM控制一个LED的光亮成度,控制占空比的变量num一开始也初始化0了,但是依然一上电后LED微亮,请高手赐教,附上程序:
/*设置一个定时器,控制P20口输出PWM,频率为100HZ,占空比可调,按键key_add、key_sub分别控制占空比的加减*/ #include #define uint unsigned int #define uchar unsigned char ***it PWM=P2^0; ***it LED1=P2^7;//LED1常亮作为跟PWM输出时的亮度对比 ***it key_add=P3^7;//按键控制占空比增加 ***it key_sub=P3^6;//按键控制占空比减小 uchar time; uint num; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void main() { num=0; TMOD=0x01;//定时器0工作方式1 TH0=(65536-100)/256; TL0=(65536-100)%256;//赋值定时0.1ms EA=1; ET0=1; TR0=1; while(1) { LED1=0; while(key_add==0)//增加亮度 { delay(5); while(key_add==0) { num=num+10; while(!key_add);//按键释放 delay(5); while(!key_add); } } while(key_sub==0)//减小亮度 { delay(5); while(key_sub==0) { num=num-10; while(!key_sub);//按键释放 delay(5); while(!key_sub); } } } } void timer0() interrupt 1 { TR0=0;//赋值时先关闭定时器 TH0=(65536-100)/256; TL0=(65536-100)%256;//赋值定时0.1ms TR0=1;//再从新打开定时器 time++; if(time>=100) time=0;//0.1ms*100=10ms,即100HZ; if(time<=num) PWM=0; else PWM=1; } |
|
相关推荐
8个回答
|
|
本帖最后由 wulinwl 于 2017-2-28 14:33 编辑
//在原程序里加了3条限制条件就可以了。 //我用PWM控制一个LED的光亮成度,控制占空比的变量num一开始也初始化0了,但是依然一上电后LED微亮,请高手赐教,附上程序: /*设置一个定时器,控制P20口输出PWM,频率为100HZ,占空比可调,按键key_add、key_sub分别控制占空比的加减*/ #include #define uint unsigned int #define uchar unsigned char ***it PWM=P2^0; ***it LED1=P2^7; //LED1常亮作为跟PWM输出时的亮度对比 ***it key_add=P3^7; //按键控制占空比增加 ***it key_sub=P3^6; //按键控制占空比减小 uchar time; uint num; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void main() { num=0; TMOD=0x01;//定时器0工作方式1 TH0=(65536-100)/256; TL0=(65536-100)%256;//赋值定时0.1ms EA=1; ET0=1; TR0=1; while(1) { LED1=0; while(key_add==0)//增加亮度 { delay(5); while(key_add==0) { if(num<100) //限制num不大于100 num=num+10; while(!key_add);//按键释放 delay(5); while(!key_add); } } while(key_sub==0)//减小亮度 { delay(5); while(key_sub==0) { if(num>0) //限制num不小于0 num=num-10; while(!key_sub);//按键释放 delay(5); while(!key_sub); } } } } void timer0() interrupt 1 { TR0=0;//赋值时先关闭定时器 TH0=(65536-100)/256; TL0=(65536-100)%256;//赋值定时0.1ms TR0=1;//再从新打开定时器 time++; if(time>=100) time=0;//0.1ms*100=10ms,即100HZ; if(num==0)//这里加一条件限制,否则num=0时...if(time<=num)表达式不成立而出错 PWM=1; else if(time<=num) PWM=0; else PWM=1; }
最佳答案
评分
|
||
|
||
p2口下拉
|
|
|
|
|
|
|
|
wulinwl 发表于 2017-2-27 23:29 让你这么一提点,确实是有思考的不足的地方,谢谢指导 |
|
|
|
这个问题很好解决,你把led用低电平驱动就可以了,所谓的下拉就是输入一个低电平让灯亮
|
|
|
|
51的特性是沒有分輸入輸出,所以當成輸入時,實際是io口設置成1,內部其實是微上拉,所以一開機時的狀態就是1,io口不是懸浮的,若使用51要避免這麼情況只能外部加一顆下拉電阻
|
|
|
|
额,下拉不是下拉接地,要输高电平才可以工作吗? |
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
7 浏览 0 评论
26 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
13 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
644 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1000 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11770 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 16:42 , Processed in 0.538728 second(s), Total 58, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号