int runlinght(){int i,j;j=1;for(i=0;i<8;i++){P[i]=(j<

如果你的点灯是低电平 那么编码如下:0x7e,0xbd,0xdb,0xe7;这四个编码实现从两边向中间流0xdb,0xbd,0x7e;由上面的四个编码加上下面的四个编码就达到了从中间向两边显示的效果了循环显示这七个编码就OK

DB 07EH 03CH 018H 000H 000H 018H 03CH 07EH ;两边叠加后递减 DB 000H ;全亮 END ;程序结束指令 C语言程序如下:/* 该实验是花样流水灯(8个发光二极管以各种方式循环点亮),功能是花样流水灯(8个发光二极管

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

/ 程序名称:hc595.c 程序功能:595的应用文件 程序作者:吴鉴鹰 创建时间:2014-3-10 修改时间:程序版本:V0.1 / / 包含头文件 / include "inc/hc595.h"include "reg51.h"/ 定义引脚 / /* 时钟信号线引脚定义

stc89c52单片机8个led灯从两边往中间跑c语言程序

1.51单片机C语言实现循环8个流水灯左移三次,后右移三次。例程:include //51单片机头文件#include //包含有左右循环移位子函数的库#define uint unsigned int //宏定义#define uchar unsig

void disp_mode(uchar mode_1) //这个函数控制三个LED灯 { switch(mode_1){ case 0: //模式0,全灭 LED_H=1;LED_M=1;LED_S=1;TR0 = 1;break;case 1: //模式1,LED_S亮 LED_H=1;LED_M=1;LED_S

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

DB 000H ;全亮 END ;程序结束指令 C语言程序如下:/* 该实验是花样流水灯(8个发光二极管以各种方式循环点亮),功能是花样流水灯(8个发光二极管以1S间隔以各种方式循环点亮) */ include//包含reg.52文件 define uint

include void delay(int z){ int x;while(z--) for(x = 0; x < 20000; x++);} main(){ while(1) { P1 = 0x7e; delay(50); //最外侧亮 P1 = 0xbd; delay(50); //向中间移 P1

//流水灯#include "reg52.h"#define LED_PORT P3void delay(unsigned char time){ unsigned char i,j,k; for(i=0;i

51单片机c语言编写一个流水灯程序,要求如下(不能用数组,8个led指示灯从两边往中间移动,然后再分开)

//流水灯#include "reg52.h"#define LED_PORT P3void delay(unsigned char time){ unsigned char i,j,k; for(i=0;i

向。51单片机流水灯从两边是向中间亮代码的。1、先从右到左逐个亮灭,再从左到右逐个亮灭。2、由两侧向中间,再中间向两侧亮灭。3、先右再左逐个亮起,不熄灭;再从左到右逐个熄灭。4、先左再右逐个亮起,不熄灭再

A LCALL DELAY INC R0 DJNZ R2,LOOP MOV R2,#4LOOP1: DEC R0 MOV A,@R0 MOV P1,A LCALL DELAY DJNZ R2,LOOP1 MOV R2,#4 SJMP LOOPDELAY: MOV R3,#200DLY: MOV R4

这个流水灯程序最好用数组定义8个状态的灯,这样用for循环就可以实现了。简洁明了,易读性强,也容易理解。include define uchar unsigned char code uchar ledtab[10]= { 0xff,0xe7,0xc3,0x81,0x00,//

DB 07EH 03CH 018H 000H 000H 018H 03CH 07EH ;两边叠加后递减 DB 000H ;全亮 END ;程序结束指令 C语言程序如下:/* 该实验是花样流水灯(8个发光二极管以各种方式循环点亮),功能是花样流水灯(8个发光二极管

如果你的点灯是低电平 那么编码如下:0x7e,0xbd,0xdb,0xe7;这四个编码实现从两边向中间流 0xdb,0xbd,0x7e;由上面的四个编码加上下面的四个编码就达到了从中间向两边显示的效果了 循环显示这七个编码就OK

include define uchar unsigned char define uint unsigned int uchar TS_Count,TM_Count,TH_Count,count_N;sbit LED_H=P3^0;sbit LED_M=P3^1;sbit LED_S=P3^2;void DelayMS(uint x) //延时函数

单片机流水灯由两边向中间流再由中间向两边流的汇编语言怎么写?

如果只用一个端口的话,你可以建一个表,如果LED是高电平点亮的话,里面存放数据0x81,0x42,0x24,0x18 如果LED是低电平点亮的话,里面存放数据 0x7e,0xbd,0xdb,0xe7 然后在循环里一直按照数组下标0到3递增3到0递减将

可以将让流水灯由两边向中间亮的代码即0FFH、 07EH、 0BDH、0DBH、 0E7H五个代码 连续存放到片内数据存储器中,然后循环每隔一定的时间,将它们分别取出 送给单片机I/O口 (即控制小灯进行由两边向中间亮的流水

这个流水灯程序最好用数组定义8个状态的灯,这样用for循环就可以实现了。简洁明了,易读性强,也容易理解。include define uchar unsigned char code uchar ledtab[10]= { 0xff,0xe7,0xc3,0x81,0x00,//

如果你的点灯是低电平 那么编码如下:0x7e,0xbd,0xdb,0xe7;这四个编码实现从两边向中间流 0xdb,0xbd,0x7e;由上面的四个编码加上下面的四个编码就达到了从中间向两边显示的效果了 循环显示这七个编码就OK

while(P1!=0xff); //等待按键释放,源程序有点错误需要加分号;return Key_NO;}

MAIN: MOV SP, #60H ;给堆栈指针赋初值 MOV P1,#0FFH ;给P1口赋值 MOV DPTR,#TABLE;查表 LIGHT: MOV R4,#42 ;设置循环次数 LOOP: MOV A,#42 ;给A赋初值 SUBB A,R4 ;将A的值与R4的值

单片机流水灯用汇编语言写怎么从两边向中间亮再从中间

//流水灯#include "reg52.h"#define LED_PORT P3void delay(unsigned char time){ unsigned char i,j,k; for(i=0;i

这个流水灯程序最好用数组定义8个状态的灯,这样用for循环就可以实现了。简洁明了,易读性强,也容易理解。include define uchar unsigned char code uchar ledtab[10]= { 0xff,0xe7,0xc3,0x81,0x00,//

void disp_mode(uchar mode_1) //这个函数控制三个LED灯 { switch(mode_1){ case 0: //模式0,全灭 LED_H=1;LED_M=1;LED_S=1;TR0 = 1;break;case 1: //模式1,LED_S亮 LED_H=1;LED_M=1;LED_S

LED_arr[pos++];

51单片机C语言对流水灯编程,用定时中断做 LED等从两边向中间亮

个开关时,8盏灯从左到右依次被点亮,最后全亮;闭合第3个开关时,8盏灯从右到左依次被点亮,最后全亮个开关时,8盏灯从左到右依次被点亮,最后全亮;闭合第3个开关时,8盏灯从右到左依次被点亮,最后全亮个开关时,

求汇编,八个led交替闪烁,汇编语言汇编语言 按下开关s1(开关是那种按下去不会弹回来的),led1.3.5.7和led2.4.6.8交替闪烁,按下s2,led1234和led5678交替闪烁,间隔都是0.5秒,按下s3全灭 --- 电路与程序

;假设1:D1~D8八个彩灯接在P1口,输出低电平发光 ;假设2:系统晶振为12MHz ;假设3:N = 5 ;程序如下:ORG 0000H MOV R3, #5 ;N=5 LOOP0:MOV A, #0FFH MOV P1, #0FFH ;开始时全灭 ;---逐个

A LCALL DELAY INC R0 DJNZ R2,LOOP MOV R2,#4LOOP1: DEC R0 MOV A,@R0 MOV P1,A LCALL DELAY DJNZ R2,LOOP1 MOV R2,#4 SJMP LOOPDELAY: MOV R3,#200DLY: MOV R4

/*亮的现象:先是全灭,然后依次逐个点亮,然后依次逐个叠加,然后依次逐个递减,然后两边靠拢后分开,然后两边叠加后递减,最后全亮。循环!*/ void main()//main函数 { a=0;//给a赋初值 while(1)//while循环 { P1

00001000,左移;00010000,右移,两者相或!

用汇编语言编写一个八个LED灯要求顺序由两边向中间点亮怎么写

main: mov P1,#0aah acall delay mov P1,#55H acall delay sjmp main delay:mov r7,#0ffh de:mov r6,#0ffh djnz r6,$ djnz r7,de ret end 这就是你想要的效果,不妨试试哦!
这个流水灯是很普通的一种花样,假设LED接P1口,程序如下: ORG 0000H LJMP MAIN 0RG 000BH LJMP T0ISR ORG 0030H MAIN: MOV TMOD,#01H MOV TH0,#HIGH(65536-50000) ;50毫秒定时 MOV TL0,#LOW(65536-50000) SETB TR0 SETB ET0 SETB EA MOV A,#0FEH MOV P1,A MOV R2,#20 SJMP $ T0ISR: CLR TR0 MOV TH0,#HIGH(65536-50000) MOV TL0,#LOW(65536-50000) SETB TR0 DJNZ R2,T0E ;1秒未到直接退出 MOV R2,#20 RL A MOV P1,A ;1秒一变的花样流水灯。 T0E: RETI END
#include #define uchar unsigned char #define uint unsigned int uchar TS_Count,TM_Count,TH_Count,count_N; sbit LED_H=P3^0; sbit LED_M=P3^1; sbit LED_S=P3^2; void DelayMS(uint x) //延时函数 { uchar t; while(x--) { for(t=120;t>0;t--); } } void dis_time(uchar H_t,uchar M_t,uchar S_t) { uchar i; uchar code DSY_CODE[]= { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf, }; //定义数码管显示0~9的控制码 uchar code PS_CODE[]={0x01,0x02,0x04,0x08,0x010,0x20,0x40,0x80}; //这是数码管第n位的控制码 //以下几行是给每一个要显示的数码管赋值 uchar dis_bit[8]; dis_bit[0]=H_t/10%10; //千位 dis_bit[1]=H_t%10; //百位 dis_bit[2]=10; //十位 dis_bit[3]=M_t/10%10; dis_bit[4]=M_t%10; //千位 dis_bit[5]=10; //百位 dis_bit[6]=S_t/10%10; //十位 dis_bit[7]=S_t%10; for(i=0;i<8;i++) { P2=PS_CODE[i]; //第i个数码管的位控制字 P0=DSY_CODE[dis_bit[i]]; //第i个数码管的段码控制字 DelayMS(5); //延时5毫秒。 } } void disp_mode(uchar mode_1) //这个函数控制三个LED灯 { switch(mode_1) { case 0: //模式0,全灭 LED_H=1; LED_M=1; LED_S=1; TR0 = 1; break; case 1: //模式1,LED_S亮 LED_H=1; LED_M=1; LED_S=0; TR0 = 0; break; case 2: //模式2,LED_M亮 LED_H=1; LED_M=0; LED_S=1; TR0 = 0; break; case 3: //模式3,LED_H亮 LED_H=0; LED_M=1; LED_S=1; TR0 = 0; break; } } uchar Key_code() //这个函数检测按键 { uchar Key_NO; if(P1==0xfe) //P1.0按键返回键值0 {Key_NO=0;} if(P1==0xfd) //P1.1按键返回键值1 {Key_NO=1;} if(P1==0xfb) //P1.2按键返回键值2 {Key_NO=2;} while(P1!=0xff); //等待按键释放,源程序有点错误需要加分号; return Key_NO; } void main() {uchar y=-1; uchar mode_N=0; TMOD=0X00; //定义定时器工作在模式0,13位定时器模式 TH0=(8192-5000)/32; //赋初值 TL0=(8192-5000)%32; IE=0X82; //开启定时器中断和总中断 TR0=1; //启动定时器 while(1) { if(P1!=0xff) //等待按键,如果有按键按下,获取键值 y=Key_code(); //获取键值 switch(y) { case 0: //第一个按键按下 mode_N++; //模式控制变量加1 if( mode_N>3) mode_N=0; break; case 1: //第二个按键按下控制数据加 switch( mode_N) { case 1:if(TS_Count<59) TS_Count++; break; case 2:if(TM_Count<59) TM_Count++; break; case 3:if(TH_Count<23) TH_Count++; break; } break; case 2: //第三个按键按下,控制数据减 switch( mode_N) { case 1:if(TS_Count>0) TS_Count--; break; case 2:if(TM_Count>0) TM_Count--; break; case 3:if(TH_Count>0) TH_Count--; break; } break; } y=-1; disp_mode(mode_N); dis_time(TS_Count,TM_Count,TH_Count); //dis_time(25,26,27); } } void LED_Flash()interrupt 1 //中断服务程序,定时用。 { TH0=(8192-5000)/32; TL0=(8192-5000)%32; if(++count_N>5) {if(++TS_Count==60) { TS_Count = 0; if(++TM_Count==60) { TM_Count = 0; if(++TH_Count==24) TH_Count = 0; } } count_N=0; } }
ORG 0000HLJMP MAINORG 0030HMAIN: MOV 30H,#7EH MOV 31H,#0BDH MOV 32H,#0DBH MOV 33H,#0E7H MOV R0,#30H MOV R2,#4LOOP: MOV A,@R0 MOV P1,A LCALL DELAY INC R0 DJNZ R2,LOOP MOV R2,#4LOOP1: DEC R0 MOV A,@R0 MOV P1,A LCALL DELAY DJNZ R2,LOOP1 MOV R2,#4 SJMP LOOPDELAY: MOV R3,#200DLY: MOV R4,#250 DJNZ R4,$ DJNZ R3,DLY RET END
嘿嘿 这个俺会 有加分吗? 可以将让流水灯由两边向中间亮的代码即0FFH、 07EH、 0BDH、 0DBH、 0E7H五个代码 连续存放到片内数据存储器中,然后循环每隔一定的时间,将它们分别取出 送给单片机I/O口 (即控制小灯进行由两边向中间亮的流水控制) 呵呵 满意就个满意回答吧
KEYR EQU P1.0//改下端口 忘记 p3口 是低还是高了KEYL EQU P1.1LED EQU P0ORG 0000HLJMP MAINORG 000BHLJMP T0ISRORG 0030HMAIN: MOV TMOD,#01H MOV TH0,#HIGH(65536-50000) MOV TL0,#LOW(65536-50000) SETB ET0 SETB EA MOV A,#0FEH MOV LED,A MOV R2,#0 CLR 00HLOOP: CLR TR0LOOPL: JB KEYL,LOOPR SETB TR0 RL A MOV LED,A JNB 00H,$ CLR 00H SJMP LOOPLLOOPR: JB KEYR,LOOP SETB TR0 RR A MOV LED,A JNB 00H,$ CLR 00H SJMP LOOPRT0ISR: CLR TR0 MOV TH0,#HIGH(65536-50000) MOV TL0,#LOW(65536-50000) SETB TR0 INC R2 CJNE R2,#20,T0E MOV R2,#0 SETB 00HT0E: RETI END
#include voiddelay(void) { unsignedinti,j; for(i=0;i<200;i++) for(j=0;j<1000;j++) ; } voidmain(void) { while(1) { P3=0xfe;//第一个灯亮 delay();//延时 P3=0xfd;//第二个灯亮 delay(); P3=0xfb;//第三个灯亮 delay(); P3=0xf7;//第四个灯亮 delay(); P3=0xef;//第五个灯亮 delay(); P3=0xdf;//第六个灯亮 delay(); P3=0xbf;//第七个灯亮 delay(); P3=0x7f;//第八个灯亮 delay(); } } 扩展资料 单片机C语言16种方式流水灯 voidmain() { while(1) { P1=0xfe;//点亮第一个发光管 Delay(5000); P1=0xfd;//点亮第二个发光管 Delay(5000); P1=0xfb; Delay(5000); P1=0xf7; Delay(5000); P1=0xef; Delay(5000); P1=0xdf; Delay(5000); P1=0xbf; Delay(5000); P1=0x7f;//点亮第八个发光管 } }
可以用一个数组存放LED灯的状态,在定时器里面为LED赋值数组里面的值就行 例如 LED_arr[10] = {0x81,0x42,0x24,0x18,0x24,0x42,0x81}; LED = LED_arr[pos++];
简单点的,用表格,事先计算好,放到ROM中,用的时候逐行编译输出就可以。 复杂点的,开一个缓冲区,用循环程序,根据花样的不同,每次填充一行,并输出,然后再计算一下行。除非表格太大,不建议这样用。 #define len 8 char tablelist[][len] = { "", "", "", "", "", } outline( char * s ) { int i; for(i=0; i<len; ++i ) { if ( s[i] == '0' ) { // 对应的灯亮 } else { // 对应的灯灭 } } } main() { for(;;) { outline( tablelist[i]); delay(..); } }
1.51单片机C语言实现循环8个流水灯左移三次,后右移三次。例程: #include //51单片机头文件#include //包含有左右循环移位子函数的库#define uint unsigned int //宏定义#define uchar unsigned char //宏定义sbit beep=P2^3;void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.{ //delay(500);大约延时500ms. uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }void main() //主函数{ uchar a,i,j; while(1) //大循环 { a=0xfe; //赋初值 for(j=0;j<3;j++) for(i=0;i<8;i++) //左移三次 { P1=a; //点亮小灯 beep=0; //开启蜂鸣器 delay(50); //延时50毫秒 beep=1; //关闭蜂鸣器 delay(50); //再延时50毫秒 a=_crol_(a,1); //将a变量循环左移一位 } a=0x7f; for(j=0;j<3;j++) for(i=0;i<8;i++) //右移三次 { P1=a; //点亮小灯 beep=0; //开启蜂鸣器 delay(50); //延时50毫秒 beep=1; //关闭蜂鸣器 delay(50); //再延时50毫秒 a=_cror_(a,1); //将a变量循环右移一位 } }}2.51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。