用移位操作,首先把P1口赋值,然后向右移位,判断是否移到最后移位,如果不是,一直移位,如果是,则反向移位,判断是否移位到第一位,如果是则循环到右移,具体代码就自己写了。代码不难,我只是记不清楚具体定义了。
单片机流水灯C语言程序的源代码如下:include //51系列单片机定义文件 define uchar unsigned char //定义无符号字符 define uint unsigned int //定义无符号整数 void delay(uint); //声明延时函数 void main(void){ uint
define out P2 void delayms(unsigned char xms){ unsigned char i,j;for(i=xms;i>0;i--)for(j=200;j>0;j--);} void main(){ unsigned char temp,i;temp=0x01;while(1){ for(i=0;i<7;i++){ out=
答:include
int i = 8; //循环次数为8 void main(){ P1 = 0xff; //初始化LED,8个LED全灭,(假设低电平点亮)init_t0() ;while(1); //循环等待定时中断 } void init_t0() //定时器0初始化程序 { TMOD = 0x0
假设P1接8 个LED,高电平时LED点亮,主程序如下:void main(void){ uchar i;while(1){ for(i=0;i<7;i++){ P1=1<>i;delay_ms(500);} } }
P3=0xfe;//第一个灯亮 delay();//延时 P3=0xfd;//第二个灯亮 delay();P3=0xfb;//第三个灯亮 delay();P3=0xf7;//第四个灯亮 delay();P3=0xef;//第五个灯亮 delay();P3=0xdf;//第六个灯亮 delay
用c语言编写单片机流水灯程序,(8个发光二极管从左至右循环点亮)
说明:实现一排灯从左到右依次一个一个点亮熄灭,实现流水灯 proteus电路图 元件清单:(分别是) 51单片机 电容 瓷片电容(也可用普通电容) 晶振 红色二极管 电阻 电路图的连接方法 程序清单 说明:本例有两种程序写法 第
这只是灯亮的初始状态不一样,如果temp=0x01为第一位先亮(先亮指初始状态,因为不知道你的是低电平还是高电平驱动),那么temp=0x7F就是第八位先亮,而且两个循环放方向不一样!一个向左,一个向右,说白了就是两
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;//第三
define uint unsigned int //定义无符号整数 void delay(uint); //声明延时函数 void main(void){ uint i;uchar temp;while(1){ temp=0x01;for(i=0;i<8;i++) //8个流水灯逐个闪动 { P1=~temp;delay(100);
1、用精确定时的方法,设置流水灯运行时的时间间隔,延时时间为500MS。2、#include "reg51.h"首先写出单片机的头函数。3、#include "intrins.h"输入位移函数。4、unsigned int count=0,led;定义函数。5、输入主函数,定
//这个程序实现的效果是:先让P0口控制的LED自右向左点亮(只亮一个灯)再自左向右点亮 然后就是P2口temp=0xfe;for(num1=0;num1<8;num1++){ P2=temp;P0=0xff;Delay(100);temp =
} //这个程序实现的效果是:先让P0口控制的LED自右向左点亮(只亮一个灯)再自左向右点亮 然后就是P2口temp=0xfe;for(num1=0;num1<8;num1++){ P2=temp;P0=0xff;Delay(100);temp = _crol_(temp ,
请高手解释一下这个单片机流水灯C语言程序,新手~~
L1:这是标号,目的是使跳转指令找到跳转的目的地,就像是门牌号码,跳转指令根据这个标号找到要跳转到的地址。L2:DJNZ decreas jump not zero 就是非零跳转,判断R3是否为0,如果不为0跳转到L2这个标号所在的行去执行程序
} //这个程序实现的效果是:先让P0口控制的LED自右向左点亮(只亮一个灯)再自左向右点亮 然后就是P2口temp=0xfe;for(num1=0;num1<8;num1++){ P2=temp;P0=0xff;Delay(100);temp = _crol_(temp ,
0xfe是十六进制表示的数,二进制就是1111 1110,通过你的程序和相关注释可以看出,硬件上你有8个led灯连接P1口,且这些led是低电平亮。P1=0xfe(1111 1110)也就是表示七个灯灭,一个灯亮。接下来的代码就是让P1数据0x
A 将A里面的数输出到P0端口 CALL DELAY 执行Delay延迟段代码,不延迟的话就不是流水灯了而是全亮。。。 RL A 左移A寄存器内容(移动后变成11111100B) DJNZ R2,S0 (R2-1)为0?不是则跳转到S0句 SJMP MAIN 跳转到
START: //主函数循坏体开始 MOV P1,#0111 1111b // 将二进制值0111 1111 放入P1 LCALL //进入函数 DELAY //函数名(用于延时 即 拖延时间 目的为将上个状态 延续)后面都是MOV P1,#值b ; LCALL DELAY AJMP
clr a;累加器请0 l0:jnb p3.5,l1;P3.5为低转l1 k0:jb p3.5,l2;P3.5为高转l2 mov r4,#0fh;R4=0fH l1:inc a;累加器加1 mov p1,a;P1=A lcall dl;延时 djnz r4,l1;R4减1不为0转l1 ljmp k0;转
只有D1亮\x0d\x0a LCALL SE19 //调用延时子程序(决定每个灯亮的时间长度)\x0d\x0a // {可在此再次(或多次)加入“LCALL SE19”使亮的时间增加一倍}\x0d\x0a \x0d\x0a RL A /
单片机的流水灯汇编程序怎么解释?
程序如下:include
单片机流水灯代码:#include
单片机LED流水灯的实验原理是通过单片机控制多个LED灯的亮灭顺序,使其形成一种流动的效果。具体实现方法如下:1选用合适的单片机和LED灯,将它们连接在电路板上。2在单片机程序中编写代码,控制LED灯的亮灭状态。3在代码中指
单片机流水灯程序代码(汇编语言):ORG0000HAJMPMAINORG0030HMAIN:MOVP1,#11111110BACALLDELAY;跳转到子程序MOVP1,#11111101BACALLDELAYMOVP1,#11111011BACALLDELAYMOVP1,#11110111BACALLDELAYMOVP1,#11101111BACALLDELAYMOVP1,
可以用for循环试试unsingned char i;for(i=0;i<5;i++)//流水灯闪烁程序。若干个灯泡依次点亮就叫流水灯,它用在夜间建筑物装饰方面。例如在建筑物的棱角上装上流水灯,可起到变换闪烁美不胜收的效果。单片机(Single-
一、点亮一个LED灯 程序:MOV A,#00FEH MOV P1,A JMP $ END 图:二、点亮1、3、5、7LED灯 程序:MOV A,#00AAH MOV P1,A JMP $ END 图:三、尝试让一个LED灯闪烁 程序:STRAT:MOV A,#00FEH MOV P1,
大学单片机七彩流水灯(急急急)
P1=a; //第一次,只有右边1个发光 delay(200);a=_crol_(a,1); //左移一位 } //以上单个LED发光,移位8、7、6次 //--- a = _crol_(a, j); //左移,第一次,移动0位,以后渐多 //
1、51单片机C语言实现循环8个流水灯左移三次,后右移三次。例程:include
流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:ORG 0000H;复位启动AJMP START;ORG 001BH;T1中断AJMP T1INT;;定义变量===YSJSEQU 30H;延时计数器LEDEQU 31H;LED控制缓冲器 ;主程序===START:MOV LED,#
;用汇编语言编程如下:.ORG 0000H MOV A, #7FH MOV R2, #7 L: JNB F0, R RL A JMP O R: RR A O: MOV P1, A CALL DL_500ms ;延时500ms DJNZ R2, L MOV R2,
P3=0xfe;//第一个灯亮 delay();//延时 P3=0xfd;//第二个灯亮 delay();P3=0xfb;//第三个灯亮 delay();P3=0xf7;//第四个灯亮 delay();P3=0xef;//第五个灯亮 delay();P3=0xdf;//第六个灯亮 delay
sbit led7 = P2^6;sbit led8 = P2^7;void main(){ int i,j;//点亮第一个灯 led1 = 1;led2 = 0;led3 = 0;led4 = 0;led5 = 0;led6 = 0;led7 = 0;led8 = 0;//延时1秒 for(i = 0;i <
依旧是基础的LED灯部分的实验 说明:实现一排灯从左到右依次一个一个点亮熄灭,实现流水灯 proteus电路图 元件清单:(分别是) 51单片机 电容 瓷片电容(也可用普通电容) 晶振 红色二极管 电阻 电路图的连接方法 程序清单
51单片机C程序实验LED灯:[2]左到右的流水灯
一、实验要求:(1)、在proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路;(2)、继续在proteus软件中绘制电路,将p1口做输出口,接八只发光二极管;(3)、在keil软件中编写程序,实现功能间隔1s点亮一个发光二极管,顺序从p1.0到p1.7依次点亮;二、实验目的:(1)、学习proteus软件的,使用方法(2)、学习keil软件的使用方法(3)、学习端口输出的使用方法(4)、掌握延时程序的设计三、实验说明。在proteus软件中把实验要求的电路连接好,再利用keil软件把需要实现的功能编写程序,生成hex文件,把hes文件导入到proteus软件进行仿真。在编写程序时需要延时1s,我们选用的单片机是12MHz的,机器周期是12个时钟脉冲,一个时钟脉冲的时间是1/12微us,即一个周期为1us,程序中子函数void delay_ms(int x)中x为1 是可能延时1ms,以此类推可得1s=1000ms,当x=1000时刚好延时1s。四、硬件原理图及程序设计(1)、硬件原理图设计.电路中,p1.0到p1.7为LED控置端口,排阻RP1阻值为330兆,AT89c51单片机的9脚(RST)为复位引脚;31引脚(EA))为存取外部储存器使能引脚;单片机内部已接地,所以我们不用再接了。如下图所示(2)、程序流程图(3)、程序源代码【摘要】 求用51单片机实现16个流水灯依次点亮,间隔1秒,程序及电路图,设计思路,及所用元件参数!要求从右到左亮灯,在从左到右亮灯,用到了keil,和STC【提问】 一、实验要求: (1)、在proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路; (2)、继续在proteus软件中绘制电路,将p1口做输出口,接八只发光二极管; (3)、在keil软件中编写程序,实现功能间隔1s点亮一个发光二极管,顺序从p1.0到p1.7依次点亮; 二、实验目的: (1)、学习proteus软件的,使用方法 (2)、学习keil软件的使用方法 (3)、学习端口输出的使用方法 (4)、掌握延时程序的设计 三、实验说明。 在proteus软件中把实验要求的电路连接好,再利用keil软件把需要实现的功能编写程序,生成hex文件,把hes文件导入到proteus软件进行仿真。在编写程序时需要延时1s,我们选用的单片机是12MHz的,机器周期是12个时钟脉冲,一个时钟脉冲的时间是1/12微us,即一个周期为1us,程序中子函数void delay_ms(int x)中x为1 是可能延时1ms,以此类推可得1s=1000ms,当x=1000时刚好延时1s。 四、硬件原理图及程序设计 (1)、硬件原理图设计. 电路中,p1.0到p1.7为LED控置端口,排阻RP1阻值为330兆,AT89c51单片机的9脚(RST)为复位引脚;31引脚(EA))为存取外部储存器使能引脚;单片机内部已接地,所以我们不用再接了。如下图所示  (2)、程序流程图 (3)、程序源代码【回答】51单片机是一款广泛应用于嵌入式系统的微控制器。在51单片机开发板上,我们可以通过P1口来控制8盏LED灯。在这里,我们需要编写一个能够使这些LED灯呈现右移流水灯效果的程序。首先,我们需要定义好每个LED灯的控制位,将它们分别映射到P1口的每个引脚。假设我们将第一个LED连接到P1.0引脚,第二个LED连接到P1.1引脚,依此类推,直到第八个LED连接到P1.7引脚。那么,我们可以通过下面的代码来初始化这些引脚,并将它们配置为输出模式:void init_leds(void){ P1 = 0x00; //将P1口所有引脚初始值设为0 P1M0 = 0x00; //将P1口所有引脚都设为标准输出模式 P1M1 = 0x00;}接下来,我们需要定义用于控制LED流水灯移动方向的变量和计数器。我们将使用一个名为‘direction’的变量来控制流水灯的移动方向。如果direction变量的值为1,则流水灯朝左移动。如果值为0,则流水灯朝右移动。我们还需要一个计数器‘i’来控制流水灯的移动速度。unsigned char direction = 0; //变量用来控制流水灯的移动方向unsigned char i = 0; //变量用来控制流水灯的移动速度【摘要】 在51单片机开发板上,P1口控制8盏LED灯,对应位为0时灯亮,编写8个led右移流水灯程序【提问】 51单片机是一款广泛应用于嵌入式系统的微控制器。在51单片机开发板上,我们可以通过P1口来控制8盏LED灯。在这里,我们需要编写一个能够使这些LED灯呈现右移流水灯效果的程序。首先,我们需要定义好每个LED灯的控制位,将它们分别映射到P1口的每个引脚。假设我们将第一个LED连接到P1.0引脚,第二个LED连接到P1.1引脚,依此类推,直到第八个LED连接到P1.7引脚。那么,我们可以通过下面的代码来初始化这些引脚,并将它们配置为输出模式:void init_leds(void){ P1 = 0x00; //将P1口所有引脚初始值设为0 P1M0 = 0x00; //将P1口所有引脚都设为标准输出模式 P1M1 = 0x00;}接下来,我们需要定义用于控制LED流水灯移动方向的变量和计数器。我们将使用一个名为‘direction’的变量来控制流水灯的移动方向。如果direction变量的值为1,则流水灯朝左移动。如果值为0,则流水灯朝右移动。我们还需要一个计数器‘i’来控制流水灯的移动速度。unsigned char direction = 0; //变量用来控制流水灯的移动方向unsigned char i = 0; //变量用来控制流水灯的移动速度【回答】 然后,我们可以编写LED流水灯移动的主要逻辑。鉴于我们想要让LED灯像水一样流动,因此我们需要使用一个循环,使LED灯逐个被打开或关闭。我们使用P1口来打开或关闭LED灯。代码如下:void led_flow(void){ while(1) { if(direction == 0) //如果direction变量值为0,也就是右移 { for(i = 0; i = 0; i--) { P1 = (1 << i); //将第i位设置为高电平 delay_ms(100); //延时100毫秒 P1 = 0x00; //将所有的LED灯都关闭 } } }}上面的代码使用for循环控制LED灯逐个打开或关闭,并使用delay_ms()函数来控制流水灯的移动速度。在右移模式下,每个LED灯都会从右向左逐个亮起并熄灭。在左移模式下,每个LED灯都会从左向右逐个亮起并熄灭。最后,我们需要在主函数中调用上面的初始化函数和LED流水灯函数。void main(){ init_leds(); //初始化LED灯 led_flow(); //启动LED流水灯程序}完成了上述步骤后,我们就成功地编写了一个能够实现8个LED右移流水灯效果的程序,它可以通过P1口控制8盏LED灯。【回答】 这个程序可以发一下吗?【提问】 发过去了,亲【回答】 只要程序,这个文字掺杂,有点看不是很懂【提问】 void init_leds(void){ P1 = 0x00; //将P1口所有引脚初始值设为0 P1M0 = 0x00; //将P1口所有引脚都设为标准输出模式 P1M1 = 0x00;}unsigned char direction = 0; //变量用来控制流水灯的移动方向unsigned char i = 0; //变量用来控制流水灯的移动速度void led_flow(void){ while(1) { if(direction == 0) //如果direction变量值为0,也就是右移 { for(i = 0; i = 0; i--) { P1 = (1 << i); //将第i位设置为高电平 delay_ms(100); //延时100毫秒 P1 = 0x00; //将所有的LED灯都关闭 } } }}void main(){ init_leds(); //初始化LED灯 led_flow(); //启动LED流水灯程序}【回答】 这个好像和我们不太一样呀,我们这个都是#include.reg51.h【提问】 然后再编写【提问】 是的呢【回答】 代码不是都有int,for这些吗?为啥你发的没有呢?【提问】 变量用啥来定义都行,里面有for啊【回答】
ORG 0000H LJMP MAIN ORG 000BH T0MS EQU NOT 50000 ; 50 mS 晶振 12.000 MHz PJSBZ EQU 20H PJSBZY EQU 21H PST0: MOV TL0, #LOW T0MS ; T0 中断 MOV TH0, #HIGH T0MS SETB PJSBZ ; 50 mS 标志 DJNZ R6, PST02 MOV R6, #40 ; 50 mS * 40 = 2 S SETB PJSBZY ; 2 S 标志 PST02: RETI MAIN: MOV TMOD, #01H MOV IE, #82H ; 开 T0 中断 MOV SP, #30H MOV TL0, #LOW T0MS ; TO 50MS 中断 计时 0 MOV TH0, #HIGH T0MS SETB TR0 MOV R6, #40 ; 计时初值 MAIN1: MOV A, #7FH MAIN2: JNB PJSBZ, $ ; 50 mS CLR PJSBZ RR A ; 顺流 MOV P1, A JNB PJSBZY, MAIN2 ; 2 S CLR PJSBZY MAIN3: JNB PJSBZ, $ ; 50 mS CLR PJSBZ RL A ; 逆流 MOV P1, A JNB PJSBZY, MAIN3 ; 2 S CLR PJSBZY AJMP MAIN1 END
1、用精确定时的方法,设置流水灯运行时的时间间隔,延时时间为500MS。 2、#include "reg51.h"首先写出单片机的头函数。 3、#include "intrins.h"输入位移函数。 4、unsigned int count=0,led;定义函数。 5、输入主函数,定义单片机的端口,写入延时函数。 6、中断跳转,使流水灯运行起来。
这个- -!看来你是单片机没学好啊。 挺简单的找你同学写一个就行 我给你一个我练习的程序,你自己看看吧。不符合你要求,你参考参考吧。 #include #include #include #define uchar unsigned char #define uint unsigned int #define BIT(x) (1 << (x)) uchar num; void delayms(uint ms) { uint i,j; for(i=0;i<ms;i++) for(j=0;j<110;j++); } uchar KEY_PRESS() { uchar temp; P3=0XF0; temp=P3; temp&=0XF0; if(temp!=0XF0) delayms(10); if(temp!=0XF0) { return 1; } else { return 0; } } uchar KEY_SCAN() { uchar key; delayms(10); if(KEY_PRESS()) { key=P3; key&=0XF0; switch(key) { case 0XE0: key=1; break; //注意不能漏 break; case 0XD0: key=2; break; case 0XB0: key=3; break; case 0X70: key=4; break; default: key=0; } while(KEY_PRESS()); } else { key=5; } return key; } void LED_control() { uchar temp; temp=KEY_SCAN(); if(temp==1) { num=_crol_(num,1); //循环左移 P1=num; } if(temp==2) { num=_cror_(num,1); //循环右移 P1=num; } } void SYSTEM_INIT() { P1=0XF0; num=P1; } void main() { SYSTEM_INIT(); while(1) { LED_control(); } }