完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
unsigned char CYCLE;/*PWM周期长度*/ unsigned char count = 0;/*记录中断次数*/ unsigned char PWM_ON;/*PWM高电平时间计数*/ void delay()/*延时约78ms*/ { unsigned char i,j; for(j=100;j>0;j++) for(i=255;i>0;i--); } void main() { bit Flag;/*变化状态标志,0:渐亮,1:渐暗*/ TMOD=0x01;/*时间基准为1ms*/ TH0=(65536-100)/256;/*右端表达式编译后为0xFF*/ TL0=(65536-100)%256;/*同上*/ IE=0x82;/*开定时器0中断0x82 = 10000010*/ TR0=1;/*启动定时器0*/ CYCLE=10;/*十级亮度,即十级PWM*/ while(!Flag)/*渐亮,每一次变化亮度增加1*/ { delay();/*延时*/ PWM_ON++;/*高电平脉宽延长,即亮度增加*/ if(PWM_ON == CYCLE)/*若高电平脉宽增长到整个周期*/ { Flag = 1;/*则转为渐暗*/ while(Flag)/*渐暗,每一次变化亮度减少1*/ { delay();/*延时*/ PWM_ON--;/*高电平脉宽缩短,即亮度降低*/ if(PWM_ON == 0)/*若高电平脉宽缩短到0*/ { Flag=0;/*则转为渐亮*/ } } } } } void T0_time() interrupt 1 using 1 { TH0 = (65536 - 100)/256;/*时间基准为1ms*/ TL0 = (65536 - 100)%256;/*即每1ms触发一次中断*/ if(count == PWM_ON)/*若中断次数达到亮度设定值*/ { P2 = 0xFF;/*则熄灯*/ } count++;/*每次中断记录+1*/ if(count == CYCLE) /*若中断次数达到PWM周期长度*/ { count = 0;/*则清零中断记录*/ if(PWM_ON != 0)/*若此时亮度值非零*/ { P2 = 0;/*则点灯*/ } } } |
|
相关推荐
4个回答
|
|
|
|
|
|
|
|
2014-8-9 20:58:38
|
|
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
请问一个迭代法图形二值化的程序代码把宽改成240之后整个屏幕不显示是什么原因?
2644 浏览 0 评论
2630 浏览 1 评论
1868 浏览 1 评论
2025 浏览 2 评论
2584 浏览 2 评论
672浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 02:32 , Processed in 0.597413 second(s), Total 83, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号