完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
`各位大神,我最近想做一个基于单片机PWM功能的流星灯(水滴效果),可是看了一些资料,按着书上的程序做了一边还是不行。那灯亮度压根儿就没变,,,求正解啊。。。。
#include #include #define uchar unsigned char ***it PWM=P0^1; void delay(uchar i) { uchar j; for(;i>0;i--) { for(j=29;j>0;j--) _nop_(); _nop_(); } } void PWMout(uchar q) { PWM=1; delay(q); PWM=0; delay(10-q); } void main() { while(1) { PWMout(0); PWMout(1); PWMout(2); PWMout(3); PWMout(4); PWMout(5); PWMout(6); PWMout(7); PWMout(8); PWMout(9); PWMout(10); } } ` |
|
相关推荐
22个回答
|
|
|
|
{:19:}
|
|
|
|
路过学习学习
|
|
|
|
发不了
|
|
|
|
#include
***it LED0=P1^0;// 用***it 关键字 定义 LED到P1.0端口,LED是自己任意定义且容易记忆的符号 void Delay(unsigned int t); //函数声明 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { unsigned int CYCLE=600,PWM_LOW=0;//定义周期并赋值 while (1) //主循环 { LED0=1; Delay(60000); //特意加延时,可以看到熄灭的过程 for(PWM_LOW=1;PWM_LOW LED0=0; //点亮LED Delay(PWM_LOW);//延时长度,600次循环中从1加至599 LED0=1; //熄灭LED Delay(CYCLE-PWM_LOW);//延时长度,600次循环中从599减至1 } LED0=0; for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--){ //与逐渐变亮相反的过程 LED0=0; Delay(PWM_LOW); LED0=1; Delay(CYCLE-PWM_LOW); } //主循环中添加其他需要一直工作的程序 } } /*------------------------------------------------ 延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 0~65535 ------------------------------------------------*/ void Delay(unsigned int t) { while(--t); } |
|
1 条评论
|
|
zhhq707 ,赞一个,多谢分享。。。
|
|
|
|
这是我刚才改的,用数码管显示
#include unsigned int count=800,i; void delay(unsigned int t) { while(--t); } void shui() { P0 = 0xc0; //点亮LED delay(i);//延时长度,600次循环中从1加至599 P0 = 0xff; //熄灭LED delay(count-i);//延时长度,600次循环中从599减至1 } void shuidi() { P0 = 0xff; delay(60000); for(i=1;i P0 = 0x00; for(i=count-1;i>0;i--) //与逐渐变亮相反的过程 shui(); } void main () { while (1) //主循环 { P2 = 0x00; shuidi(); } } |
|
1 条评论
|
|
|
|
路过学习学习路过学习学习
|
|
|
|
想法不错!!!!!!!!!!!!!!!1
|
|
|
|
|
|
|
|
想法很好啊!学习中。。。。
|
|
|
|
。。。水滴石穿
|
|
|
|
很好,很强大,仁健微波,频率源专家
|
|
|
|
到处看看,学习学习~!~!
|
|
|
|
多学习学习!!!!!!
|
|
|
|
这是通过控制延时来控制闪烁频率的?
|
|
|
|
PWMout(0);
PWMout(1); PWMout(2); PWMout(3); PWMout(4); 你在每个之间PWMout 加个大概1S的延时程序,看看有没有变化。 |
|
|
|
要根据自己板子的电器特性来写程序 #include
typedef unsigned char uint8; ***it DB1=P1^0; void main() { uint8 i,k,p,t,j; char n; uint8 a[]={0,1,2,4,6,16,32,64}; uint8 b[]={0,34,48,59,68,76,84,91,97,103,109,114,119,123,126}; signed char c[]={-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7}; P1=0xFF; while (1) { //*************************************************************** //水滴形成 /*P1 = 0xFF; //---------------水滴逐渐变大(第一个LED 亮度逐渐变大)--------- for(i=0; i<64; i++) { for(j=0; j<64; j++) //一个亮度级别发送64 个脉冲 { P1 = 0xFE; for(k=0; k<64; k++) //以i 为亮度级别,随着i 的增大,占空比增大 { if(k > i) { P1 = 0xFF; } } }} */ k=0; for(i=0;i<=252;i++) { if(0==(i%4)) { k++; } for(t=0;t<=16;t++) { DB1=0; for(j=0;j<=64;j++) if(j==k) DB1=1; } } //******************************************************************* // 滴落 for(j=0;j<=254;j++) { p=0; for(k=0;k<=15;k++) { if(j==b[k]) n=c[k]; } for(i=0;i<=64;i++) { for(k=0;k<=7;k++) { if(i==a[k]) { p=p|(1< if(n>=0) P1=~(t< P1=~(t>>-n); } } } } } } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-19 15:04 , Processed in 1.108303 second(s), Total 84, Slave 77 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号