*/ delay(500); /*此处延迟,保证连续两次按键动作处在程序的延时过程中,不进行其他程序从而不会影响小灯。*/ } }}void delay(uint z) //延时函数{ uint x, y; for(x=85; x>0; x--)
delay(100);//延时100MS led=0;//熄灭 } else led=0;} void delay(unsigned int i){自己根据单片机频率写个1MS带形参的演示程序} 这个程序是现写的。。应该能执行,有些细节没有写,自己修改下,只是个大框而已(
1、首先打开桌面上的keil软件,在进行对51单片机进行编程时最常用的就是keil软件。2、编写相应的代码:#include
sbit k1 = P1^0;//按键1 开关 sbit p6 = P1^6; //输出1 灯 bit t1, t2;void main(void){ while(1){ if(k1==0 && t1==0) {t1=1; p6=~p6;} if(k1==1 ) {t1=0;} }} // 下面是四个
一个简单的开关控制一盏灯的c程序如下:include
51单片机一个开关控制一盏灯的c程序是什么?
是强电的灯可以通过此处控制继电器的合、闭来控制灯的亮灭)。参考程序:if(key==0){delayms(10);if(key==10){while(key==0);//等待按键释放,IO口恢复高电平led=!led;//按键控制程序}}
KEY EQU P1.0LED EQU P1.4ORG 0000HLJMP MAINORG 0030HMAIN: JB KEY,MAIN1 CLR LED SJMP MAINMAIN1: SETB LED SJMP MAIN END
1.实验任务 开关K1接在P3.2管脚上,在AT89S51单片机的P0.0端口接有1个发光二极管,上电的时候,L1接在P1.0管脚上的发光二极管在亮,当一次按下开关K1的时候,灯灭,再按一次,灯亮,如此轮流下去。2.系统板上硬件连
KEY EQU P1.0 LED EQU P0.0 ORG 0H LOOP:JB KEY,DJNZ R6,DJNZ R7, $ - 2 JB KEY, LOOP CPL LED JMP LOOP END
;主控程序=== START: SETB P1.7 ;P17 = 1 LOOP: JB P3.2,LOOP ;没有按键 LCALL DELAY ;延时消抖 JB P3.2,LOOP ;确认按键 CPL P1.7 ;取反 JB P3.2,LOOP ;检测按键 LCALL DEL
汇编语言 单片机 一个开关控制一盏LED的亮灭
按键外部中断,触发一次全局变量+1,点亮就是加一
你首先要确定你的电路。选择什么单片机和数码管,8个按键最简单8个IO口控制。一般简单的是用三极管驱动数码管。如果你会C语言的话,很容易上手。自己先从控制1个数码管学,在控制2个数码管(2个数码管基本上可以完成上面
else while(!P2_7); //按下就循环,等待松开 } void main(void) //主函数名 { while(1) { w(1); P1_0 = 0; w(0); P1_0 = 1;w(1); P1_1 = 0; w(0); P1_1 = 1;w(1); P1_
while(1){ P2=led_data;//默认第一位亮 if(key==0)Delay_ms(10);if(key==0){ while(!key);Delay_ms(500); //延时0.5s led_data=_crol_(led_data,1);//移位函数,使led_date向左循环移动1位 } }
x0为启动按钮,x1为停止按钮。y0~y7为8盏灯。程序在按下启动按钮后,灯1先亮,1秒(T0延时)后灭,1秒后(T1延时)灯2亮,依次循环。当按下x1后,循环结束。按下x0后,m0得电为1并自保持,此时1秒计时器T0计时,
单片机中只用一个开关控制8个LED轮流亮灭,这很容易实现,也是最简单的控制方法,只要识别了按键按下了,就可以控制。轮流点亮更容易,用移位函数_crol_或_cror_就行了。是要仿真吗,给你个仿真图。
用一个寄存器做变量就可以。假如按键是一个开个,接在P1.0,八个灯在P0,低电平灯亮 程序是这样的 MOV 30H ,#00 LOP :SETB P1.0 JNB P1.0, PRESS AJMP LOP PRESS:INC 30H MOV A,30H CJNE A,#9
单片机怎么实现一个开关控制八个灯按一下亮一个按
//熄灭 } else led=0;} void delay(unsigned int i){自己根据单片机频率写个1MS带形参的演示程序} 这个程序是现写的。。应该能执行,有些细节没有写,自己修改下,只是个大框而已(比如函数声明,定义端口什么的)
设按钮状态(高/低)输入某个IO口;找到读取这个IO口的数据地址;程序不断读取这个地址,并比较相应位是否有变化;(要有去抖处理,否则一次按键会产生多个变化)设指示灯对应的IO口数据地址;根据按键发生与否设置这个IO口相应
为1时灯灭。P2.0接按键,为0时表示按键按下。程序如下:include
电路有问题啊,电源怎么能直接接到GPIO,这样大电流会损坏IC。P1口好像没有外部中断,那只有轮询了。这个就是按键检测嘛,网上一堆代码,so easy!
void main(void){ P1=oxff;//初始化P1 while(1){ LED=~K1;} }
1、首先打开桌面上的keil软件,在进行对51单片机进行编程时最常用的就是keil软件。2、编写相应的代码:#include
再次读取IO口,判断是否为低电平,如果是则表示有有效的按键按下,接着用while判断等待按键释放,然后让连接led的IO口电平取反以控制其亮灭(是强电的灯可以通过此处控制继电器的合、闭来控制灯的亮灭)。
求一个一个开关控制一个灯亮灭的C语言程序
sbit KEY = P0^1; sbit LED = P0^2; int keyscan(void) { bit keyval=0; if(KEY) { delay(30);//延时消抖 if(KEY) { keyval = ~keyval; //值取反 if(keyval ) { LED = 1;//led亮 } else { LED = 0;//led灭 } } } }电路有问题啊,电源怎么能直接接到GPIO,这样大电流会损坏IC。P1口好像没有外部中断,那只有轮询了。这个就是按键检测嘛,网上一堆代码,so easy!
按键外部中断,触发一次全局变量+1,点亮就是加一
用一个寄存器做变量就可以。 假如按键是一个开个,接在P1.0,八个灯在P0,低电平灯亮 程序是这样的 MOV 30H ,#00 LOP : SETB P1.0 JNB P1.0, PRESS AJMP LOP PRESS: INC 30H MOV A,30H CJNE A,#9,L_NEXT MOV 30H,#1 L_NEXT: JNB P1.0,$ MOV A,30H CJNE A,#1 ,LED1_ON CJNE A,#2, LED2_ON CJNE A,#3, LED3_ON CJNE A,#4, LED4_ON CJNE A,#5, LED5_ON CJNE A,#6, LED6_ON CJNE A,#7, LED7_ON CJNE A,#8, LED8_ON LJMP LOP LED1_ON: MOV P0,#0FEH //亮一个灯 LJMP LOP LED2_ON: MOV P0,#0FDH //亮一个灯 LJMP LOP LED3_ON: MOV P0,#0F8H //亮一个灯 LJMP LOP LED4_ON: MOV P0,#0F0H //亮一个灯 LJMP LOP LED5_ON: MOV P0,#0E0H //亮一个灯 LJMP LOP LED6_ON: MOV P0,#0D0H //亮一个灯 LJMP LOP LED7_ON: MOV P0,#080H //亮一个灯 LJMP LOP LED8_ON: MOV P0,#00H //亮一个灯 LJMP LOP
KEY EQU P1.0LED EQU P1.4ORG 0000HLJMP MAINORG 0030HMAIN: JB KEY,MAIN1 CLR LED SJMP MAINMAIN1: SETB LED SJMP MAIN END
检测是否有按键按下,相应的指示灯点亮,并熄灭其它的指示灯。至于10S锁住其他按钮,如果程序不做其它的事情,最简单的方法就是点亮指示灯后延时10S,再回到主函数扫描其它按键即可
#include "reg51.h" // 试试 sbit k1 = P1^0;//按键1 开关 sbit p6 = P1^6; //输出1 灯 bit t1, t2; void main(void) { while(1) { if(k1==0 && t1==0) {t1=1; p6=~p6;} if(k1==1 ) {t1=0;} }} // 下面是四个开关,两个灯 的实例 http://zhidao.baidu.com/question/532520062.html
用单片机控制第一个灯亮 #include //包含51单片机寄存器定义的头文件 void main(void) { while(1) { P1=0xfe; //P1=1111 1110B,即P1.0输出低电平 } }