答疑解难 跑马灯程序 ORG 0000H LJMP MAIN ORG 0100H MAIN: JB P0.7,MAIN ;等待开始键按下 LCALL YS ;按键延时 JB P0.7,MAIN MOV A,#7FH ;是开始键按下 则跑马灯开始
51单片机是单片机接触最早的,下边这个程序希望能帮到你。(只有主函数,就不进行硬件什么定义以及头文件包含什么的了) void delay(int times){//延时函数,times控制延时时间 int i, j; for(i = 0; i < times; i+
没什么实质的区别只是各人说法不一样,像流水灯程序也有人叫跑马灯,说个简单的例子,比方说一个亮点不断的左循环就叫流水灯。从中间亮两个点,从左右两边流动就叫花样。
|P1口接8个发光二极管共阳 include
如果想实现无限循环那就采用死循环方式,可以无限的循环如while(1){};然后设定定时器定时时间为1s(此值需要根据单片机确定是否可以设定这么大),其次,设定一个变量对时间进行计数,根据计数情况做出相应的改变,程序可以这
我给你一个程序,单片机为STC51,晶振为12MHz。跑马灯采用查表法,定时用查询式定时器,时间为500ms;I/O口用25只引脚,P0,P1,P2都用8个,P3用P3.0,程序用C语言。为了取得一个较好的观赏效果,对你的要求作了少许
51单片机跑马灯程序
第一个 P0 = 0x00000000;int t = 3;while(t--) //3次循环 { while(1){ delay(500); //延时500毫秒 P0 <<= 1; //点亮下一个灯 P0 |= 1;if(P0==0x7FFFFFFF) //灯全亮后,全部熄灭 { P0 = 0x
内容:循环点亮P1口对应的8个LED灯,造成循环流水点亮的效果 ---*/ include
main: ;主程序循环点亮 mov p1,#00h ;全亮 lcall delay ;延时一段时间 mov a,#0feh ;每次只亮一个灯。loop: mov p1,a ;输出到p1 lcall delay ; 延时 rl a ;循环左移。ajmp loop ; 跳转ma
/* 程序详细功能介绍:做单一灯的左移右移,八个发光二极管L0-L7分别接在单片机的P0.0-P0.7接口上,输出“0”时,发光二极管亮,开始时P0.0→P0.1→P0.2→P0.3→┅→P0.7→P0.6→┅→P0.0亮,重复循
include
void main(void) //进入主函数 { unsigned char i, ucTemp; //声明无符号字符类型变量 i和ucTemp InitSys(); //调用一个初始化函数,具体实现过程你没给 ucTemp = 0xFE; // 1111 1110 //
rr a ;将A中的数据循环右移1位 mov p1,a ;再将A中右移过的数据送到P0 djnz r0,loop djnz r7,main ;移动不够8位,跳到LOOP处循环,ljmp rel ;流动1遍跳转到MAIN处循环流。;---显示延时--- ds
用c语言实现跑马灯循环亮灭
使用8255A扩展并行 l/O 口,可以实现16个发光二极管的跑马灯程序,具体操作如下:设置8255A芯片的I/O口为输出模式。2. 定义一个变量,用于存储当前亮灯的位置。3. 在程序中通过循环控制每个发光二极管的亮灭,从而实现跑马
答疑解难 跑马灯程序 ORG 0000H LJMP MAIN ORG 0100H MAIN: JB P0.7,MAIN ;等待开始键按下 LCALL YS ;按键延时 JB P0.7,MAIN MOV A,#7FH ;是开始键按下 则跑马灯开始
cmp bl,07fh ;判定该轮扫描是否结束 jnz again A: mov al,7 free: mov cx,10 mov dx,200h add al,bh cmp al,1 ;判断按键并指向所实现的花色程序 jnz next2 jmp liu1
详情请查看视频回答
ORG 0000H ;程序从000H地址开始运行 AJMP MAIN ;跳转到 MAIN程序 ORG 030H ;MAIN程序从030H开始运行 MAIN:MOV P2,#0FEH ACALL DEL ;调用延时子程序 MOV P2,#0FCH ACALL DEL ;调用延时子程序 MOV P2,#0
AJMP START START:SETB C ;跑马灯 ,一直循环255次MOV R0,#0FFH MOV A,#0 JX1:RLC A MOV P1,A LCALL DELAY500MS DJNE R0,JX1 SETB C MOV R0,#8 MOV A,#0 JX:RLC A ;P1.0>>>P1.7依次亮1S MOV
分别写入“4”即可 另外 将程序中 “k88”及D200开始的寄存器分别写入不同的值即可变换成 以1s为单位的跑马灯程序
请写出实现跑马灯功能的程序。
;从左到右 LOOP1:RLC A ;带进位左移一次;第一次移位结果为01 MOV P1, A ;将A中值放入P1点亮对应LED;该句可放在DELAY里,然后从右到左也去掉该句 ACALL DELAY ;延时,保持灯亮一段时间,自己根据实际情况调整
delay(200); led=_crol_(led,1); } led=0x7f; for(i=0;i<8;i++) { P1=led; delay(200); led=_cror_(led,1); } led=0xfe; for(i=0;i<8;i++) { P1=
方法有很多的,给你一个,你可以调试一下,你可以通过不同的晶振去计算定时器初值,如果你懂定时器这部分很好调通的 include
下面是一个简单的 Verilog HDL 代码,可以实现六位数码管动态显示从左到右为123456的效果。module six_digit_display(clk, reset, digit_out);// 输入信号 input clk; // 时钟信号 input reset; // 复位信号 /
wireclk;wirerst;pll pll(.clkin(clk_in),.clkout0(clk),//100M .locked(rst));always @(posedge clk or negedge rst ) begin if(!rst)cnt<=0;else if (cnt[25]) begin cnt<=0;end else begin cnt<=cnt
该题本质上是有限状态机的设计问题。令所要完成的功能要求包含四种模式,分别是①从左到右点亮,②从右到左点亮,③从两边到中间点亮,④从中间到两边点亮。要求四种模式依次切换,循环执行。令clk为led流水灯(共计12个LED
令clk为led流水灯的驱动时钟,rst为上升沿复位信号(异步)。则所实现的Verilog HDL代码部分如下:module led_run(clk,led,rst);input clk;//clk with low frequency like 1Hz input rst;//system reset signal output [
12个跑马灯 verilog hdl程序中rst复位 四种循环模式从左到右点亮 从右到左点亮
MOV A,#7FH ;是开始键按下 则跑马灯开始运行 LL: MOV P1,A LCALL YS ;显示延时 RR A ;循环右移一位 JB P0.6, LL ;没有按下停止键 则继续跑马 LCALL YS ;按键
程序1:ORG 0000H LJMP MAIN ORG 0030H MAIN:MOV SP,#5FH LOOP:MOV A,P2 MOV B,A MOV P0,A MOV P1,#0FFH LOOP1:LCALL DELAY MOV C,P1.7 MOV A,P0 RLC A MOV P0,A MOV A,P1 RLC A MOV P1,A MOV
延时0.5秒 DEL1:MOV R2,200 DEL2:MOV R3,7 DEL3:DJNZ R3,DEL3 DJNZ R2,DEL2 DJNZ R1,DEL1 RL A ;左移一位,点亮下一个发光二极管 LJMP LOOP END 这个是我写的跑马灯程序,没有左右振荡,自己参考参考加上去吧
跑马灯程序用汇编是很好实现的,只要用好循环移位指令就可以,以下是程序。ORG 0000H LJMP MAIN ORG 0030H MAIN:MOV A,#0FEH LOOP:MOV P1,A ;将控制字送端口 RL A ;控制字循环左移 LCALL DELAY ;延时
跑马灯程序用汇编是很好实现的,只要用好循环移位指令就可以,以下是程序。\x0d\x0aORG 0000H\x0d\x0aLJMP MAIN\x0d\x0aORG 0030H\x0d\x0aMAIN:\x0d\x0a MOV A,#0FEH\x0d\x0a\x0d\x0aLOOP:
(只有主函数,就不进行硬件什么定义以及头文件包含什么的了) void delay(int times){//延时函数,times控制延时时间 int i, j; for(i = 0; i < times; i++) for(j = 0; j < 210; j++)
设计单灯点亮左右循环跑马灯,延时0.5秒,使用汇编语言
;原理是当右移到A=0时,重新设置A的值为1, ;然后再左移,直到A=0时,跳回到右移的程序。 LJMP AA0 ORG 0030H AA0: MOV A,#80H AA1: MOV P1,A LCALL BB0 RR A DJNZ A,AA1 MOV A,#01 CC0: MOV P1,A LCALL BB0 RL A DJNZ A,CC0 LJMP AA0 BB0: MOV R0,#4 BB1: MOV R1,#248 BB2: MOV R2,#250 NOP BB3: DJNZ R2,BB3 DJNZ R1,BB2 DJNZ R0,BB1 RET END4只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。 ;用最直接的方式实现流水灯 ORG 0000H START:MOV P1,#01111111B ;最下面的LED点亮 LCALL DELAY ;延时60秒 LCALL DELAY ;延时60秒 MOV P1,#10111111B ;最下面第二个的LED点亮 LCALL DELAY ;延时60秒 LCALL DELAY ;延时60秒 MOV P1,#11011111B ;最下面第三个的LED点亮 (以下省略) LCALL DELAY LCALL DELAY ;延时60秒 MOV P1,#11101111B LCALL DELAY LCALL DELAY ;延时60秒 MOV P1,#11110111B LCALL DELAY LCALL DELAY ;延时60秒 MOV P1,#11111011B LCALL DELAY ;延时60秒 LCALL DELAY ;延时60秒 LCALL DELAY ;延时60秒 LCALL DELAY ;延时60秒 LCALL DELAY ;完成第一次循环点亮,延时约0.25秒 AJMP START ;反复循环 ;延时子程序,12M晶振延时约250毫秒 DELAY: ;大约值:2us*256*256*2=260ms,也可以认为为250ms PUSH PSW ;现场保护指令(有时可以不加) MOV R4,#240 L3: MOV R2 ,#00H L1: MOV R3 ,#00H L2: DJNZ R3 ,L2 ;最内层循环:(256次)2个周期指令(R3减一,如果比1大,则转向L2) DJNZ R2 ,L1 ; 中层循环:256次 DJNZ R4 ,L3 ;外层循环:240次 POP PSW RET END
很高兴回答你的问题! 如果以下回答合适,请采纳;如果不恰当,继续讨论。谢谢! 该题本质上是有限状态机的设计问题。令所要完成的功能要求包含四种模式,分别是①从左到右点亮,②从右到左点亮,③从两边到中间点亮,④从中间到两边点亮。要求四种模式依次切换,循环执行。 令clk为led流水灯(共计12个LED灯)的驱动时钟【要求低频,如1Hz】,rst为上升沿复位信号(异步)。则所实现的Verilog HDL代码部分如下: module led_run(clk,led,rst); input clk; //clk with low frequency like 1Hz input rst; //system reset signal output [11:0] led; //denotes 12 leds, reg [11:0] led; reg [2:0] state; //state variable,internal signals reg [5:0] count; //control signals of the state diagram,internal signals always @(posedge clk or posedge rst) //the state diagram if (rst) begin state <= 3'b000; count <= 6'b000000; end else case(state) ... 详细代码见附件。 该代码的仿真波形如下图所示(注led低电平为亮,高电平为灭)
给你一个例子 , 5个led灯,通过开关来选择显示模式: led是 1为亮,0为灭 sel是 1为选中,0为不选 led默认状态是 全亮 5'b10000:从左到右每两个LED逐渐点亮 5'b01000:从右到左每两个LED逐渐点亮5'b00100:从左到右一个LED跳跃式点 5'b00010:从右到左一个LED跳跃式点亮 module led ( input wire Clock, input wire RESET_N, input wire SWITCH1, input wire SWITCH2, input wire SWITCH3, input wire SWITCH4, input wire SWITCH5, //LED Outputs output wire LED1, output wire LED2, output wire LED3, output wire LED4, output wire LED5 ); wire [4:0] sel_mode;assign sel_mode = {~SWITCH1,~SWITCH2,~SWITCH3,~SWITCH4,~SWITCH5};// ---- count 0.5s ---------reg [27:0] cnt_1s;reg clk_1s_en;always @(posedge Clock or negedge RESET_N)begin if(!RESET_N) begin cnt_1s <= 0; clk_1s_en <= 0; end else begin if(cnt_1s == 'd25_000_000-1) begin cnt_1s <= 0; clk_1s_en <= ~clk_1s_en; end else cnt_1s <= cnt_1s + 1; endend//--- tx_win_times check negedge --------------reg clk_1s_reg1;reg clk_1s_reg2;reg clk_1s_reg3;wire clk_1s_pos;always@(posedge Clock or negedge RESET_N)begin if(!RESET_N) begin clk_1s_reg1 <= 0; clk_1s_reg2 <= 0; clk_1s_reg3 <= 0; end else begin clk_1s_reg1 <= clk_1s_en; clk_1s_reg2 <= clk_1s_reg1; clk_1s_reg3 <= clk_1s_reg2; endendassign clk_1s_pos = clk_1s_reg2 & ~clk_1s_reg3;// ----------- mode set --------------reg [4:0] led_set;always @(posedge Clock or negedge RESET_N) begin if(!RESET_N) begin led_set <= 5'b00000; end else begin case(sel_mode) 5'b10000: begin if(clk_1s_pos) begin if(led_set == 5'b00000) led_set <= 5'b11000; else led_set <= {1'b0,led_set[4:1]}; end end 5'b01000: begin if(clk_1s_pos) begin if(led_set == 5'b00000) led_set <= 5'b00011; else led_set <= {led_set[3:0],1'b0}; end end 5'b00100: begin if(clk_1s_pos) begin if(led_set == 5'b00000) led_set <= 5'b10000; else led_set <= {2'b0,led_set[4:2]}; end end 5'b00010: begin if(clk_1s_pos) begin if(led_set == 5'b00000) led_set <= 5'b00001; else led_set <= {led_set[2:0],2'b0}; end end default: led_set <= 5'b11111; endcase endendassign LED1 = ~led_set[0];assign LED2 = ~led_set[1];assign LED3 = ~led_set[2];assign LED4 = ~led_set[3];assign LED5 = ~led_set[4];endmodule 因为硬件平台不一样,需要你自己根据使用的硬件平台来更改代码。
我举个"栗子" int a[10]; for (i=0; i<10; i++) a[i] = 0; // clear i=-1; while (1) { i++; if (i==10) i=0; if (i==0) { a[9] = 0; a[0] = 1;} else { a[i-1] = 0; a[i] = 1;} cls; for (i=0; i<10; i++) printf("%d" , a[i]); //put break; }
如下程序: if(ledi==8) { ledi=0; //到了最后一个灯就换到第一个 //每跑一圈灯就根据预定设置的表格来决定下一圈的跑马速度 speed=speedcode[i]; i++;if(i==2)i=0; ?你的速度设置不仅仅就2个呀(10个预定义的速度) } 有两种解决办法: 一个就是将预定的速度加2倍 speedcode[30]={3,3,3,1,1,1,5,5,5,12,12,12,、、、、、、} 二是增加一全局变量uchar z=0;在i++前加上如下,前后不改: 、、、、、if(++z==3){z=0;i++;}、、、、、、、、、、、
|P1口接8个发光二极管共阳 #include unsigned char i; unsigned char temp; unsigned char a,b; void delay(void) { unsigned char m,n,s; for(m=20;m>0;m--) for(n=20;n>0;n--) for(s=248;s>0;s--); } void main(void) { while(1) { temp=0xfe; P1=temp; delay(); for(i=1;i<8;i++) { a=temp<<i; b=temp>>(8-i); P1=a|b; delay(); } for(i=1;i<8;i++) { a=temp>>i; b=temp<<(8-i); P1=a|b; delay(); } } } 扩展资料: Proteus 自从有了单片机也就有了开发系统,随着单片机的发展开发系统也在不断发展。 keil是一种先进的单片机集成开发系统。它代表着汇编语言单片机开发系统的最新发展,首创多项便利技术,将开发的编程/仿真/调试/写入/加密等所有过程一气呵成,中间不须任何编译或汇编。 参考资料来源:百度百科-51单片机
答疑解难 跑马灯程序 ORG 0000H LJMP MAIN ORG 0100H MAIN: JB P0.7,MAIN ;等待开始键按下 LCALL YS ;按键延时 JB P0.7,MAIN MOV A,#7FH ;是开始键按下 则跑马灯开始运行 LL: MOV P1,A LCALL YS ;显示延时 RR A ;循环右移一位 JB P0.6, LL ;没有按下停止键 则继续跑马 LCALL YS ;按键延时 JB P0.6,LL ;按下停止键 则停止跑马;否则继续跑马 MOV A,#0FFH MOV P1,A SJMP MAIN ;转到程序开始处,等待开始键的按下 YS: MOV R7,#150 ;延时子程序 YL: MOV R6,#200 YY: NOP DJNZ R6,YY DJNZ R7,YL RET END 硬件接口电路如下: 哈哈 还满意吗 就请给俺选择(满意选项)吧