LED = 0x00;} while ( Maikuan!=200){ LED = 0x55;} Maikuan = 0;} //最难的:8个灯从第一个开始依次渐亮,直到最后一个。再从最后一个起渐暗,直到第一个。如此循环往复。for(j = 0;j<=7;j++){ i

利用取表的方法,使端口P1 做单一灯的变化:左移2 次,右移2 次,闪烁2 次 (延时的时间0.2 秒)。汇编源程序 ORG 0 START: MOV DPTR,#TABLE LOOP: CLR A MOVC A,@A+DPTR CJNE A,#01H,LOOP1 JMP START L

;以89c51单片机为例,假定用P1控制LED:IO_LED EQU P1;led_0 BIT P1.0;led_1 BIT P1.1;led_2 BIT P1.2;led_3 BIT P1.3;led_4 BIT P1.4;led_5 BIT P1.

P1口接SW,SW另一端接地 P2口接LED,LED另一端接地

你的电路,弄反了。你把八个LED,都反过来,公共端,接在电源上,就可以了。正确电路,可见:http://zhidao.baidu.com/question/591052586.html --- 按照楼主的电路,如下程序即可:ORG 0000H JMP MAIN ORG

程序如下: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

1、用精确定时的方法,设置流水灯运行时的时间间隔,延时时间为500MS。2、#include "reg51.h"首先写出单片机的头函数。3、#include "intrins.h"输入位移函数。4、unsigned int count=0,led;定义函数。5、输入主函数,

单片机流水灯C语言程序的源代码如下:include //51系列单片机定义文件 define uchar unsigned char //定义无符号字符 define uint unsigned int //定义无符号整数 void delay(uint); //声明延时函数 void main(void){ uint

void main(){ uchar a;a=0x00;P0=0x00;//P0输出; led共阴接法 P1输入按键另一端接地 P0加上拉电阻 P1=0xff;while(1){ P0=0x00;if(P1!=0xff){ a=P1;switch(a){ case 0xfe: P0=0x01;delay(3000);

C语言 include void delay(unsigned int a){ unsigned i,j;for(i=0;i

仿真电路如下:C 语言程序可见:http://hi.baidu.com/do_sermon/item/f8812371c31434590d0a0791 注意两者接口不同。

void main(void){ //有必要的话,这里先对单片机各类寄存器进行初始化,这里因为简单,未做相关初始化工作 for(;;){ if(KEY1==0)//如果按键1被按下 {LED1=0;}//开启LED1灯 else{LED1=1;}//否则关闭LED1等,

用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的延

在C51单片机中编写8个开关控制8个小灯的程序,用C语言和汇编语言两种编写

希望采纳,参考代码:includesbit Motor_L=P1^0;sbit Motor_R=P1^1;sbit K0=P0^0;sbit K2=P0^2;sbit K1=P0^1;sbit K3=P0^3;unsigned char time2s;/*定时器0初始化函数*/void InitTimer0(){

/* 准备第二个数据 */ uiDataOne = uiDataOne << 1;} /* 输入第二个数据:uiDataTwo */ for (i = 0; i < 8; i++){ /* 给出脉冲信号,首先将CLK置为0 */ HC595CLK = 0;if (0 != (uiDataTwo

include include define uint unsigned int define uchar unsigned char void delay(uint);void main(){ uchar i,j,k;uchar temp;temp=0xfe;while(1){ for(j=1;j>0;j--){ for(i=7;i

//0xfe = 1111 1110,//说明连接在P3.0端口的按键被按下,显示对应的数字然后跳出循环case 0xfd:P0=dofly_table[2];LED1=0;break;//调用表中的第三个//元素 0xa4 下标 0 才表示数组中的第一个元素case 0xfb:P

跪求!!!STC89C52单片机,用八个按键控制分别控制八个LED灯的代码(C语言)

LED = 0x00;} while ( Maikuan!=200){ LED = 0x55;} Maikuan = 0;} //最难的:8个灯从第一个开始依次渐亮,直到最后一个。再从最后一个起渐暗,直到第一个。如此循环往复。for(j = 0;j<=7;j++){ i

利用取表的方法,使端口P1 做单一灯的变化:左移2 次,右移2 次,闪烁2 次 (延时的时间0.2 秒)。汇编源程序 ORG 0 START: MOV DPTR,#TABLE LOOP: CLR A MOVC A,@A+DPTR CJNE A,#01H,LOOP1 JMP START L

;以89c51单片机为例,假定用P1控制LED:IO_LED EQU P1;led_0 BIT P1.0;led_1 BIT P1.1;led_2 BIT P1.2;led_3 BIT P1.3;led_4 BIT P1.4;led_5 BIT P1.

P1口接SW,SW另一端接地 P2口接LED,LED另一端接地

你的电路,弄反了。你把八个LED,都反过来,公共端,接在电源上,就可以了。正确电路,可见:http://zhidao.baidu.com/question/591052586.html --- 按照楼主的电路,如下程序即可:ORG 0000H JMP MAIN ORG

程序如下: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

7FH用2进制表示就是0111,1111这就是P1口各引脚对应的电位高低,是8个按键给的信号 MOV P1, #0FFH 就是1111,1111,如果二极管是共阳极的,就是让所有二极管都不亮

用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的

void main(void){ //有必要的话,这里先对单片机各类寄存器进行初始化,这里因为简单,未做相关初始化工作 for(;;){ if(KEY1==0)//如果按键1被按下 {LED1=0;}//开启LED1灯 else{LED1=1;}//否则关闭LED1等,

ORG 000H LJMP MAIN ORG 0030H MAIN:MOV SP,#7 MOV P0,#0FFH;P0口初始化,设置P0口为输入方式 LOOP:MOV A,P0;将P0口的状态读入累加器A,P0口的状态由开关SW1~SW2控制 MOV P1,A;P0口的状态送P1口显示 MOV 20

i;while(1){k=P1;//读按键键值,此处省略消抖程序for(i=0;i<8;i++){ //8次循环if((k&0x01)==0){//扫描到按下的按键break;

include 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

简单的51单片机设计,用8个按键独立控制8个灯的程序!(高分!)要求如下:

汇编:ORG 00H MOV P2,#80H START:MOV A,#0FFH ;赋初值 CLR C MOV R2,#8 LOOP:RRC A ;带进位右移 MOV P1,A CALL DELAY DJNZ R2,LOOP MOV R2,#7 LOOP1:RLC A ;带进位左移 MOV P1,A CALL DELAY DJNZ

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,是接的按键? 前面不

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,

汇编语言的变成已经很不习惯了。 假设 八个开关分别接在 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指令,来缓冲循环段的长短不一问题
//程序很简单也有很多方法都可以实现 。 #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}}
这程序,是我写的。 程序,是好用的,初始状态,可以做到全灭。 你的电路,弄反了。 你把八个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 ;--------------------------------- END
ORG 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
电路(图)不合适 1、P0口应该用于输出,你可以接LED,且负极接管脚,正极接VCC. 2、按键任意接P1~P3 仅告诉这些!!
/******************************************************* * 程序名称:hc595.c * 程序功能:595的应用文件 * 程序作者:吴鉴鹰 * 创建时间:2014-3-10 * 修改时间: * 程序版本:V0.1 ******************************************************/ /* * 包含头文件 */ #include "inc/hc595.h" #include "reg51.h" /* * 定义引脚 */ /* 时钟信号线引脚定义 */ sbit HC595CLK = P0^5; /* 片选信号线引脚定义 */ sbit HC595RCK = P0^6; /* 数据输入引脚定义 */ sbit HC595DATA = P0^7; /****************************************************** * 函数名称:SendData * 函数功能:74HC595数据的发送 * 入口参数:unsigned int uiDataOne, unsigned int uiDataTwo * 出口参数:void *******************************************************/ void SendData(unsigned int uiDataOne, unsigned int uiDataTwo) { unsigned int i = 0; /* 将片选信号置为低电平 */ HC595RCK = 0; /* 输入第一个数据:uiDataOne */ for (i = 0; i < 8; i++) { /* 给出脉冲信号,首先将CLK置为0 */ HC595CLK = 0; if (0 != (uiDataOne & 0x80)) { HC595DATA = 1; } else { HC595DATA = 0; } /* 给出脉冲信号,首先将CLK置为1 */ HC595CLK = 1; /* 准备第二个数据 */ uiDataOne = uiDataOne << 1; } /* 输入第二个数据:uiDataTwo */ for (i = 0; i < 8; i++) { /* 给出脉冲信号,首先将CLK置为0 */ HC595CLK = 0; if (0 != (uiDataTwo & 0x80)) { HC595DATA = 1; } else { HC595DATA = 0; } /* 给出脉冲信号,首先将CLK置为1 */ HC595CLK = 1; /* 准备第二个数据 */ uiDataTwo = uiDataTwo << 1; } /* 将片选信号置为高电平 */ HC595RCK = 1; }
用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 ;汇编程序结束
程序如下: 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 MOV IE, #82H MOV R7, #50 ;500ms 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: ORL 20H, #80H S3: JB 23H.6, S4 XRL 20H, #40H SJMP T0_E S4: ORL 20H, #40H T0_E: MOV P1, 20H RETI ;--------------------------------- END 仿真电路如下: C 语言程序可见: http://hi.baidu.com/do_sermon/item/f8812371c31434590d0a0791 注意两者接口不同。
参考: http://hi.baidu.com/do_sermon/item/21321b80887395d25e0ec1f8