led8=0;delay(100000);//大约延时900ms //从右到左依次点亮 led8=1;delay(50000);//大约延时450ms led7=1;delay(50000);//大约延时450ms led6=1;delay(50000);//大约延时450ms led5=1;delay(50000);//大约

这个数除以1000得的数就是多少毫秒 num++;if(num==100) //这是判断够1S钟(100*10ms=1s) 用于下面的移位,1S移一位 { num=0;P2=_crol_(P2,1); //让P2口的灯左移 } }

sbit P2_0=P2^0;sbit b=0;char a=1;while(a) // 通过中断例程来改变 a 的值,从而可退出下面这个死循环 { P2_0=b;delay();b=!b;}

这个是用定时器0控制一个灯的亮和灭 include define uchar unsigned char define uint unsigned int /***/ uchar num;bit tt;sbit d=P1^0;/***主程序入口***/ void main(){ TMOD=0x01;TH0=(65535

当减到0时,表示1秒时间到 (重新送初始值20)判断拨动开关状态 如果为低低电平 则选择控制LED的端口内容左移一位 如果为高低电平 则选择控制LED的端口内容右移一位 即可实现对流水灯的方向控制。呵呵 满意

1.实验任务 开关K1接在P3.2管脚上,在AT89S51单片机的P0.0端口接有1个发光二极管,上电的时候,L1接在P1.0管脚上的发光二极管在亮,当一次按下开关K1的时候,灯灭,再按一次,灯亮,如此轮流下去。2.系统板上硬件连

//20次中断时间为1s }

单片机编程。试编写程序,使LED灯逐个点亮,时间为一秒。先谢谢。

这个程序不一定能实现1ms延时,这种循环延时与单片机有关,不同的单片机是不一样的。还与编译器有关,不同的编译器编译出来的结果是不一样的。还与编译器的设置有关,比如代码优化方式设置,同一种编译器不同的设置方式也

led1=0;led2=1;flag=0;while(1);}

你把P1.0引脚和P1.1引脚的LED看做数据的比特位,每次输出后加1,延时一段时间后继续输出。大致的流程是这样:1. 初始化寄存器值 al=0 2. 将寄存器值输出到p1口 3. 延时1秒 4. 寄存器值加1 5. 重新回到第2步执

CPL P1.1 ;1s P1.1求反一次 RTI: RETI END 小问题,会要你什么命。给你程序 ,望好自为之。那就P1.0~P1.7各接一LED ORG 00H AJMP MAIN ORG 30H MAIN:MOV P1,#00H LCALL DELAY1S MO

一个p1.1引脚接一个led,编程实现p1.1的led灯闪烁,延时采用中断延时1秒,晶振12MHZ。汇编的大虾们救命啊

PORTC = 0x00; //74HC138控制端口 while (1) //死循环,让数码管持续点亮 { PORTD=0b00000000; //点高发光管 delay();PORTD=0b11111111; //关掉发光管 也可以写成16位的 自己试一试吧 delay();} } /

按键按一次LED灯灭,在按一次按键LED灯亮。程序如下:/ include "REG52.H"sbit LED1_01 = P1^1; //LED灯 sbit KEY0_01 = P1^2; //按键 void Delay_1ms(unsigned int Time){ unsigned int x, y;f

两种方法,一种是给驱动16和灯的口每次变化赋和显示值,这种最好理解,32次变化写32行输出然后每个输出后面再加一个延时就可以了。另一种是用位移指令for循环 也要写两个for 一个渐亮的一个渐灭的

     delay(200);  //实参“100”用来调节延时时间。     P0_0=1;    //熄灭LED       &#

CALL PRG1 ; 亮且发音 CALL PRG2 ; 灭且静音 SJMP 0 ;--- PRG1:MOV P0, #0 ; 8个led灯亮 MOV R2, #200 LP1:CPL P1.0 ; 蜂鸣器响 DJNZ R6,DJNZ R7, $ - 2 DJNZ R2, LP1 MOV P0

用单片机控制LED灯的亮灭,怎么写程序?

设置定时器时间间隔为1s,计数总共不到1s的话,就再定义一个变量,循环多次,以实现1s 然后再1s时的定时器中断子程序中设置输出脚的电平交替即可

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 这就是你想要的效果,不妨试试哦!

if(order==1) //方式一:全灯逐个点亮,然后逐个灭掉 { for(n=0;n<8;n++){ P2|=0x01<

void Timer0_isr(void) interrupt 1 using 1 { TH0=0x00; //重新赋值,方式1是16位计数器,不能硬件重装初始值 TL0=0x00;LED=~LED; //指示灯反相,可以看到闪烁 }

在上述示例程序中,我们将LED连接到Arduino的13号引脚,并使用digitalWrite()函数控制该引脚的电平。HIGH表示将引脚设置为高电平(点亮LED),LOW表示将引脚设置为低电平(熄灭LED)。通过delay()函数设置LED灯亮灭的时间间隔。

{ P1=0xff; //点亮P1口第0个引脚上的LED灯,0xff为二进制的11111111 delay(1000); //延时1秒 P1=0x00; //将P1口全部置为0,熄灭LED灯 delay(1000); //延时1秒 } } 上述程序的作用是在单片机的P1口上间隔点亮

单片机间隔点亮一led灯的C语言程序

以下是一个单片机间隔点亮一LED灯的C语言程序,以8051单片机为例:c Copy code include //包含了AT89C51的寄存器定义 void delay(unsigned int xms) //延时函数,xms为要延时的毫秒数 { unsigned int i,j;for(i=xms;i

TMOD=0x01;//定时器T0的方式1 TH0=(65536-50000)/256; //高8位 TL0=(65536-50000)%256; //低8位 EA=1; //中断总允许打开 ET0=1; //定时器T0允许打开 TR0=1; //启动定时器T0 aa=0;secon

设置定时器时间间隔为1s,计数总共不到1s的话,就再定义一个变量,循环多次,以实现1s 然后再1s时的定时器中断子程序中设置输出脚的电平交替即可

if(!T50ms) LED=~LED;} void TimerInit()//系统初始化函数 { TMOD=0x01;//关闭定时器1,开启定时器0,并工作在模式1 TH0=th0;TL0=tl0;TR0=1;//启动计时 ET0=1;//允许定时器0中断 EA=1;//开启系统中断功

怎样用定时器编写一个LED灯间隔1秒钟亮灭C程序?

EA=1;} void timer0() interrupt 1 { TR0=0;TH0=(65536-10000)/256; //10ms中断一次 TL0=(65536-10000)%256;TR0=1;i++;} void main(){ init();while(1){ if(i==100){ i=0;P1=~P1;} } }

0000H LJMP MAIN ORG 0003H LJMP EXT0 ORG 0030H MAIN:MOV SP,#5FH MOV P1,#0FFH SETB EX0 SETB IT0 SETB EA MOV A,#0FEH SJMP EXT0:MOV P1,A RL A JB ACC.4,EXTE MOV A,#0FEH EXTE:RETI END

START:MOV P1,#01111111B ;最下面的LED点亮 LCALL DELAY ;延时60秒 LCALL DELAY ;延时60秒 MOV P1,#10111111B ;最下面第二个的LED点亮 LCALL DELAY ;延时60秒 LCALL DELAY ;延时60秒 MOV P1,#1

没分的话就不答具体的了,你随便找本书都有模块,你要是P1口接LED再接限流电阻,最后把所有电阻都连在5V电压的话,那就先给11111110给P1,用RR来循环,再写一个用计数器做延时的子程序就行了。一般书都有这几个模块

//以下是四个LED灯循环亮的程序,看看,可以吗?include include define uint unsigned int define uchar unsigned char uchar aa,tt;void main() //---主函数--- { TMOD=0x01;TH0=(6553

;假定:P1口0~3脚依次接4个LED ;假定:晶振为12M ;假定:P1口低电平有效,LED点亮 ORG 00H AJMP MAIN ORG 0BH AJMP JT0 MAIN:NOP MOV SP,#40H MOV A,#0FEH MOV R0,A MOV P1,A ;初始化LED灯,第1灯点

跪求用汇编语言编程,要求如下,P1口的四个LED等循环点亮,点亮时间为一秒,用定时计数器实现延时一秒的编

ORG 0000H start: AJMP MAIN ;转主程序 ORG 000BH AJMP CTC0 ;转中断服务程序 ORG 0030H MAIN: MOV TMOD,#01H ;设置T0为方式1 MOV TL0,#0B0H ;送初值,定时50ms,晶振为12MHz时 MOV TH0,#3CH MOV B, #0FEH MOV R0,#00H SETB EA ;CPU开中断 SETB ET0 ;T0中断允许 SETB TR0 ;启动定时 HERE: SJMP HERE ;等待中断 ;中断服务程序 ORG 0120H CTC0: MOV TL0,#0B0H ;重新装如初值 MOV TH0,#3CH INC R0 MOV A,R0 CJNE A,#14H,NEXT MOV R0,#00H MOV A,B RL A MOV B,A NEXT: RETI
http://blog.163.com/asm_c/blog/static/248203113201063540886/ 参考。
#include #define uchar unsigned char sbit LED=P1^0; uchar time; void InitTimer0(void) { TMOD = 0x01; //定时器0,工作方式1 TH0 = 0x3c; TL0 = 0xb0; //50ms中断一次 EA = 1; ET0 = 1; TR0 = 1; } void main(void) { InitTimer0(); while(1) if(time==20) //中断20次,1s { time=0; LED=!LED; P1.0上的LED1s亮灭一次 } } void Timer0Interrupt(void) interrupt 1 { TH0 = 0x3c; TL0 = 0xb0; time++; }
首先要将你的单片机或者dsp的时钟转化成1秒或者1毫秒,转换的方法很多最简单的就是分频,这样做了之后写一个简单的程序使得某个变量比如说M即时一秒之后将你接的那个引脚的电平拉高或清零,使得led亮一秒。看得你接法怎么接的。然后第二步就是M大于1的时候将led熄灭(电平高低看你的接法而定)然后将m的值大于5时请一次零就ok了
设置一个delay_2s()就是: delay_2s() { for(i=0;i<200;i++) { for(j=0;j<200;j++) } } 具体要看你的晶振大小 然后 void main() { uchar temp = 0x01; while(1) { delay_2s(); P0 = temp delay_2s(); temp <<=1; i++; if(i>=7) { i = 0; temp = 0x01 } } } 很容易理解就是让0X01一直左移赋值给P0口然后循环
我再帮你补一课,看了你的标题,我写了一个用定时器0来控制一个LED灯第隔1秒钟亮灭一次的程序,希望对你有用,另外我也写了一个你说的那个程序,一起发上来吧 ****************这个是用定时器0控制一个灯的亮和灭****************************** #include #define uchar unsigned char #define uint unsigned int /**************************************/ uchar num; bit tt; sbit d=P1^0; /******************主程序入口********************/ void main() { TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; TCON=0x10; EA=1; ET0=1; tt=255; while(1) { if(num==20) { tt=!tt; d=tt; num=0; } } } void timer() interrupt 1 { TH0=(65535-50000)/256; TL0=(65535-50000)%256; num++; } ****************这个程序是逐个点亮的(思路:由256逐减1,值由LED灯显示)*********************** #include #define uchar unsigned char #define uint unsigned int /**************************************/ uchar num,tt; //bit tt; sbit d=P1^0; /******************主程序入口********************/ void main() { TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; TCON=0x10; EA=1; ET0=1; tt=255; while(1) { if(num==20) { tt--; P1=tt; num=0; } } } void timer() interrupt 1 { TH0=(65535-50000)/256; TL0=(65535-50000)%256; num++; }
你把P1.0引脚和P1.1引脚的LED看做数据的比特位,每次输出后加1,延时一段时间后继续输出。 大致的流程是这样: 1. 初始化寄存器值 al=0 2. 将寄存器值输出到p1口 3. 延时1秒 4. 寄存器值加1 5. 重新回到第2步执行。 单片机的语法我忘得差不多了,所以不能给你写源代码了,希望对你有所帮助
请给邮箱~ 求一个C程序,当P1.0按键按下时,P1.6和P1.7两个管脚所接的LED灯轮流发光,要求延时10秒,再按下按键全灭 ------》此程序流程 ---->首先判断按键是否按下,即主函数循环while(1)判断是否按键按下 ------>按下,则进入防抖动判断,如符合,则开始进入轮流切换状态 ---->状态,初始,其中一个亮另一个灯灭。10秒过后再切换状态,其中,加入一个指令 既,判断按键是否再次按下,若按下则给两个灯低电平,退出本次轮流切换状态 ------》退出后,再次进入主函数,,即主函数循环while(1)判断是否按键按下 #include unsigned char counter; sbit control_s=P1^0; sbit Led1=P1^6; sbit Led1=P1^7; //**** ********* ***** //**** 中断服务 ****** //**** ********* ***** void set_state() { TMOD=0x01; //选择工作方式1 TH0=0x3c; TL0=0xb0; ET0=1; //打开定时器0 TR0=1; //定时器0中断模式 EA=1; //中断总控制 } void switch_led();//换灯函数声明; //**** ********* ***** //**** 主函数 ****** //**** ********* ***** void main() { void set_state(); //打开中断服务 while(1); //开始循环1,等待按键 { if(control_s== 0) //当按键按下,防抖动 { delay_time(10); //延迟 if( control_s==0) switch_led(); //再次判断,符合则进入轮流发光 } } } //**** ********* ***** //**** 定时器0中断服务 ****** //**** ********* ***** void timer0() interrupt 1 { TH0=0x3c; TL0=0xb0; counter++; if(counter>19) {counter= 0; s++;} } //**** ********* ***** //**** 轮流发光函数 ****** //**** 切换间隔10s ***** void switch_led() { Led1=0; //让Led1暗 Led2=1; //让Led2亮 while(1) //开始循环 if(s>9) //s从0-9,10次,一次1s { s= 0; Led1=~Led1; //取反状态,当Led1=1时,则~Led1=0; Led2=~Led2; //同上 if( control_s==0){Led1= 0; Led2= 0;break; } //按键再次按下,灯熄灭,退出此函数回到主函数循环1。 } } 因为没有说明问题的过程,可以简单些,用楼上的,只不过,楼上的估计和我一样吧,弄不清这延时10秒在哪体现,干脆省了这10秒,嘿。 化雨眠 | 三级 #include #define uint unsigned int #define uchar unsigned char sbit a=P1^0; void delay(uint x) { uint i , j; for(i=x;i>0;i--) for(j=110;j>0;j--); } void main() { while(1) { if(a==0) { delay(10); if(a==0) { P1^6=0; delay(50); P1^6=1; delay(50); P1^7=0; delay(50); P1^7=1; delay(50); } } } }
晶振认为是12MHz定时器中断时间为50ms,累计20次中断的时间为1s 这个程序是精确定时的,不像楼上的delay函数定时不精确 #include #include unsigned char i=0; void init(); void main() { init(); while (1) { if(i==20) { i=0; P1=_crol_(P1,1);//循环移位函数 在intrins函数中定义 } } } void init() { TH0=0x3c; //定时器赋初值定时时间50ms TL0=0xB0; TMOD=0x01; //设置定时器工作方式为方式1 EA=1; //开总中断 ET0=1; //开中断允许位 TR0=1; //定时器计数 P1=0xfe; //这里假设led灯与P1口相连并且 //低电平有效 } void timer0() interrupt 1 { TH0=0x3c; TL0=0xB0; //溢出后重新赋初值 i++; //定时器中断时间为50ms //20次中断时间为1s }
嘿嘿 这个俺可以帮你解答 1 利用定时计数器0 工作在方式2 定时50毫秒 结合软件计数器(初始值选20) 允许定时计数器中断 2 设计一个定时器0的中断服务程序 每50毫秒 就中断 在中断程序中软件计数器减1 当减到0时,表示1秒时间到 (重新送初始值20) 判断拨动开关状态 如果为低低电平 则选择控制LED的端口内容左移一位 如果为高低电平 则选择控制LED的端口内容右移一位 即可实现对流水灯的方向控制。 呵呵 满意 就选满意回答哦