用常用51单片机就可以实现。按键第1次,次数记录到寄存器里面,调用按键1的子程序 按键第2次,寄存器数据加1,再调用按键2的子程序 按键第3次,寄存器数据再加1,再调用按键3的子程序,再把寄存器数据清0,循坏就好。常用

Delayms(10); //按键去抖动 if(K1==0) s=0; //按键按下此时是键值s=0 } while(s==0) //当按键第一次按下时进入循环点亮灯的循环 { temp=0x01; for(i=0;i<8;i++) {

你可以简单地认为单片机只能输出5v或者0v的电压 分别对应1和0,那么led灯的另一端接地或者接5v,如果你 的单片机输出5v接到led灯,led灯另一端接地 , 那就产生电压了,电路就导通了,灯就亮了 ,反之也是这个道理。时

uchar led=0xff;while(1) { if(k1==0) { delay(10); if(k1==0) { while(k1==0); flag=1; led=0xfe; } } if(k2==0) { delay(10); if(k2==0)

while(1) { if(press == 1) P2 = 0xff;if(press == 0) { P2 = luishui;luishui = _crol_(luishui, 1);Delay(255);} } } X0_INT() interrupt 0 { press += 1; if(press == 2) press

51单片机,开关控制LED,开始流水灯,按一下停止,再按一下继续流水灯

程序这样做是可能出现你说的现象的,计数器估计是动态数码管,需要时时扫描显示,但你在键盘检测阶段执行while(!key1);和delay(100);时,是没法动态扫描的,所以此时数码管将无法正常显示。解决办法是,将动态扫描用定时中断

在四个灯循环点亮的状态下,每点亮一个灯需要延时,如果调用延时子程序,按键就显示不灵敏了,所以,采用定时器中断的方式控制延时,就不影响按键了。include include 仿真图效果。

一般简单的是用三极管驱动数码管。如果你会C语言的话,很容易上手。自己先从控制1个数码管学,在控制2个数码管(2个数码管基本上可以完成上面试验,8个就可以类推)\r\r1、初始值为0:上电复位后,单片机驱动数码管

1、首先打开编程软件Keil uVision4,新建一个工程文件,在菜单栏中Project—— New uVision Project..。2、然后选择单片机型号是 Atmel 公司的 AT89c52,单击OK。3、再单击工具栏上新建按钮,新建一个文档,然后再点击保存,

int0中断 程序我先试试 include sbit P10 = P1^0;sbit K1= P3^2;unsigned char a;void main(void){ IT0=1;EX0=1;EA=1;while(1){ } } int0() interrupt 0 { a++;if(a%2==0){ P10=~P

if(!KEY1) //检测到按键按下 { LED = ~LED; /*LED取反,此时LED = 0,灯亮。当松手时,KEY1 = 1,不满足if语句不 进入循环,LED继续保持当前状态即LED = 0,如果再次按下按键,此时检测到KEY1 = 0,进入

51单片机的按键控制小灯亮灭的问题(程序类型:c语言)怎么解决?

1.最简方案——利用延时函数:进入主函数后,初始化LED,设置一个延时初始值,然后进入while循环,里边只做四件事,打开LED,利用键盘返回值作延时函数参数,关闭LED,利用键盘返回值作延时函数参数。2.精确解决方案——定时器

LJMP MAIN ORG 0100H MAIN: SETB LED ;LED 灭 LL1: JB KEY , LL1 ;等待按键第一次按下 LCALL YS ;延时去抖 JB KEY,LL1 ;按键第一次按下 则往下执行 LL12:

TR0=1; //启动定时器0 } void time0() interrupt 1 { led1=~led1;count++;if (!(count%1000)) {led2=~led2;} if (count==5000) {led3=~led3;count=0;} } led1是看不出闪烁的 太快了

led=1;//点亮 delay(100);//延时100MS led=0;//熄灭 } else led=0;} void delay(unsigned int i){自己根据单片机频率写个1MS带形参的演示程序} 这个程序是现写的。。应该能执行,有些细节没有写,自己修改下,

case 0: led = 1; readkey(); break; //熄灭 case 1: delay(); readkey(); //慢速闪烁 case 2: delay(); readkey(); //中速闪烁 case 3: delay(); readkey(); led = ~led; //快速闪烁 } }

请教c51单片机,c语言编程,关于控制LED灯闪烁频率?

MAIN: SETB LED ;LED 灭 LL1: JB KEY , LL1 ;等待按键第一次按下 LCALL YS ;延时去抖 JB KEY,LL1 ;按键第一次按下 则往下执行 LL12: MOV TMOD,#10H MOV

循环点亮LED灯,也就是流水灯效果的控制,可以用定时器来控制,这样做相对代码量较少而时间比较精确,外部中断0接以按键,可以控制动态效果的启停。程序如下:ORG 0000H LJMP MAIN ORG 0003H LJMP EXT0 ;外部中断0,

因为L1=1,是你灯闪烁的最后一个状态,而后又会从5再次执行,如果你按下了按键,程序停在了6那里死循环,则后面7,8都不会执行了。灯则保留了上一个循环最后的状态,也就是9的状态,所以就一致亮了。你如果又松开按键

led=0;//熄灭 } else led=0;} void delay(unsigned int i){自己根据单片机频率写个1MS带形参的演示程序} 这个程序是现写的。。应该能执行,有些细节没有写,自己修改下,只是个大框而已(比如函数声明,定义端口什么

1、限流电阻不合适。2、驱动LED的方式不对,LED分高电平触发(LED的阴极接地,阳极接IO口,但必须保证所使用的IO具备上拉电阻或者内部有上拉推挽电路,例如:传统51单片机的P0口内部是不具备上拉推挽电路的(就是所谓的漏

led=!led;(放在中断程序中)最重要的是,用中断,那个按键必须在P3.2脚上,可是你的按键在P3.1,这不是中断脚。在中断程序中,不能写按键程序的。把if(k1==0)这段删掉。如果P3.2没有按键,是不能中断的。

普中科技51单片机,想让一个按键按一下中断0来实现led闪烁,我哪里写错了,为什么不行??。。

普中科技所提供的单片机独立按键中断之后的代码可以通过系统更新的方式来弥补问题。
晋中的版本挺多的,你是什么版本的
#include #include #define uchar unsigned char sbit button=P1^0; uchar press=0; void Delay(uchar z) { uchar x,y; for(x=z;x>0;x--) for(y=255;y>0;y--); } void Led_Continue() { P2=0xfe; while(press==0|press==2) { P2=_crol_(P2,1); Delay(255); } } void Led_Stop() { P2=0xff; } void Keyscan() { if(button==0) { Delay(20); if(button==0) { press+=1; if(press==1) { Led_Stop(); } if(press==2) { press=0; } } } } void main() { while(1) { Keyscan(); Led_Continue(); } } 试试这个,在mian中要一直去扫描,否则就扫描一次不能达到目的。 然后你问用中断怎么完成,告诉你中断更简单,定时器用作延时用,键盘只需要写当这个按键按下时 TRx=~TRx 就是每一次按下,定时器开关都和上一次状态不一样,这样每按一次都会停止、开始、停止、开始...... 希望我的回答能帮助到你。
#include #define uchar unsigned char #define uint unsigned int sbit K1=P1^0; sbit K2=P1^1; sbit K3=P1^2; sbit LED1=P2^4; sbit LED2=P2^5; sbit LED3=P2^6; //---------延时子程序-----------// void DelayMS(uint ms) { uchar t; while(ms--)for(t=0;t<250;t++); } //------------主程序-------------//  void main() { P1=0xff; LED1=1; //开始3个灯都灭 LED2=1; LED3=1; while(1) { if(K1==0) //判断K1是否按下? { while(K1==0); //K1=0为按下状态。 LED1=~LED1; //LED等反转状态。 } if(K2==0) { while(K2==0); LED2=~LED2; } if(K3==0) { while(K3==0); LED3=~LED3; } }