设LED驱动端口为 P1,输出高电平为LED亮,则建立一个数组,如下图;数组赋值:char LEDA[23]={0x18,0x3c,};输出:for(i=0;i<23;i++){ P1=LEDA[i]; delay(); }
答疑解难 跑马灯程序 ORG 0000H LJMP MAIN ORG 0100H MAIN: JB P0.7,MAIN ;等待开始键按下 LCALL YS ;按键延时 JB P0.7,MAIN MOV A,#7FH ;是开始键按下 则跑马灯开始
|P1口接8个发光二极管共阳 include
此时 给p0 送0灯就亮 1灯就不亮 程序已经过调试 可用 仿真如下:
delay:mov r3,#20 ;延时子程序 d1: mov r4,#200 d2: mov r5,#248 djnz r5,djnz r4,d2 ret end C语言的://例程:LED流水灯 include
做单一灯的左移右移,八个发光二极管L0-L7分别接在单片机的P0.0-P0.7接口上,输出“0”时,发光二极管亮,开始时P0.0→P0.1→P0.2→P0.3→┅→P0.7→P0.6→┅→P0.0亮,重复循环。/ ORG 0000H LJMP
求个51单片机 汇编语言设计的LED跑马灯的程序
电路很简单八个led灯接在p1口.运行后看到的效果是 从第一个灯开始 随着时间变化 二进制数的递减 所有的灯都会依次的点亮,当全部的灯都被点亮后再重新开始这个过程 一直循环下去 单片机是不是很有趣?下面是c语言程序源码
在这个单片机流水灯代码中,假设使用的是8051单片机。需要定义8个LED灯,分别连接到P1端口的不同引脚上。然后使用一个循环结构来控制这8个LED灯按照一定的顺序逐个亮起,形成流水灯的效果。具体来说,使用for循环来控制LED灯
用p1口控制:org 0000h ajmp main org 0030h main: mov a,#01h mmm: mov r3,#08h rl a mov p1,a lcall dely500ms lcall dely500ms djnz r3, mmm mov a,#01010101b mmm1:mov r3,#06h rr a mov p1,
for(i=0;i<8;i++) // for循环语句,完成8个循环 { P1= ~ j; // 对变量j 中的值按位取反后,从P1口输出 delay02s( ); // 延时0.2s j= j<<1; // 左移1位 } j=0x80; //
while(1){ P1=0xfe; //第1个管亮 delay(500);P1=0xfd; //第2个管亮 delay(500);P1=0xfb; //依次类推 delay(500);P1=0xf7;delay(500);P1=0xef;delay(500);P1=0xdf;delay(500);P1=0xbf;de
int i;main(){ while(1){ c++;if(c>8)c=0;P1=xxx[c];for(i=0;i<55550;i++);} }
P1=0xfe; //给初始化值 换算成二进制是1111 1110 while(1){ delay(30000);//延时程序 P1<<=1; //左移一位 该语句等效于 P1=P1<<1 P1|=0x01; //最后一位补1,该语句等效于 P1=P1|0x01 符号"
求一份8051单片机的跑马灯C程序。要求只用p1端口控制8盏灯。让8盏灯循环点亮。
其次,1hz闪烁,即代表定时1s开、关灯。所以要用到定时器。代码如下:include "stdio.h"define led_on p1.1 = 1;define led_off p1.1 = 0;bit flag_1s;bit flag_cnt;void main(void){ sys_init();while(1)
delay();P3=0xdf;//第六个灯亮 delay();P3=0xbf;//第七个灯亮 delay();P3=0x7f;//第八个灯亮 delay();} }
1、可以通过左移函数_crol_()和右移函数_cror_()来实现LED等的来回流动。2、具体实现方法可以参考如下程序:
假设P1接8 个LED,高电平时LED点亮,主程序如下:void main(void){ uchar i;while(1){ for(i=0;i<7;i++){ P1=1<>i;delay_ms(500);} } }
unsigned LED,i;LED = 0xfe;EA = 0;while(1){ for(i=0;i<7;i++){delay(100);LED = (LED<<1)|0x01;P3 = LED;} for(i=0;i<7;i++){delay(100);LED = (LED>>1)|0x80;P3 = LED;} } } 汇
c语言和汇编的程序八个LED依次左移逐个点亮,点亮后在依次右移逐个点亮不断循环
P2=0xfe; //第1个管亮 delay(500);P2=0xfd; //第2个管亮 delay(500);P2=0xfb; //依次类推 delay(500);P2=0xf7;delay(500);P2=0xef;delay(500);P2=0xdf;delay(500);P2=0xbf;delay(500);P2=0x7f;d
电路:一般的单片机 和 TTL集成电路芯片,都是灌电流能力强,拉电流能力极弱。为此,应该用输出低电平,来带动负载。而你的电路,是用高电平带动LED发光的,仿真,也许还行;实际的电路,LED是不会亮的。
1.把灯换个模型,LED-BIRG试试 2.把电阻去掉试试 3.把总线去掉试试
{ P2=0x01;//此处有改 for(i=0;i<7;i++){ P2=_crol_(P2,1); //P2 的值向左循环移动 DelayMS(150);} P2=0x80;//此处有改 for(i=0;i<7;i++){ P2=_cror_(P2,1); //P2 的值向右循环移动 Del
51单片机跑马灯电路图(左右来回循环),8个led灯分别接在P2口,c程序、仿真图如下。电路并未出现预期效果
MOV A,#0FEH MOV R2,#8 LP1: ;左移 MOV P0,A RL A LCALL DELAY DJNZ R2,LP1 MOV R2,#8 LP2: ;右移 MOV P0,A RR A LCALL DELAY DJNZ R2,LP2 MOV R2,#8 LP3: ;闪烁右移 MOV P0,A RR
我给你一个程序,单片机为STC51,晶振为12MHz。跑马灯采用查表法,定时用查询式定时器,时间为500ms;I/O口用25只引脚,P0,P1,P2都用8个,P3用P3.0,程序用C语言。为了取得一个较好的观赏效果,对你的要求作了少许
1、首先51单片机LED流水灯正反向流水结合,即正向流水一遍。2、其次再反向流水回来,时间间隔200ms。3、最后单片机跑马灯即可把间隔时间调成200,完成操作。
点了S2按键。按下按键S1,跑马灯正向运行;按下按键S2,跑马灯反向运行,所以跑马灯反方向跑,可能是按了S2按键。常规的跑马灯,是指将多个发光二极管分别连接到单片机的某一并行端口处,通过编程控制这几个发光二极管依次点亮。
单片机跑马灯的流动速度与延时长短有关,延时越长,跑的越慢。反之,延时越短,跑的越快,所以并没有什么全速运行命令,当流动速度快到一定程度后,看剧的效果就是全亮了。这与多位数码管动态显示是一个原理,如果每一位
分别写入“4”即可 另外 将程序中 “k88”及D200开始的寄存器分别写入不同的值即可变换成 以1s为单位的跑马灯程序
单片机跑马灯
1、用精确定时的方法,设置流水灯运行时的时间间隔,延时时间为500MS。2、#include "reg51.h"首先写出单片机的头函数。3、#include "intrins.h"输入位移函数。4、unsigned int count=0,led;定义函数。5、输入主函数,定
可以实现,首先随便连接一个I/O口,P1/P2/P0均可,然后赋予一初值,然后使用本征函数_cror_(循环变量,循环次数)循环右移,或者循环左移实现。左移只需改掉本征函数,同时亮灭可以先给全1,然后给全0,中间加延时,自
delay();P3=0xbf;//第七个灯亮 delay();P3=0x7f;//第八个灯亮 delay();} }
1、可以通过左移函数_crol_()和右移函数_cror_()来实现LED等的来回流动。2、具体实现方法可以参考如下程序:
单片机C语言如何实现8个LED流水灯来回流动?
走马灯的程序到处是吧。给你贴一个杜洋的流水灯,自己参考着改。 /********************************************************************************************* 程序名: 8路流水灯 编写人: 杜洋 编写时间: 2009年5月13日 硬件支持: STC12C2052 内部RC或外部12MHZ晶振 接口说明: 8个LED彩灯接P1口 修改日志: NO.1-2009年5月14日 在程序前面加入参数定义项 /********************************************************************************************* 说明: 根据参数设置产生流水LED效果。 /*********************************************************************************************/ #include //51头文件 /*********************************************************************************************/ #define DY_PORT P1 //设置LED连接的I/O组 #define DY_SPEED 100 //设置每一个明亮级的停留时间(值域:0~65535) /********************************************************************************************* bit [自定义名] ; //定义一个位(位的值只能是0或1)例:bit LED #define [代替名] [原名] //用代替名代替原名(可以方便修改常改或调试的值)例:#define LED P1 sbit [自定义名] = [系统位名] ; //自定义系统位名。例:sbit Add_Key = P3 ^ 1; unsigned char [自定义名] ; //定义一个0~255的整数变量.例:unsigned char a; unsigned int [自定义名] ; //定义一个0~65535的整数变量 /*********************************************************************************************/ void delay (unsigned int a){ // 1ms延时程序 unsigned int i; while( --a != 0){ for(i = 0; i < 600; i++);//STC单片机在外部晶振为12MHz时i值上限为600 } //AT89C51单片机在外部晶振为12MHz时i值上限为125 } /*********************************************************************************************/ void main(void){ unsigned int i; unsigned int temp; while(1){ temp=0x01; for(i=0;i<8;i++){ //8个流水灯逐个闪动 DY_PORT=~temp; delay(DY_SPEED); //调用延时函数 temp<<=1; } temp=0x80; for(i=0;i<8;i++){ //8个流水灯反向逐个闪动 DY_PORT=~temp; delay(DY_SPEED); //调用延时函数 temp>>=1; } temp=0xFE; for(i=0;i<8;i++){ //8个流水灯依次全部点亮 DY_PORT=temp; delay(DY_SPEED); //调用延时函数 temp<<=1; } temp=0x7F; for(i=0;i<8;i++){ //8个流水灯依次反向全部点亮 DY_PORT=temp; delay(DY_SPEED); //调用延时函数 temp>>=1; } } } /*********************************************************************************************/#include "reg51.h" main() { unsigned int i,j; while(1) { P1=0xfe; //点亮第一个LED for(i=200;i>0;i--) for(j=500;j>0;j--); P1=0xfd; //点亮第二个LED for(i=200;i>0;i--) for(j=500;j>0;j--); P1=0xfb; //点亮第三个LED for(i=200;i>0;i--) for(j=500;j>0;j--); P1=0xf7; //点亮第四个LED for(i=200;i>0;i--) for(j=500;j>0;j--); P1=0xef; //点亮第五个LED for(i=200;i>0;i--) for(j=500;j>0;j--); P1=0xdf; //点亮第六个LED for(i=200;i>0;i--) for(j=500;j>0;j--); P1=0xbf; //点亮第七个LED for(i=200;i>0;i--) for(j=500;j>0;j--); P1=0x7f; //点亮第八个LED for(i=200;i>0;i--) for(j=500;j>0;j--); } } 或: #include "reg51.h" void delay(unsigned int t) { unsigned inti,j; for(i=t;i>0;i--) for(j=110;j>0;j--); } main() { unsigned char w,i; while(1) { w=0xfe; for (i=0;i<8;i++) { P1=w; //循环点亮LED w<<=1; //点亮灯的位置移动,最低位补0 w=w|0x01; //将最低位置1 delay(500); //延时 } } } 或: #include "reg51.h" //程序中使用_crol_函数,所以要包含头文件"intrins.h" #include "intrins.h" void delay(unsigned int t) { unsigned int i,j; for(i=t;i>0;i--) for(j=110;j>0;j--); } main() { unsigned char temp; temp=0xfe; while(1) { P1=temp; delay(500); //延时 temp=_crol_(temp,1); //点亮LED的位置循环左移一位 } }
汗-----那么简单的问题也拿出来问! 不知道对你有什么用? 若想学,建议继续去看点基础吧! #include "reg51.h" #include"intrins.h" #define uint unsigned int void DelayMs(uint t) { uint i; while(t--) { for(i=0;i<124;i++) {;} } } void main() { uint ax,bx; while(1) { bx=0x01; for(ax=0;ax<8;ax++) { P1=bx<<ax; Delay(10000); } } } 临时给你写了一个,还没有备注和调试哦; 8个灯一头接P1口的8个脚,另一头接地; 希望对你有用!
org 0000h ajmp start org 0030h start: mov a,#0ffh ; clr c ; mov r2,#08h ;循环八次。 loop: rlc a ;带进位左移。 mov p1,a ;输出到P1口。 call delay ;延时一段时间 djnz r2,loop ;反复循环 mov r2,#07h ;再往回循环。 loop1: rrc a ;带进位右移 mov p1,a ;输出到P1口。 call delay ;延时一段时间 djnz r2,loop1 ;反复循环 jmp start ;重新开始 delay: mov r3,#20 ;延时子程序 d1: mov r4,#20 d2: mov r5,#248 djnz r5,$ djnz r4,d2 djnz r3,d1 ret end
#include #include #define uchar unsigned char #define uint unsigned int void DelayMS(uint x) { uchar i; while(x--) { for(i=125;i>0;i--); } } void main() { uchar i; P2=0x01; DelayMS(70); while(1) { for(i=7;i>0;i--) { P2=_crol_(P2,1); DelayMS(70); } for(i=7;i>0;i--) { P2=_cror_(P2,1); DelayMS(70); } } } 刚刚写的 不知道能不能满足你的需要
//假设晶振12MHZ,P1控制8个LED低电平亮 #include "reg51.h" unsigned int YSJS=0; signed char LED=0XFE; void main(void) { TMOD |= 0X10; //定时器1工作于方式1,16位定时器 TH1 = 0XFE; //定时器1定时时间=500uS TL1 = 0X0C; ET1 = 1; //使能定时器1中断 TR1 =1; EA =1; //开总中断 while(1) { } } void TIMER1(void) interrupt 3 //定时器1中断函数使用默认寄存器组 { TH1 = 0XFE; //定时器1定时时间=500us TL1 = 0X0C; YSJS++; if(YSJS==2000) //500uS*2000=1000000uS=1S { P1 = LED; LED=LED<<1; LED=LED | 1 if(LED==0XFF)LED=0XFE; YSJS = 0 } }
你好,可以用单片机实现 来自天蝎雨之林的回答,满意请采纳,谢谢~祝你生活愉快~
若P1.7—P1.0对应LED7—LED0 ,低电平点亮,高电平熄灭 初始值 A=0xfe ,即LED0 亮,其余灭 执行CLR C; RLC A; A=0xfc ,LED0、LED1亮 执行CLR C; RLC A; A=0xf8 ,LED0、LED1、LED2亮 以此类推: CLR C; RLC A; 在这段程序中,这2条指令目的就是使A变量的数值左移,然后末位补0(bit 0); SETB C; RRC A; 在这段程序中,这2条指令目的就是使A变量的数值右移,然后高位补1(bit 7);
程序直接复制粘贴一下就好了,软件的话需要找一下
只要程序不行 还得有电路 有原理图吗 发给我就可以写了
查询方式: ORG 0000H AJMP MAIN MAIN: MOV P1,#01H MOV R0,#8 MOV A,P1 XU: RL A MOV P1,A ACALL DELAY DJNZ R0,XU AJMP MAIN DELAY: MOV R0,#0FFH ONE:MOV R1,#0FFH TWO:MOV R2,#02H THE:DJNZ R2,THE DJNZ R1,TWO DJNZ R0,ONE(将近1S) RET END 中断方式: org 0000h ;程序从0000开始运行 jmp init;跳到主程序 init: mov ie,#10000001b ;中断使能 mov ip,#00000001b ;中断优先 mov tcon,#0000000b ;中断为电平触发 main: ;主程序循环点亮 mov p1,#00h ;全亮 lcall delay ;延时一段时间 mov a,#0feh ;每次只亮一个灯。 loop: mov p1,a ;输出到p1 lcall delay ; 延时 rl a ;循环左移。 ajmp loop ; 跳转main继续循环 delay: mov r5,#20 ;延时子程序1闪烁灯调用 d1:mov r6,#20 d2: mov r7,#250 djnz r7,$ djnz r6,d2 djnz r5,d1(时间此处可自行设置)
关于五一单片机,16位LED灯跑马灯汇编语言程序可以和你共同分享