点亮程序 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 +

第三,每进入中断一次count++,满足条件count==PWM_ON或count==CYCLE时改变LED的当前状态。作用是给小灯亮或灭的时间不同。第四,LED的亮度与其通电时间有关,也可以说成是占空比。上面的条件要理解成是呈线性增加或减小的

int ledpin=11;//定义数字接口11(PWM 输出)int val=0;// 暂存来自传感器的变量数值 void setup(){ pinMode(ledpin,OUTPUT);//定义数字接口11 为输出 Serial.begin(9600);//设置波特率为9600 //注意:模拟接口自动

void PWM1_set (uchar a){//PWM1占空比设置函数 CCAP1L=a; //设置值直接写入CCAP1L CCAP1H=a; //设置值直接写入CCAP1H } void DelayM(unsigned int a){//延时函数 1mS/次(用于1T单片机)unsigned char n,i,j

define uint unsigned int define uchar unsigned char uchar count ,z;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);v

急求用51单片机(stc89c52)利用pwm控制led灯光亮度变化的c程序,电路图如下:

画法依旧不说,给出元件清单,其实都差不多,与上篇一致51单片机 电容 瓷片电容 晶振 红色二极管 电阻 电路图如图 程序清单 说明:流水灯的闪亮方法肯定不是唯一的,按照各种形式都可以写出所需的程序,这里只用了一个简单的

LEDEQUP1.7 ORG0 JMPMAIN ORG0BH JMPT0_INT MAIN:MOVSP,#0X60 MOVTMOD,#01H SETB EA SETB ET0 SETBTR0 MOVPWM,#0 LOOP:CALLDELAY INCPWM MOVA,PWM CJNEA,#10,LOOP L1:CALLDELAY DECPWM MOVA,PWM CJ

define uint unsigned int define uchar unsigned char uchar count ,z;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);v

首先,要做一个软件三角波发生器子程序,频率自己定,就是变亮变暗的周期。此函数的返回值作为pwm的输入值。再做一个pwm的模拟程序,占空比(0-100)是三角波发生器的输出,pwm模拟程序控制某个端口输出1和0的占空比来控

// LED = 0表示灯亮,LED = 1表示灯灭,如果是反着的就把下面的0和1换一下,或者改下宏定义 // pwmcount初始值为三角波,因此后半段的意思是把100次分为pwmcount自减段和常0段 // 如果自减段和常0段LED都为0

Count = LEDx * 36; //最小0,最大 7 * 36 = 252,char型最大不能超过255; Count = Count + 1; // 加1的目的是针对LED0不亮 if(x <= Count) // <= 是针对LED0不亮 PORTA |= (1 <<

怎么用51单片机的c程序编写led灯变化亮度的程序?求大神给程序.

首先把频率定下来,最好定到大于100Hz,否则会有闪烁感。反正如果是感到有闪烁感,你就再把频率定高一点就没事了。然后就是调I/O口的占空比了。比如把亮的时间定为80% 灭的时间定为20% 这种效果是比较亮的。 而

,只适用于单字节命令,数据包格式需另改代码 if(ReceiveData==0x01) { LED =~LED;//实现按一下灯亮,再次按下灯灭 } }} ///如有问题,可再咨询

用按键调整占空比,20级可调 控制led灯的亮度等级.include "my51.h"include "timer0.h"define grading 20 //亮度20级变化 sbit keyS3=P3^5; //按键调整占空比,PWM_keyChange++ sbit keyS4=P3^6;

void InitTimer0(void){ TMOD = 0x01;TH0 = 0x0FF;TL0 = 0x0a4;EA = 1;ET0 = 1;TR0 = 1;} void main(void){ InitTimer0();qq=50; //修改这个值就能调节LED亮度 while(1){ } } void Timer0Inte

// LedTimeCount应该为100 // 把下面这段的宏定义放在前面,代码段覆盖你原来那段试试 // 注意保存和备份 // LED = 0表示灯亮,LED = 1表示灯灭,如果是反着的就把下面的0和1换一下,或者改下宏定义 // pwmcount

SET_LED1:SETBLED RET END

51单片机控制led灯右循环亮 可以用移位命令来实现,比如说LED接口为P0 那么共阴极就是 P0=(P0>>1)||0X80; 移位函数来实现是最简单的就是 intrinis 51单片机用单键来控制led灯的渐亮 可通过按钮的动作改变输出LE

51单片机怎么用指令改变LED的亮度

/* 实验目的:初步了解单片机I/O口的工作原理,进一步掌握51单片机的汇编指令。 * 实验内容:用汇编指令对单片机I/O口进行编程,控制8个发光二极管的流水亮灭。 */ /* 程序详细功能介绍: *做单一灯的左移右移,

用汇编语言让51单片机八个灯从左到右依次点亮且都不灭,每个灯亮的时间间隔0.5秒,然后全灭,再循环之前的步骤。参考如下:电路 代码 LED_COUNTDATA30H T0_COUNTDATA31H ORG0000HLJMPMAINORG000BHLJMPT0_INTORG0030HMAIN:

P3=0xfe;//第一个灯亮 delay();//延时 P3=0xfd;//第二个灯亮 delay();P3=0xfb;//第三个灯亮 delay();P3=0xf7;//第四个灯亮 delay();P3=0xef;//第五个灯亮 delay();P3=0xdf;//第六个灯亮 delay

假设P1接8 个LED,高电平时LED点亮,主程序如下:void main(void){ uchar i;while(1){ for(i=0;i<7;i++){ P1=1<>i;delay_ms(500);} } }

LED = 0xfe;EA = 0;while(1){ for(i=0;i<7;i++){delay(100);LED = (LED<<1)|0x01;P3 = LED;} for(i=0;i<7;i++){delay(100);LED = (LED>>1)|0x80;P3 = LED;} } } 汇编语言 LEDEQU 3

Count = LEDx * 36; //最小0,最大 7 * 36 = 252,char型最大不能超过255; Count = Count + 1; // 加1的目的是针对LED0不亮 if(x <= Count) // <= 是针对LED0不亮 PORTA |= (1 <<

用51单片机c语言让八个led亮度自左向右逐渐变亮(pwm)

Count = LEDx * 36; //最小0,最大 7 * 36 = 252,char型最大不能超过255; Count = Count + 1; // 加1的目的是针对LED0不亮 if(x <= Count) // <= 是针对LED0不亮 PORTA |= (1 <<

这个流水灯程序最好用数组定义8个状态的灯,这样用for循环就可以实现了。简洁明了,易读性强,也容易理解。include define uchar unsigned char code uchar ledtab[10]= { 0xff,0xe7,0xc3,0x81,0x00,//

include#include#define uchar unsigned charuchar led1,led2;sbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^2;void delay(int a){uchar i;while(a--)for(i=0;i<120;i++);}main()

/ ; PWM 控制 LED 灯渐亮渐灭程序 ; 利用定时器控制产生占空比可变的 PWM 波 ; 按K1,PWM值增加,则占空比减小,LED 灯渐暗。; 按K2,PWM值减小,则占空比增加,LED 灯渐亮。;当PWM值增加到最大值或减小到最小值

// 利用定时器控制产生占空比可变的 PWM 波 // 按K5,PWM值增加,则占空比减小,LED 灯渐暗。// 按K6,PWM值减小,则占空比增加,LED 灯渐亮。// 当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。/***/ incl

这个要用到软件的pwm,因为51的没有硬件的pwm所以只好自己写软件的了。首先,要做一个软件三角波发生器子程序,频率自己定,就是变亮变暗的周期。此函数的返回值作为pwm的输入值。再做一个pwm的模拟程序,占空比(0-100

求51单片机C51LED灯渐亮渐暗程序。。

Count = LEDx * 36; //最小0,最大 7 * 36 = 252,char型最大不能超过255; Count = Count + 1; // 加1的目的是针对LED0不亮 if(x <= Count) // <= 是针对LED0不亮 PORTA |= (1 <<

for(i=0,i++,i<=pwm){ p1.0=1 };p1.0=0 以上为软件pwm,i为局部变量,pwm为全局变量,通过控制pwm来控制led明暗,pwm最大100,最小0。从亮到暗和从暗到亮,写三角波程序,使pwm变化即可。

这个要用到软件的pwm,因为51的没有硬件的pwm所以只好自己写软件的了。首先,要做一个软件三角波发生器子程序,频率自己定,就是变亮变暗的周期。此函数的返回值作为pwm的输入值。再做一个pwm的模拟程序,占空比(0-100

T0_1:CALLSET_LED T0_OUT:POPACC POPPSW RETI SET_LED:MOVA,PWM SETBC SUBBA,PWM_JS JCSET_LED1 CLRLED RET SET_LED1:SETBLED RET END

急求!!!51单片机用汇编语言如何编写LED灯逐渐变亮在逐渐变暗?谢谢大神们

这个要用到软件的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
ORG 0000G AJMP MAIN MAIN: MOV 2EH,#00H MOV 2FH,#01H ACALL JIANBIAN MOV 2EH,#01H MOV 2FH,#00H ACALL JIANBIAN AJMP MAIN JIANBIAN: MOV 20H,#120 MOV 22H,#1 LOOP: MOV 24H,#100 LED: MOV P1,2EH MOV 21H,20H DJNZ 21H,$ MOV P1,2FH MOV 23H,22H DJNZ 23H,$ DJNZ 24H,LED INC 22H DJNZ 20H,LOOP RET GND
就是无极调光呗,加个控制器就行
这个要用到软件的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
这个要用到软件的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
#include #define uint unsigned int #define uchar unsigned char uchar count ,z; 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(count); } } void delay(uint z) { uint x,y; for(x = z;x>0;x--) for(y = 110;y>0;y--); } void init() { TMOD = 0x10; TH1 = (65536-4608)/256;//50sm TL1 = (65536-4608)%256; TR1 = 1; } void create_PWM(uchar count) { static i; if(TF1 == 1) { TF1 = 0; TH1 = (65536-4608)/256;//50sm TL1 = (65536-4608)%256; i++; if(i == 100) i=0; if(i <= count) PWM = 1; else PWM = 0; } } void key_control() { if(key_1 ==0) { delay(10); if(key_1 == 0) { count+= 5; if(count >= 100)count = 0; } } if(key_2 ==0) { delay(10); if(key_2 ==0) { count-= 5; if(count <= 0)count =100; } } }
pwm,用定时器T1溢出做pwm周期,在每次T1开始计数时触发输出,软件边增1计数边检查溢出标志。如果软件计数满则清输出,否则直到溢出清输出、清软件计数满值。改变软件计数满值就能改变亮度。
如果用STC90系列以后的单片机,由于内置了PWM模块,直接按手册中的例程就可以,如果是AT89系列的,就要用定时器模拟了,这个比较复杂,你百度一下,网上有的
#include #define uint unsigned int #define uchar unsigned char uchar count ,z; 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(count); } } void delay(uint z) { uint x,y; for(x = z;x>0;x--) for(y = 110;y>0;y--); } void init() { TMOD = 0x10; TH1 = (65536-4608)/256;//50sm TL1 = (65536-4608)%256; TR1 = 1; } void create_PWM(uchar count) { static i; if(TF1 == 1) { TF1 = 0; TH1 = (65536-4608)/256;//50sm TL1 = (65536-4608)%256; i++; if(i == 100) i=0; if(i <= count) PWM = 1; else PWM = 0; } } void key_control() { if(key_1 ==0) { delay(10); if(key_1 == 0) { count+= 5; if(count >= 100)count = 0; } } if(key_2 ==0) { delay(10); if(key_2 ==0) { count-= 5; if(count <= 0)count =100; } } }
你好!图中红圈的地方多个分号
加三极管,TEMPAL接在单片机的IO上,就可以了
首先89C52内部没有硬件PWM发生器,只能通过定时器模拟!你可以通过两个定时器,T0控制周期,T1控制占空比。 例如:实现周期为1000us,占空比为20%的PWM,用P1.0实现 首先你设置T0为65536-1000 (12M晶振) T1为65536-200 首先初始化P1.0=1,两个定时器同时打开,在定时器T1中断时拉低P1.0,在定时器T0中断时在拉高P1.0,同时将两定时器初始值初始化T0为65536-1000 ,T1为65536-200 希望对你有用,呵呵!!!