太简单不过了,自己翻书仔细看移位的指令,加上延时小程序就行了。
i;while(1) { led=0xfe; for(i=0;i<8;i++) //左到右点亮 { P0=led; led=(led<<1)
先定义一个定时2s的程序,然后在主函数调用,可以选用P0口的8脚,每点亮一只就调用一次两秒,然后while(1)
利用取表的方法,使端口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
单片机编程 8个彩灯间隔闪烁
sbit L2=P0^1;sbit L3=P0^2;sbit L4=P0^3;sbit L5=P0^4;sbit L6=P0^5;sbit L7=P0^6;sbit L8=P0^7;void delay(unsigned int i){ while(i--);} void main(){ while(1){ L1 = 0;delay(10000);L2
具体算法就是用一秒除以机器周期,看它能循环多少次,这里可以看看书(暂时不考虑用定时器实现,如果上述方法实现不了可用定时器),只要能写出来一个数字,后面的几个就好写了。流水灯的话,可以用p2口实现,用移位指令加上
当减到0时,表示1秒时间到 (重新送初始值20)判断拨动开关状态 如果为低低电平 则选择控制LED的端口内容左移一位 如果为高低电平 则选择控制LED的端口内容右移一位 即可实现对流水灯的方向控制。呵呵 满意
n=16,方式2和方式3,n=8 计数初值(假设计数初值为X,要定时的时间为Y 毫秒)计算公式如下:X=2^n-Y*10^(-3)/(12/6*10^6)由于定时器有最大定时时间,因此你还需要考虑定时次数累加,才能达到你要的时间。
时间确定起来,可以简单,可以复杂。简单的,不太准确。你可以给10000,然后用手机或者电脑上的计时软件计时,看看是多少秒,然后就可以大致确定,每隔一秒或者间隔200ms,的循环数字了。复杂的,也是比较准确的。你需要用KeilC
1、首先51单片机LED流水灯正反向流水结合,即正向流水一遍。2、其次再反向流水回来,时间间隔200ms。3、最后单片机跑马灯即可把间隔时间调成200,完成操作。
51单片机流水灯时间间隔问题
k++){ ;} } } } void main() //假设低电平有效 { int i=0,temp;while(1){ temp=0xFF;for(i=0;i<9;i++){ delay(500); //延时500ms P0=temp;temp<<=1;} } } OK了,楼主这个没问题了
delay(500); //调用延时函数 temp>>=1; } temp=0xFE; for(i=0;i<8;i++) //8个流水灯依次全部点亮 { P2=temp; delay(500); //调用延时函数 temp<<=1; } temp=0x7F;
MAIN:MOV P1,#01111111B ;P1口低电平 对应灯亮 点亮P1.7对应的LED LCALL DLY_500MS ;延时500ms 可以清晰看到每个LED的亮灭情况 MOV P1,#10111111B LCALL DLY_500MS ;延时500ms 可以清晰看到每个LED的亮灭情况
for(num1=0;num1<3;num1++) //八个发光二极管从上到下依次被点亮3三次 { for(num=0;num<8;num++) //八个发光二极管依次被点亮 { P1=temp; //点亮一个发光二极管 delay(100); //延时 temp=_crol
1、用精确定时的方法,设置流水灯运行时的时间间隔,延时时间为500MS。2、#include "reg51.h"首先写出单片机的头函数。3、#include "intrins.h"输入位移函数。4、unsigned int count=0,led;定义函数。5、输入主函数,定
delay(100); //调用延时函数 temp>>=1;} temp=0xFE;for(i=0;i<8;i++) //8个流水灯依次全部点亮 { P1=temp;delay(100); //调用延时函数 temp<<=1;} temp=0x7F;for(i=0;i<8;i++) //8个流水灯依
单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)
设计用PLC控制数码管循环显示数字0-9,控制要求如下(1)按下启动按钮后,数码管从0开始显示,1s后显示1,再过1s后显示2,…,显示9,1s后再重新屏示0.如此循环。(2)当按下停止孩钮后,数码管烟灭。7数码营实际上是由7只
sbit a = P1^0; //设置键 sbit b = P1^1; //增一键 sbit c = P1^2; //减一键 sbit d = P1^3; //确定键 sbit e = P3^0; //控制LED发光 sbit f = P3^2;void delayms(uint t){ uint a
按下一个按键显示累加计时,按下另一个显示倒计时。我写的程序怎么不可以?#include
{ segm=1;segm=0;} //输出段锁存信号 if(nub==2){ bitc = 1;bitc = 0;} //输出位锁存信号 } bit intflag;void main(){ char times;intflag=0; times=5;P1=0xff;initime0() ; //初始化定
单片机怎么写才能让led灯每隔5秒亮下一个并且数码管一直从5到0显示倒计时?
用的是P1口org 000h start:mov r0,#07h mov r1,#07h mov a,#01h mov p1,a acall time loop1:RL a mov p1,a acall time djnz r0,loop1 loop2:rr a mov p1,a acall time djnz r1,loop2 ljmp start
1、可以通过左移函数_crol_()和右移函数_cror_()来实现LED等的来回流动。2、具体实现方法可以参考如下程序:
具体来说,首先,你需要设置按键的中断,确保它在按下时能及时触发你的程序。然后,在WHILE循环中,通过一个条件判断语句,检测按键的状态。当按键被按下时,执行相应的流水灯点亮操作;否则,保持当前的灯状态。这样的程序
while(1){ P3=0xfe;//第一个灯亮 delay();//延时 P3=0xfd;//第二个灯亮 delay();P3=0xfb;//第三个灯亮 delay();P3=0xf7;//第四个灯亮 delay();P3=0xef;//第五个灯亮 delay();P3=0xdf;//第六
可以用for循环试试unsingned char i;for(i=0;i<5;i++)//流水灯闪烁程序。若干个灯泡依次点亮就叫流水灯,它用在夜间建筑物装饰方面。例如在建筑物的棱角上装上流水灯,可起到变换闪烁美不胜收的效果。单片机(Single-
1选用合适的单片机和LED灯,将它们连接在电路板上。2在单片机程序中编写代码,控制LED灯的亮灭状态。3在代码中指定LED灯的亮灭顺序,以及延时时间。通常采用循环结构进行控制。4在将代码烧录到单片机之后,启动实验,即可看到
在这个单片机流水灯代码中,假设使用的是8051单片机。需要定义8个LED灯,分别连接到P1端口的不同引脚上。然后使用一个循环结构来控制这8个LED灯按照一定的顺序逐个亮起,形成流水灯的效果。具体来说,使用for循环来控制LED灯
单片机如何设置一个循环的流水灯?
// 51单片机控制八个发光二极管 左右循环。include
//第三个灯亮 delay();P3=0xf7;//第四个灯亮 delay();P3=0xef;//第五个灯亮 delay();P3=0xdf;//第六个灯亮 delay();P3=0xbf;//第七个灯亮 delay();P3=0x7f;//第八个灯亮 delay();} }
#255 ; 8个led灯不亮 MOV R2, #200 LP2:SETB P1.0 ; 蜂鸣器不响 DJNZ R6,DJNZ R7, $ - 2 DJNZ R2, LP2 MOV P0, #255 ; 8个led灯灭 RET ;--- END
1、首先在电脑中新建项目:Keil uVision4 51单片机LED闪烁编程,如下图所示。2、然后设计单片机端口与LED灯相连,如下图所示,输入代码。3、接着创建延迟函数,如下图所示,输入以下代码。4、然后创建C语言主函数,如下图
接着,编写程序,设置数字输出端口,将接线好的八盏灯分别设定为1-8口,编写时序程序,循环点亮8个信号脚和led灯,进行点亮和关灯,完成点亮循环工作。三、调试程序 最后,就可以进行程序调试,将调试好的程序导入单片机,上
include "intrins.h"define uchar unsigned char define uint unsigned int sbit Led=P1;void delay(void);void main(void){ unsigned char tmp,i;P1=0x00;//全熄灭 while(1){ for(i=0;i<8;i++)//左移 {
1:设置一个变量zhidaoi,它可以从0循环到3 2:检测一个已取消缓冲的键。按“+1”3:当I值为每个值时,执行相应的模式。水量灯参考程序 #include #include #定义uchar无符号字符 Ucharj,温度;无效延迟(无符号整型
8个LED指示灯循环闪烁的程序(单片机)
方法: 1:设定一个变量i,可以从0到3循环的变化 2:检测一个经过消抖处理的按键,按一下,i+1 3:当i值为各个值时,执行相应的花样。 流水灯参考程序 #include #include #define uchar unsigned char uchar j,temp; void delay(unsigned int ms) { uchar t; while(ms--) for(t=0;t<123;t++); } void main() { P1=0xff; delay(500); temp=0xfe; //有点怪,led接在P2.3~P2.6 for(j=0;j<4;j++) { P1=temp; delay(500); temp=_crol_(temp,1); } P1=0xff; while(1); }请设计一个8个led同时全部闪烁的程序 #include main () {int i; while (1) {for (i=0;i<=30000;i++); P1=~P1; } }
要看你的时钟周期,如果是12Mhz的话,每个时钟周期MC=6*2/12 M =1us,所以延迟是让机器计数1000000下,上面那个公式你自己套用24Mhz的就是2000000下。c语言的循环次数你自己算,每条指令一个周期,所以楼上的程序在12Mhz下是1s延迟。
#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;//点亮第八个发光管 } }
定时器溢出你就等他溢出了么,归0后从0计时时间就不对了,中断中重装初值
要看你的时钟周期,如果是12Mhz的话,每个时钟周期MC=6*2/12 M =1us,所以延迟是让机器计数1000000下,上面那个公式你自己套用24Mhz的就是2000000下。c语言的循环次数你自己算,每条指令一个周期,所以楼上的程序在12Mhz下是1s延迟。
LED正接电源,负接P1口 org 00h mov sp,#80h _main_loop: mov p0,#055h call _delay_500ms mov p0,#0aah call _delay_500ms ajmp _main_loop _delay_500ms: mov r0,#50 _d0: mov r1,#100 _d1: mov r2,#100 djnz r2,$ djnz r1,_d1 djnz r0,_d0 ret end
你可以将灯连接到p1口来实现( 假设有八个彩灯,且为共阳的); 1.轮流点亮 逐个点亮 MOV A,#11111110B ;先点亮连p1.0的灯,然后是p1.1的,一直到p1.7的,然后又点亮p1.0的 LOOP: MOV P1,A ACALL DELAY;你建一个延时子程序使灯亮一段时间 RL A SJMP LOOP 2.间隔点亮 MOV A,#10101010B ;先点亮连p1.0,p1.2,p1.4,p1.6的灯,然后是p1.1,p1.3,p1.5,p1.7的 LOOP: MOV P1,A ACALL DELAY;你建一个延时子程序使灯亮保持一段时间 RL A SJMP LOOP 3.全灭全亮 MOV A,#00000000B ;先全部点亮,然后再全灭 LOOP: MOV P1,A ACALL DELAY;你建一个延时子程序使灯亮保持一段时间 CPL A SJMP LOOP