sbit KEY2 = P1^1;sbit LED1 = P2^0;sbit LED2 = P2^1;void main(void){ //有必要的话,这里先对单片机各类寄存器进行初始化,这里因为简单,未做相关初始化工作 for(;;){ if(KEY1==0)//如果按键1被按下
MAIN:MOV SP,#7 MOV P0,#0FFH;P0口初始化,设置P0口为输入方式 LOOP:MOV A,P0;将P0口的状态读入累加器A,P0口的状态由开关SW1~SW2控制 MOV P1,A;P0口的状态送P1口显示 MOV 20H,A;将P0口的状态数据送20H单元
8个开关分别接P1.0-P1.7 控制输出是P0.0-P0.7LED灯 还有开关延时6S和按住一个按钮锁住其它按钮 例如:按下P0.0松开按钮 然后延时5s灯亮并且在5s之内锁住P0.1-P0.7的输入 --P0.0,是接的按键? 前面不
汇编语言的变成已经很不习惯了。假设 八个开关分别接在 P1.0—— P1.7,八个发光二极管接在 P0.0 -P0.7 。汇编语言编程如下。ORG 0000H start: mov P1,#0ffH mov P0,#0ffH mov A,P1 mov P0,A lcall delay
CPL P1.1 LOOP2:JB P0.2,LOOP3 JNB P0.2,CPL P1.2 LOOP3:JB P0.3,LOOP4 JNB P0.3,CPL P1.3 LOOP4:JB P0.4,LOOP5 JNB P0.4,CPL P1.4 LOOP5:JB P0.5,LOOP6 JNB P0.5,CPL P1.5 LOOP
求汇编语言程序:8个开关p0.0——p0.7分别控制8个灯p1.0——p1.7,
8个按键接P1口,8个LED接P0口。ORG 00H AJCX:JNB P1.0, AJCL-1 ;键按下,转移到消抖延时程序 JNB P1.1, AJCL-2 ;键按下,转移到消抖延时程序 JNB P1.2, AJCL-3 ;键按下,转移到消抖延时程序 JNB P1
i;while(1){k=P1;//读按键键值,此处省略消抖程序for(i=0;i<8;i++){ //8次循环if((k&0x01)==0){//扫描到按下的按键break;
void main(void){ //有必要的话,这里先对单片机各类寄存器进行初始化,这里因为简单,未做相关初始化工作 for(;;){ if(KEY1==0)//如果按键1被按下 {LED1=0;}//开启LED1灯 else{LED1=1;}//否则关闭LED1等,
include
include
简单的51单片机设计,用8个按键独立控制8个灯的程序!(高分!)要求如下:
led_5 BIT P1.5;led_6 BIT P1.6;led_7 BIT P1.7; ;定义开关LED的数据,假定LED正极一端接电源,另一端通过限流电阻接I/O端口: DATA_CloseLED EQU 11111111B;DATA_OpenLED E
1、依次亮,依次灭:从一个灯亮到全亮,再到全灭,每次改变一个灯亮灭 2、奇偶号灯间隔亮灭:隔一个灯亮一个灯亮灯时间为1s,没有灯全灭的时候 3、依次闪烁、切换时间为3秒,闪烁时间为2秒,我理解的是,没三
int led=0xff;void main(){ P2 = led; //led初始赋给P2口 while(1){ if(k==0) //如果按键按下 { while(k==0); //判断按键松开 led=~led;P2 = led; //按键按下取反再赋给P2口 } } }
程序如下:ORG 0000H LJMP MAIN ORG 000BH LJMP T0_INT ORG 0030H ;--- MAIN:MOV TMOD, #01H MOV TH0, #HIGH(65536 - 10000) ;10ms@12MHz MOV TL0, #LOW(65536 - 10000)SETB TR0
define uint unsigned int define uchar unsigned char void delay(uint z);void main(){ uchar a;a=0x00;P0=0x00;//P0输出; led共阴接法 P1输入按键另一端接地 P0加上拉电阻 P1=0xff;while(1){ P0=0x00;i
if(KEY1==0)//如果按键1被按下 {LED1=0;}//开启LED1灯 else{LED1=1;}//否则关闭LED1等,以下雷同if(KEY2==0){LED2=0;} else{LED2=1;} }//end main-for(;;)}//end main;
/***/void main()//主函数{u8 k,i;while(1){k=P1;//读按键键值,此处省略消抖程序for(i=0;i<8;i++){ //8次循环if((k&0x01)==0){//扫描到按下的按键break;//跳出循环}k>>=1;//k右移1位}P2=t
C51如何用8个按键,分别控制8个LED亮灭只允许一个LED亮?上电灯全灭。请
include
1、用精确定时的方法,设置流水灯运行时的时间间隔,延时时间为500MS。2、#include "reg51.h"首先写出单片机的头函数。3、#include "intrins.h"输入位移函数。4、unsigned int count=0,led;定义函数。5、输入主函数,定
8个就可以类推)\r\r1、初始值为0:上电复位后,单片机驱动数码管显示0.(如果不会,百度里搜51控制数码管等关键字,特别多试验电路和程序。
void main(void){ //有必要的话,这里先对单片机各类寄存器进行初始化,这里因为简单,未做相关初始化工作 for(;;){ if(KEY1==0)//如果按键1被按下 {LED1=0;}//开启LED1灯 else{LED1=1;}//否则关闭LED1等,
在C51单片机中编写8个开关控制8个小灯的程序,用C语言和汇编语言两种编写
k,i;while(1){k=P1;//读按键键值,此处省略消抖程序for(i=0;i<8;i++){ //8次循环if((k&0x01)==0){//扫描到按下的按键break;//跳出循环}k>>=1;//k右移1位}P2=table[i];//根据i的值显示}}
做出来了:
P1口接SW,SW另一端接地 P2口接LED,LED另一端接地
MOV IO_LED,#DATA_CloseLED;同时关闭8个LED LCALLDELAY500MS;延时0.5秒 MOV IO_LED,#DATA_OpenLED;同时打开8个LED LCALLDELAY500MS;延时0.5秒 LJMP MAIN;循环 END;上面程序演示了8个LED间隔0.5秒同时亮
程序如下:ORG 0000H LJMP MAIN ORG 000BH LJMP T0_INT ORG 0030H ;--- MAIN:MOV TMOD, #01H MOV TH0, #HIGH(65536 - 10000) ;10ms@12MHz MOV TL0, #LOW(65536 - 10000)SETB TR0
急求程序,89C51汇编语言写8个按键控制8个LED
这程序,是我写的。 程序,是好用的,初始状态,可以做到全灭。 你的电路,弄反了。 你把八个LED,都反过来,公共端,接在电源上,就可以了。 正确电路,可见: http://zhidao.baidu.com/question/591052586.html ------------ 按照楼主的电路,如下程序即可: ORG 0000H JMP MAIN ORG 000BH JMP T0_INT ORG 0030H ;--------------------------------- MAIN: MOV TMOD, #01H MOV TH0, #HIGH(65536 - 10000) ;10ms@12MHz MOV TL0, #LOW(65536 - 10000) SETB TR0 MOV IE, #82H MOV R7, #50 ;500ms ;初始化 MOV 20H, #03FH ;低 6 位的初始状态,是灭的 MOV 21H, #0FFH ;初始化 LOP:SJMP LOP ;--------------------------------- T0_INT: MOV TH0, #HIGH(65536 - 10000) ;10ms@12MHz MOV TL0, #LOW(65536 - 10000) MOV A, P2 CPL A MOV B, A XRL A, 21H ANL A, 21H MOV 22H, A MOV 21H, B ANL A, #3FH XRL 20H, A MOV A, 22H ANL A, #0C0H XRL 23H, A DJNZ R7, T0_E MOV R7, #50 ;500ms亮500ms灭 JB 23H.7, S2 XRL 20H, #80H SJMP S3 S2: ANL 20H, #7FH ;ORL 20H, #80H S3: JB 23H.6, S4 XRL 20H, #40H SJMP T0_E S4: ANL 20H, #0BFH; ORL 20H, #40H T0_E: MOV P1, 20H RETI ;--------------------------------- ENDORG 00H AJMP MAIN ORG 13H AJMP EX1INT ORG 0030H MAIN: MOV P1,#0 SETB EA SETB EX1 SETB IT1 MAIN1: MOV P1,A AJMP MAIN1 EX1INT: INC A CJNE A,#0,RTI MOV A,#0 RTI: RETI END
用c51是多么简单的事情啊。你的每个灯的顺序不说。不好写。 思路这样的: sbit led1=p1^0; ~~~ 把所有的灯都定一下。 void delay(int ms) { int x,y; for(x=ms;x>0;x--) for(y=110;y>0;y--); } 一个nms的延迟,要求是12m的晶振。 void main() { while(1) { led1=0; delay(1000); led1=1; 里面随便写了。 } }
51单片机用汇编语言编写流水灯程序,就是控制多个LED ,使其在特定时间间隔内,只有一个LED 发光,其他熄灭,用这种方式顺序移动点亮LED的位置,就形成了流水灯的效果。以下是程序: ;假设晶振12MHZ,P1控制8个LED低电平亮 ;启动入口======================== ORG 0000H ;复位启动 AJMP START ; ORG 001BH ;T1中断 AJMP T1INT ; ;定义变量======================== YSJS EQU 30H;延时计数器 LED EQU 31H;LED控制缓冲器 ;主程序========================== START: MOV LED,#0FEH ;初始化数据 MOV YSJS,#0 ; ; MOV TMOD,#10H ;定时器1工作于方式1,16位定时器 MOV TL1,#0B0H ;设置定时初值 MOV TH1,#3CH ;定时时间=50mS SETB ET1 ;使能定时器1中断 SETB TR1 ;启动定时器1 SETB EA ;开总中断 MOV P1,LED ;初始化流水灯 ; LOOP: JMP LOOP ;循环等待中断 ; ; T1INT: PUSH PSW ;定时器1中断程序 PUSH ACC ;保护现场 ; MOV TH1,#3CH ;定时时间=50mS MOV TL1,#0B0H ; INC YSJS ; PUSH ACC ;保护ACC MOV A,YSJI ; CJNE A,#2,QT1 ;50mS*2=100mS MOV P1,LED ; MOV A,LED ; RL A ;累加器A的值循环左移1位 MOV LED,A ; MOV YSJS,#0 ; ; QT1: POP ACC ;恢复现场 POP PSW ; RETI ;返回主程序 END ;汇编程序结束
八个灯接在单片机的P1口(P0,P2,P3,P4都一样) while(1) { delay(你想要延时的时间); P1=0xff; delay(你想要延时的时间); P1=0; } 注意led最好加驱动,不然单片机会坏的。
//程序很简单也有很多方法都可以实现 。 #include #include "INTRINS.H" sbit k = P1^0; //P1.0作为按键输入 int led=0xff; void main() { P2 = led; //led初始赋给P2口 while(1) { if(k==0) //如果按键按下 { while(k==0); //判断按键松开 led=~led; P2 = led; //按键按下取反再赋给P2口 } } }
比如你的8个灯连在 P0口,如果是阴极的 你只要先定义 sbit P0^0=LED0; .....一定定义下去 然后再定义一个按钮 比如P1.1 sbit P1^1=key; 代码里写 while(true){if(key==1){LED0=0;LED1=0;..//把你要亮的灯置0就行了。阳极的话置1}}
汇编语言的变成已经很不习惯了。 假设 八个开关分别接在 P1.0—— P1.7,八个发光二极管接在 P0.0 -P0.7 。汇编语言编程如下。 ORG 0000H start: mov P1,#0ffH mov P0,#0ffH mov A,P1 mov P0,A lcall delay ljmp start delay: mov r7,#100 loop: mov r6,#100 djnz r6,$ djnz r7,loop ret END
延时做 nop 的多次嵌套循环,用ajump 指令和 djnz Rn 指令 关于屏蔽接收,可以用相关寄存器做 逻辑处理,或者是比较跳转处理 摁钮来说,因为是输入,在输入之前,先对接脚做输出高电平处理,然后做接收,否则可能会烧掉单片机接脚内部的fet 管 延时六秒不好控制,如果晶振频率你知道的话,多用nop指令,来缓冲循环段的长短不一问题