C51单片机中根据光线强弱用PWM控制LED的亮度 是求程序还是求啥?邮箱也没有 51单片机控制led灯右循环亮 可以用移位命令来实现,比如说LED接口为P0 那么共阴极就是 P0=(P0>>1)||0X80; 移位函数来实现是最简单的就
点亮程序 while(1){ LED = ON;_delay_ms( ON_ms);LED = OFF;_delay_ms(OFF_MS);} 设置程序;define ADD 0 define DEC 1 void tune_led( u08 add_or_dec ){ if( add_or_dec == ADD ){ ON_MS +
else led=1;//关灯 f(t>80)t=0;//t置零,要改呼吸频率就改掉“80”这个数还有下面的一个“80”也一起改 } } void Timer0Interrupt(void) interrupt 1 //T0中断,用来控制PWM电平,每50微秒,t自加一次 {
3.编写程序:使用单片机的编程软件(如Arduino IDE、Keil等),编写控制LED灯的程序。以下是一个简单的示例程序(以Arduino为例):// 定义LED灯连接的引脚 const int ledPin = 13;void setup() { // 将LED引脚设置为
如何用单片机控制LED灯的亮度,不要PWM波的程序 程序名称:一只按键控制两只LED灯十种亮度显示 编程人:xx 备注:此程序简单 #include
LCALL PCA00 ; 初始化 PWM MIN10: NOP ; 主程序 入口 LCALL ADC00 ; 测光敏电阻电压 MOV CCAP0H, A ; 写入PWM 控制 发光亮度 LJMP MIN10 RET ; / *** *** *** *** / A/D
求一单片机程序(用光敏电阻,PWM输出控制LED亮度)
下面这个程序是应用在stc上的pwm程序,测试成功#includesfr CCON =0xD8; //PCA control registersfr CMOD =0xD9;sfr CL =0xe9;sfr CH =0xF9;sfr CCAP0L=0xea;sfr CCAP1L=0xeb;sfr CCAP0H=0xfa;sfr C
PWM1_set(vx*24);//数字24是配合vx调试取得的,此时vx的赋值范围约为1-10对应最暗-最亮 //---减调整---// if (KEY_L == 0 ){ DelayM(20); //延时20毫秒消抖动 if(KEY_L == 0){ //如果20SM后KEY
简单的流程图如图,按键判断写一个单独的子程序,而且在低电平的头和尾加上个去抖动的等待时间。
TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 }
sbit key_1 = P3^7;sbit key_2 = P3^6;sbit PWM = P2^0;void key_control();void init ();void create_PWM(uchar);void delay(uint);void main (){ init ();while(1);{ key_control();create_PWM(cou
uchar LED_Direction=0; //LED方向控制 0:变亮 1:变暗 uchar LED_PWM_Counter=0; //LED占空比 uchar count=0; //中断计数 bit flag=0;//按键扫描标志位 void main(){ P3=0xff; //做输入
按下按键1灯变亮,按下按键2灯变暗,用PWM调光,C程序怎么写
void create_PWM(uchar);void delay(uint);void main (){ init ();while(1);{ key_control();create_PWM(count);} } void delay(uint z){ uint x,y;for(x = z;x>0;x--)for(y = 110;y>0;y--);
PWM 控制 LED 灯渐亮渐灭程序 / ; PWM 控制 LED 灯渐亮渐灭程序 ; 利用定时器控制产生占空比可变的 PWM 波 ; 按K1,PWM值增加,则占空比减小,LED 灯渐暗。; 按K2,PWM值减小,则占空比增加,LED 灯渐亮。;当PWM
使用定时器T0产生PWM方波,用按键调整占空比,20级可调 控制led灯的亮度等级.include "my51.h"include "timer0.h"define grading 20 //亮度20级变化 sbit keyS3=P3^5; //按键调整占空比,PWM_keyChange++
第三,每进入中断一次count++,满足条件count==PWM_ON或count==CYCLE时改变LED的当前状态。作用是给小灯亮或灭的时间不同。第四,LED的亮度与其通电时间有关,也可以说成是占空比。上面的条件要理解成是呈线性增加或减小的
请教51单片机利用PWM控制灯的亮度的程序
else led=1;//关灯 f(t>80)t=0;//t置零,要改呼吸频率就改掉“80”这个数还有下面的一个“80”也一起改 } } void Timer0Interrupt(void) interrupt 1 //T0中断,用来控制PWM电平,每50微秒,t自加一次 {
; 利用定时器控制产生占空比可变的 PWM 波 ; 按K1,PWM值增加,则占空比减小,LED 灯渐暗。; 按K2,PWM值减小,则占空比增加,LED 灯渐亮。;当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警 ;资源:p0口,8路指示
sbit K1 =P3^2 ; //亮度增加键 sbit K2 =P3^3 ; //亮度减少键 unsigned char PWM=0x7f ;void delayms(unsigned char ms);void delay(unsigned char t);/***/ void main(){ P2=0xff;TMOD=0x21 ;
可以设两个按键,一个调亮一个调暗 用定时器就可以产生不同占空比的PWM信号,占空比越高LED越亮,占空比越低就越暗 检测两个按键动作,然后调整PWM信号的占空比就行了 只能说说原理,具体细节无法一一说清了
pwm,用定时器T1溢出做pwm周期,在每次T1开始计数时触发输出,软件边增1计数边检查溢出标志。如果软件计数满则清输出,否则直到溢出清输出、清软件计数满值。改变软件计数满值就能改变亮度。51单片机输出pwm波控制led灯亮度 频率
u8 PWM_keyChange=10; //初值,按键调整在1~20之间变化 //占空比 PWM_keyChange/grading void T0_work() //本函数由T0定时器中断函数调用 { if(timeMultiple1Flag){ led=off(7); //关闭7号灯 timeMu
51单片机如何用一个按键和一个定时器来模拟PWM控制一个LED灯的亮度??
如果用STC90系列以后的单片机,由于内置了PWM模块,直接按手册中的例程就可以,如果是AT89系列的,就要用定时器模拟了,这个比较复杂,你百度一下,网上有的#include #define uchar unsigned char #define uint unsigned int sbit lamp=P2^0;//输出 sbit k1=P3^3;//加键 sbit k2=P3^2;//减键 sbit k3=P3^4;//停止 uchar a=10; void delay(uint x)//延时函数 { uchar i; while(x--) for(i=0;i<110;i++); } void init() { TMOD=0X01;//晶振11.0592,定时器定时方式1 TH0=0XFF;//100us定时 TL0=0XA4; EA=1;//开总中断 ET0=1;//开定时器中断 TR0=1;//开定时器 } void key() { if(!k1) { delay(10); if(!k1) { a++; if(a==99) a=1; } } // while(!k1); if(!k2) { delay(10); if(!k2) { a--; if(a==1) a=99; } } // while(!k2); if(!k3) { delay(10); if(!k3) { TR0=~TR0;//开定时器 } } while(!k3); } void main() { init(); while(1) { key(); } } void timer0() interrupt 1 using 3 { uchar count; /*中断次数计数器变量*/ TH0=0xFF; /*恢复定时器初始值*/ TL0=0xA4; count++; if (count>=100) count=0; if (count<=a) /*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/ lamp=0; else lamp=1; }
#include typedef unsigned char int8; typedef unsigned int int16; sbit led=P1^0;//P1^0口控制LED灯 int16 t,a;int8 b; //电平宽度变化控制变量,控制电平宽度,b=0变长,b=1变短 void InitTimer(void)//定时器初始化 { TMOD = 0x11; EA = 1; //总中断:开 TH0 = 0xff; //T1计时器计数器初始化 TL0 = 0xce; TH1 = 0xb1; //T1计时器计数器初始化 TL1 = 0xe0; ET0 = 1; //T0中断:开 ET1 = 1; //T1中断:开 TR0 = 1; //T0计时:启动 TR1 = 1; //T1计时:启动 } void main() { t=0; a=0; b=0;//使用变量前的初始化 InitTimer(); while(1) { if(t<a)//t<a时打开LED灯 led=0; else led=1;//关灯 f(t>80)t=0;//t置零,要改呼吸频率就改掉“80”这个数还有下面的一个“80”也一起改 } } void Timer0Interrupt(void) interrupt 1 //T0中断,用来控制PWM电平,每50微秒,t自加一次 { TH0 = 0xff; TL0 = 0xce; t++; } void Timer1Interrupt(void) interrupt 3//T1中断,控制PWM电平宽度,使电平宽度由短变长,又由长变短循环,造成呼吸效果 { TH1 = 0xb1; TL1 = 0xe0; //每20毫秒增加1个单位的呼吸长度 if(b==0) { a++; if(a==80) //改掉可以改呼吸频率 b=1; } else { a--; if(a==0)b=0; } }
PWM 控制 LED 灯渐亮渐灭程序 /******************************************************************************** ; PWM 控制 LED 灯渐亮渐灭程序 * ; 利用定时器控制产生占空比可变的 PWM 波 * ; 按K1,PWM值增加,则占空比减小,LED 灯渐暗。 * ; 按K2,PWM值减小,则占空比增加,LED 灯渐亮。 * ;当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警 * ;资源:p0口,8路指示灯。p1.4,p1.5亮度控制按键(端口按键)p3.7小喇叭报警 * ;********************************************************************************/ #include #include sbit K1 =P1^4 ; //PWM值增加键 sbit K2 =P1^5 ; //PWM值减少键 sbit BEEP =P3^7 ; //蜂鸣器 unsigned char PWM=0x7f ; //赋初值 void Beep(); void delayms(unsigned char ms); void delay(unsigned char t); /*********************************************************/ void main() { P1=0xff; TMOD=0x21 ; TH0=0xfc ; //1ms延时常数 TL0=0x66 ; //频率调节 TH1=PWM ; //脉宽调节 TL1=0 ; EA=1; ET0=1; ET1=1; TR0=1 ; while(1) { do{ if(PWM!=0xff) {PWM++ ;delayms(10);} else Beep() ; } while(K1==0); do{ if(PWM!=0x02) {PWM-- ;delayms(10);} else Beep() ; } while(K2==0); } } /*********************************************************/ // 定时器0中断服务程序 (频率) /*********************************************************/ void timer0() interrupt 1 { TR1=0 ; TH0=0xfc ; TL0=0x66 ; TH1=PWM ; TR1=1 ; P0=0x00 ; //启动输出 } /*********************************************************/ // 定时器1中断服务程序 (脉宽) /*********************************************************/ void timer1() interrupt 3 { TR1=0 ; P0=0xff ; //结束输出 } /*********************************************************/ //蜂鸣器子程序 /*********************************************************/ void Beep() { unsigned char i ; for (i=0 ;i<100 ;i++) { delay(100) ; BEEP=!BEEP ; //Beep取反 } BEEP=1 ; //关闭蜂鸣器 delayms(100); } /*********************************************************/ // 延时子程序 /*********************************************************/ void delay(unsigned char t) { while(t--) ; } /*********************************************************/ // 延时子程序 /*********************************************************/ void delayms(unsigned char ms) { unsigned char i ; while(ms--) { for(i = 0 ; i < 120 ; i++) ; } } /*********************************************************/
自己设计才进步比较快。1、使用PWM脉宽调制技术使得灯亮度变化,可以很容易在网上找到相关代码下载 2、把温度变化范围分层,与灯的最暗到最亮范围对应,在1的基础上,根据温度值调用函数,不是很难的事。 好好加油!
这个要用到软件的pwm,因为51的没有硬件的pwm所以只好自己写软件的了。首先,要做一个软件三角波发生器子程序,频率自己定,就是变亮变暗的周期。此函数的返回值作为pwm的输入值。再做一个pwm的模拟程序,占空比(0-100)是三角波发生器的输出,pwm模拟程序控制某个端口输出1和0的占空比来控制灯 的明暗。pwm的思路是:检查设置值是否不等于0,是则端口置1,程序开始加1计数,计数后检查计数值是否等于设置值,如果等于则跳转,不等则继续加一,如果到100或者计数值等于设置值则使端口置0,一个pwm周期结束,如此重复就可以了。pwm周期自己看实际情况定义。如果要控制电灯泡的话,频率不用太高,50hz可以了。关键是要做隔离,用光电隔离加双向可控硅来控制。 呵呵,声明两点:1 源程序网上应该有的,或者自己买本书就什么也有了。2 不鼓励直接给别人源程序,给你思路再动手就应该很好弄了,总看别人的,不自己思考永远都是别人的。 http://www.programsalon.com/downloads88/sourcecode/embed/detail337156.html
单片机1个io口有AD功能的 io接电阻和光敏电阻的一只脚,地接光敏电阻另一只脚,vcc接电阻另一只脚 就这么简单
用几个变量表示按键的按下/松开状态,然后用定时器中断设置PWM的频率,例如要50hz的频率,那么定时器中断周期(PWM周期的一半)可以设置为10ms,在中断服务程序内根据按键的状态确定是否需要对PWM输出管脚进行翻转。改方法可以输出占空比为50%的PWM信号。 LED是英文 light emitting diode (发光二极管)的缩写,它的基本结构是一块电致发光的半导体材料芯片,用银胶或白胶固化到支架上,然后用银线或金线连接芯片和电路板,然后四周用环氧树脂密封,起到保护内部芯线的作用,最后安装外壳,所以 LED 灯的抗震性能好。运用领域涉及到手机、台灯、家电等日常家电和机械生产方面。