并控制LED灯的闪烁频率;然后使用一个计时器中断服务程序来控制LED灯的闪烁,具体实现方式请参考代码注释。最后,为了保证每个周期的闪烁持续时间与频率相符,应该在循环内部加入一个延时操作,等待一定时间再进入下一次循环。
就写代码给P1.0输出1就能亮起LED灯D1。sbit LED_D1= P1^0 ;LED_D1 =1;//=1亮灯 ,=0灭灯当也要看电路,完善的电路还会有驱动电路如三极管点了,也要看LED固定的那端是接地还是接VCC。最终无非就是通过单片
(tip:双击单片机,选择生成的hex文件,确定,然后点击左下角的(播放)三角按钮)
以下是一个简单的51单片机程序,通过按下按键可以实现4种不同状态的灯亮灭,包括正闪、反闪、多种间隔闪。程序中使用了定时器来实现闪烁功能。程序中使用了P1.0到P1.3作为控制灯的引脚,P3.2作为按键的引脚。每当按下
如何用单片机控制LED灯闪烁?
1、首先打开桌面上的keil软件,在进行对51单片机进行编程时最常用的就是keil软件。2、编写相应的代码:#include
以下是一个简单的51单片机程序,通过按下按键可以实现4种不同状态的灯亮灭,包括正闪、反闪、多种间隔闪。程序中使用了定时器来实现闪烁功能。程序中使用了P1.0到P1.3作为控制灯的引脚,P3.2作为按键的引脚。每当按下
case 2: delay(); readkey(); //中速闪烁 case 3: delay(); readkey(); led = ~led; //快速闪烁 } } }
MAIN: SETB LED ;LED 灭 LL1: JB KEY , LL1 ;等待按键第一次按下 LCALL YS ;延时去抖 JB KEY,LL1 ;按键第一次按下 则往下执行 LL12: MOV TMOD,#10H MOV
51单片机一键控制一个LED,每按一下按键LED闪烁一种频率,共闪烁三种频率.别照抄哦,有好的答案加分~~
1、首先打开桌面上的keil软件,在进行对51单片机进行编程时最常用的就是keil软件。2、编写相应的代码:#include
并控制LED灯的闪烁频率;然后使用一个计时器中断服务程序来控制LED灯的闪烁,具体实现方式请参考代码注释。最后,为了保证每个周期的闪烁持续时间与频率相符,应该在循环内部加入一个延时操作,等待一定时间再进入下一次循环。
typedef unsigned int uint16;sbit anjian = P1^0; //按键位 void delay(uint16 h) //延时程序 { while(h--);} main(){uint8 k = 0 , i = 0;P0 = 0xff;anjian = 1;while(1){ P0 = ~(1<
MAIN: SETB P1.7 ; LED 灭 LL1: SETB P1.0 JB P1.0, LL1 MS: CPL P1.7 ; LED 慢 闪 MOV R7,#255 LCLL YS LL2: SETB P1.0 JB P1.0, MS
1.最简方案——利用延时函数:进入主函数后,初始化LED,设置一个延时初始值,然后进入while循环,里边只做四件事,打开LED,利用键盘返回值作延时函数参数,关闭LED,利用键盘返回值作延时函数参数。2.精确解决方案——定时器
case 2: delay(); readkey(); //中速闪烁 case 3: delay(); readkey(); led = ~led; //快速闪烁 } } }
MAIN: SETB LED ;LED 灭 LL1: JB KEY , LL1 ;等待按键第一次按下 LCALL YS ;延时去抖 JB KEY,LL1 ;按键第一次按下 则往下执行 LL12: MOV TMOD,#10H MOV
51单片机一键控制一个LED,每按一下按键LED闪烁一种频率,共闪烁三种频率.有好的答案加
ORG 0000H ; 试试 SJMP MAIN ORG 0040H MIAN:MOV A,#11111110B MOV R2, #8 LOOP: MOV P2,A LCALL D_1s RL A DJNZ R2, LOOP MOV A,#01111111B MOV R2, #8 LOOP1: MOV P2,A LCALL D_
最好还是自己写,有成就感啊。依次点亮的话可以用循环移位加延时的方法,同时亮只要相应位输出相应电平即可,闪亮的话只要同时亮与全灭间加个延时可以解决。当然也可以用定时中断来定时移位或闪亮,一定要自己想法写出来的才能
include
include
在AT89S51单片机的P0.0端口接有1个发光二极管,上电的时候,L1接在P1.0管脚上的发光二极管在亮,当一次按下开关K1的时候,灯灭,再按一次,灯亮,如此轮流下去。
单片机 利用定时器,实现LED灯闪烁 利用定时器0,工作方式1实现LED以1s亮灭闪烁 评论 共1条qq574090173 : 一个简单的小程序 单片机不同频率闪烁一个LED灯简单程序,
单片机独立键盘上 一直按k1实现led灯1357闪烁,间隔1秒 按一下k2 2468闪烁 间隔1秒?
在四个灯循环点亮的状态下,每点亮一个灯需要延时,如果调用延时子程序,按键就显示不灵敏了,所以,采用定时器中断的方式控制延时,就不影响按键了。include
led1 = LED_OFF;led2 = LED_OFF;led3 = LED_OFF;while(1){ delay();if(key0)//如果按键松开 { changeByKey = 1;//按键控制换灯 led0 = LED_OFF; //全部熄灭 led1 = LED_OFF;led2 = LED_OFF;led3
delay(50000);LED4 = 1;delay(50000);LED4 = 0;delay(50000);LED3 = 0;delay(50000);LED2 = 0;delay(50000);LED1 = 0;delay(50000);} } 上述代码实现了四个 LED 灯逐个亮起来然后再逐个灭掉的效果。其中,
以下是一个简单的51单片机程序,通过按下按键可以实现4种不同状态的灯亮灭,包括正闪、反闪、多种间隔闪。程序中使用了定时器来实现闪烁功能。程序中使用了P1.0到P1.3作为控制灯的引脚,P3.2作为按键的引脚。每当按下
单片机如何一个按钮实现控制4个led灯的循环闪烁
if(t==20) //预置值,溢出20次就是1秒钟,晶振12MHZ { t=0;P3=~P3; //反转LED灯的亮灭 } } /***/
暂时想到两种解决方案:1.最简方案——利用延时函数:进入主函数后,初始化LED,设置一个延时初始值,然后进入while循环,里边只做四件事,打开LED,利用键盘返回值作延时函数参数,关闭LED,利用键盘返回值作延时函数参数。2.
include#defineucharunsignedcharuchartimes,led;sbitkey1=P1^0;sbitkey2=P1^1;voidt0isr()interrupt1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;times++;}voidrolled(){P0=led;led=(led>>1)|0x80;if(led==
{ led1=~led1;count++;if (!(count%1000)) {led2=~led2;} if (count==5000) {led3=~led3;count=0;} } led1是看不出闪烁的 太快了
请教c51单片机,c语言编程,关于控制LED灯闪烁频率?
在四个灯循环点亮的状态下,每点亮一个灯需要延时,如果调用延时子程序,按键就显示不灵敏了,所以,采用定时器中断的方式控制延时,就不影响按键了。 #include #include 仿真图效果。#include #define uchar unsigned char uchar num; sfr led=P0; sbit speaker=P1^0; void delay(uchar a) { uchar i; while(a--)for(i=0;i<120;i++); } main() { uchar i; while(1) { for(i=0;i<3;i++) { led=0xf0; delay(200); clr speaker; led=0xff; delay(200) setb speaker; for(i=0;i<3;i++) { led=0x0f; delay(200); clr speaker; led=0xff; delay(200) setb speaker; } for(i=0;i<2;i++) { led=0x00; delay(200); clr speaker; led=0xff; delay(200) setb speaker; } }
#include //taobao:广州华电 void delay_ms(unsigned int z) { unsigned int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } main() { while(1) { P0=0xaa; delay_ms(1000); P0=0x55; delay_ms(1000); } } //不是精确掩饰,大概1S左右吧..要精确延时用定时器,比较麻烦..
没有具体的电路图,就只以P1口作为基本输驱动口进行说明。主程序需要一个delay函数进行led亮灭的延时。当然你首先要先进行P1口和开关按键的预定义,这个要看你板子的原理图。 void delay(int l) { int a,b; for(a=0;a<l;a++) { for(b=0;b<10000;b++); } } void main() { int m=0; //设置开关为P3.7和P3.8,低有效 while(1) { if(P3.7 ==0) { m = 0; } else if(P3.8 ==0) { m = 1; } if (m == 0) { P1.0=1; delay(10); P1.0=0; delay(10); P1.1=1; ...//以此类推到P1.7 } else if(m ==1) { P1.0=1; P1.1=1; delay(10); P1.0=0; P1.1=0; delay(10); P1.2 =1; P1.3 =1; delay(10); ...//同理以此类推即可 } } }
参考程序 KEY BIT P1.0 LED BIT P1.7 ORG 0000H LJMP MAIN ORG 0100H MAIN: SETB LED ;LED 灭 LL1: JB KEY , LL1 ;等待按键第一次按下 LCALL YS ;延时去抖 JB KEY,LL1 ;按键第一次按下 则往下执行 LL12: MOV TMOD,#10H MOV TH1, # 00H ;送时间常数较小 定时时间长 MOV TL1, #1CH SETB TR1 LL13: JNB TF1, LL13 CLR TF1 CPL LED ;低频闪 LL2: JB KEY,LL12 ;判断按键第二次按下? LCALL YS ;延时去抖 JB KEY, LL12 ;按键第二次按下 则往下执行 LL22: MOV TMOD,#10H MOV TH1, # 2CH ;增大时间常数 MOV TL1, #0FCH LL23: JNB TF1, LL23 CLR TF1 CPL LED ;中频闪 LL3: JB KEY,LL22 ;判断按键第三次按下? LCALL YS ;延时去抖 JB KEY, LL22 ;按键第三次按下 则往下执行 LL32: MOV TMOD,#10H MOV TH1, # 0ACH ;继续增大时间常数 MOV TL1, #0FCH LL33: JNB TF1, LL33 CLR TF1 CPL LED ;高频闪 LL4: JB KEY,LL32 ;判断按键第四次按下? LCALL YS ;延时去抖 JB KEY, LL32 ;按键第四次按下 则停止闪 CLR TR1 ;停止计时 LJMP MAIN YS: MOV R7,#20 ;延时子程序 YY: MOV R6,#200 YL: DJNZ R6,YL DJNZ R7,YY RET 呵呵 按你的要求写的 给加分吗?
bit flash;//闪烁标志位 sbit led=P0^0; sbit P01=P0^1; sbit P02=P0^2; void main() { P01=P02=0; flash=0; led=0; while(1) { scankey(); ledflash(); } } void scankey()//键盘扫描 { P01=1;//行线给1 if(P02)//如果P02也是1则说明接通 { delay(10);//去抖动10MS if(P02)//再次确定按键按下 { while(P02){flash=flash}//按住按键的动作 flash=~flash;//按键按下后执行动作 } } } void ledflash() { if(flash) { led=1;//点亮 delay(100);//延时100MS led=0;//熄灭 } else led=0; } void delay(unsigned int i) {自己根据单片机频率写个1MS带形参的演示程序} 这个程序是现写的。。应该能执行,有些细节没有写,自己修改下,只是个大框而已(比如函数声明,定义端口什么的)
#include unsigned char n = 0; sbit key = P3^4; sbit led = P1^0; void delay() { unsigned int i, j; for(i = 0; i < 100; i++) for(j = 0; j < 500; j++); } void readkey(void) { unsigned char i, j; if(!key) { for(i = 0; i < 10; i++) for(j = 0; j < 120; j++); //延时消抖 if(!key) { while(!key); //等待按键释放 n++; n %= 4; //n = 0~3 } } } main() { while(1) { switch(n) { case 0: led = 1; readkey(); break; //熄灭 case 1: delay(); readkey(); //慢速闪烁 case 2: delay(); readkey(); //中速闪烁 case 3: delay(); readkey(); led = ~led; //快速闪烁 } } }
bit flash;//闪烁标志位 sbit led=P0^0; sbit P01=P0^1; sbit P02=P0^2; void main() { P01=P02=0; flash=0; led=0; while(1) { scankey(); ledflash(); } } void scankey()//键盘扫描 { P01=1;//行线给1 if(P02)//如果P02也是1则说明接通 { delay(10);//去抖动10MS if(P02)//再次确定按键按下 { while(P02){flash=flash}//按住按键的动作 flash=~flash;//按键按下后执行动作 } } } void ledflash() { if(flash) { led=1;//点亮 delay(100);//延时100MS led=0;//熄灭 } else led=0; } void delay(unsigned int i) {自己根据单片机频率写个1MS带形参的演示程序} 这个程序是现写的。。应该能执行,有些细节没有写,自己修改下,只是个大框而已(比如函数声明,定义端口什么的)