文件名 : 定时器的使用 描述 : 定时0.5s,循环点亮LED 四个LED分别接P1^0,P1^1,P1^2,P1^3,创建人 : Hsy2011,2010年4月8日 版本号 : 1.0 / include
在四个灯循环点亮的状态下,每点亮一个灯需要延时,如果调用延时子程序,按键就显示不灵敏了,所以,采用定时器中断的方式控制延时,就不影响按键了。include
);break;case 3:P1_3=~P1_3;delay02s();break;} } } 这个是我很久以前做的,有一点不同就是这个灯不但会亮还会闪,可以把闪的程序删掉。我有KEIL文件和PROTEUS文件。这个图可以实现这个效果了,修改一下就行了。
i++;} 定时器, LED灯
用汇编写的 如果4个LED灯在单片机的P1.0,P1.1,P1.2,P1.3这4个I/O口的话 ORG 0000H main:mov a,#0FH mov p1,a sjmp end C语言还不太会,汇编是正确的
LED3 = 1;delay(50000);LED4 = 1;delay(50000);LED4 = 0;delay(50000);LED3 = 0;delay(50000);LED2 = 0;delay(50000);LED1 = 0;delay(50000);} } 上述代码实现了四个 LED 灯逐个亮起来然后再逐个灭掉的
DEL1:MOV R6,#0 DEL2:DJNZ R6,DEL2 DJNZ R7,DEL1 SETB C RLC A DJNZ R0,LOOP AJMP LOOP0 END
51单片机的题目: 依次点亮四个Led灯
void delay(uint x){ uint i,j;for(i=0;i
L4=1; //第四盏灯亮 delay(100); //调用延时子程序 while(1); //这里我用了个死循环,目的程序只运行一次,如果需要自动重新运行,可以把这句删掉 } 纯手工书写,并仿真调试过,记得加分哟~
以下是8个LED灯轮流点亮的程序,按照以下方法怎么把它改成16个LED流水灯?会的大神请帮忙改一下,谢谢,本人初学者 include
led0 = LED_OFF; //全部熄灭 led1 = LED_OFF;led2 = LED_OFF;led3 = LED_OFF;} else//按下 { if(changeByKey)//松开下次按下才能再次生效 { changeByKey = 0;cnt ++;switch(cnt & 3){ case 0:led0
sbit LED_ 6= P2^6;sbit LED_ 5= P2^5;sbit LED_ 4= P2^4;sbit LED_ 3= P2^3;void main ( ) {while(1){if (!KEY_0 ) { // 按键KEY_0被按delayus(20); //消抖动 if (!KEY_0
在四个灯循环点亮的状态下,每点亮一个灯需要延时,如果调用延时子程序,按键就显示不灵敏了,所以,采用定时器中断的方式控制延时,就不影响按键了。include
void delay(unsigned int time) { while (time--);} void main() { while (1) { LED1 = 1;delay(50000);LED2 = 1;delay(50000);LED3 = 1;delay(50000);LED4 = 1;delay(50000);LED4 = 0;delay(50000
C语言实现四个LED依次点亮,依次熄灭
就不难理解了。所以你若想在开始的时候不想让他都亮(按照你的思路走),你可以对你的几个引脚进行拉高,即对ODR或者BSRR进行操作即可。GPIO_SetBits(GPIOE,GPIO_Pin_1);//Init函数把几个脚都添加进去即可
delay(100); //调用延时子程序 L4=1; //第四盏灯亮 delay(100); //调用延时子程序 while(1); //这里我用了个死循环,目的程序只运行一次,如果需要自动重新运行,可以把这句删掉 } 纯手工书写,并仿真调
LED1: CJNE R0,#1,LED2 AJMP LED10 LED2: CJNE R0,#2,LED3 AJMP LED20 LED3: CJNE R0,#3,LED4 AJMP LED30 LED4: CJNE R0,#4,LEDRT AJMP LED40 LEDRT: RET LED10: MOV A,#0FFH MOV P1,A ACALL
4只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。;用最直接的方式实现流水灯 ORG 0000H START:MOV P1,#01111111B ;最下面的LED点亮 LCALL DELAY ;延时60秒 LCALL DELAY ;延时60秒 MOV P1,#1011111
1、布尔型控件具有两种状态,首先打开Labview创建一个空的项目。2、首先在前面板选择布尔控件,选择按钮和一个指示灯,都在布尔控件中。3、接着将选择好的控件拖动到前面板,双击单个控件进入对应的程序面板。4、接着进入到程
i++;} 定时器, LED灯
更改程序实现四盏LED灯依次轮流亮起,即流水灯的效果?
单片机驱动LED灯的源程序:include
这是89c52的程序,我觉得改改可以用吧。希望能帮到你 共阳极,低电平亮,到时候自己调整。假设用单片机P1口。延时函数自己写吧。#include
KEY_0 ) { // 按键KEY_0被按delayus(20); //消抖动 if (!KEY_0 ) { //确认被按下 LED_7=~LED_7 //灯亮或灭}}} 其余一样即可。
delay(50000);} } 上述代码实现了四个 LED 灯逐个亮起来然后再逐个灭掉的效果。其中,sbit 定义了四个位于 P2 口的 LED 灯,而 delay 函数则是一个延时函数,可以用来控制 LED 灯亮起和灭掉的时间。注意:在编译运行
L4=1;break;case 2: L1=1;L2=1;L3=0;L4=1;break;case 0: L1=1;L2=1;L3=1;L4=0;break;}
L1=1; //第一盏灯亮 delay(100); //调用延时子程序 L2=1; //第二盏灯亮 delay(100); //调用延时子程序 L3=1; //第三盏灯亮 delay(100); //调用延时子程序 L4=1; //第四盏灯亮 de
急需单片机高手帮忙用C语言写一个单片机4个灯轮流闪亮的源程序。 详细内容看补充。
我有一个是自己写的汇编程序,输出是P2端口,如果你的不是P2,你可以自己改一下 是8个LED循环的 C没有学过MOV R1,#0FFH MOV A,#0FEH ON:MOV P2,A CALL DELAY RL A CALL DELAY DJNZ R1,ON STOP:JMP STOP
main(){ int a;unsigned char tmp=0;while(1){ if(tmp==0) tmp=0x80;else tmp = (tmp>>1);P1 = tmp; //P1.0到P1.7控制8个灯 for(a=50000;a;a--); //延时一下 } } //只是示例,凑和一下
{ P1=~temp;delay(100); //调用延时函数 temp<<=1;} } void delay(uint t) //定义延时函数 { register uint bt;for(;t;t--)for(bt=0;bt<255;bt++);} 跑马灯程序最基本的,c语言还未入门啊!!!
|P1口接8个发光二极管共阳 include
P1=a; //点亮小灯 delay(200); //延时200毫秒 a=_crol_(a,1); //将a变量循环左移一位 } a=0x7f;for(i=0;i<8;i++) //右移 { P1=a; //点亮小灯 delay(200); //延时200毫秒 a=_cror_(
delay(100);b = 1;delay(100);依次类推 } 反方向同理 就两个循环函数的事
用C语言编写简单跑马灯程序(4个灯的)
51单片机有两个函数可以实现移位运算,你可以借助单片机实现这个功能。1:if里面的表达式应该是“==”,少了一个 “=” 编译器不一定会报错,但运行的时候一定进入不了; 2:最大的错误是那么多地方使用了变量“i “,但你却只定义了一个全局变量,试想当你的程序进入了一个for后,再执行了“delay(10);”,等退出了这个延时后,i 的值已经变成了120了,所以紧接着这个for语句也会被退出,因为已经不满足 i<10 这个条件了。再多定义几个局部变量分开处理,不然是没办法搞定的。 3:你的P0=table2[]、P0=table2[]连下标都忘记写了。 4:for(0;i<10;i++) 这句是错的,你忘记了给“i ”赋值了。 5:你的延时太短点了吧,如果你的晶振用得快的话,估计灯跑起来一就一闪而过,连什么亮法都看不清楚。 能看出来的大概有这些,你再试下看有没有别的
有点没明白你的意思!三个从机 是什么!是三片单片机么?如果是单纯的控制LED 很简单的了!
设置定时器时间间隔为1s,计数总共不到1s的话,就再定义一个变量,循环多次,以实现1s 然后再1s时的定时器中断子程序中设置输出脚的电平交替即可
;实验目的:本程序主要实现一个简单的流水灯程序 ;即轮流点亮C口的8个灯(先点亮RC0,再熄灭RCO点亮RC1。。。。) ;硬件要求:拨码开关S2全部置ON。 #include ;调用头文件 __CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC ;芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 ;**********************用户寄存器定义******************** count equ 20h ;移位次数寄存器 del_va1 equ 0ffh ;外层延时参数 del_va2 equ 0ffh ;内层延时参数 org 00h ;程序人口地址 ; addlw 0ffh ;**********************主程序开始*********************** main nop ;ICD所需要的一条空指令 clrf PORTC ;先清楚C口所有显示 banksel TRISC ;选择I/O口方向寄存器所在的体 clrf TRISC ;设置C口全为输出 clrf STATUS ;返回体0 movlw .8 movwf count ;装载循环次数8(C口共8位) bsf STATUS,C ;置进位标志位为1,因循环移位是带进位循环的 loop rlf PORTC,1 ;C口左移1位 call delay call delay CALL delay ;调用三次延时程序(保证亮度,以及流水灯闪烁速度) bcf STATUS,C ;清0进位标志位(永远只有一只LED亮) DECFSZ count,1 ;判断是否一轮循环结束 goto loop ;否,继续循环移位 GOTO main ;是,程序重头开始 ;***********************延时程序************************* delay movlw del_va1 ;延时程序外层参数 movwf 30h movlw del_va2 ;延时程序内层参数 movwf 31h decfsz 31h,1 goto $-1 decfsz 30h,1 goto $-4 return ;********************程序结束**************************** end
四个灯按规律轮流亮灭?
首先,你的电路图没有给出来,管脚是什么? 其次,我建议还是自己尝试写一写,这个不难,我给你个思路 首先定义变量类似于P1_2 = P1^2这种,先把这八个管脚全部定义好,之后给个for循环,让P1(假设的你LED灯连接的是P1口)口的P1^0~P1^7相关标志位依次等于0或者1(0还是1需要看你在LED等上给的是高电位亮还是低电位亮),之后再给个for循环,五次的循环,全部P1口置为1(假设高电平LED亮),之后设置P1口全为1,再让P1口的相关标志位置为0,再置为0的时候可以加个延时
其次,我建议还是自己尝试写一写,这个不难,我给你个思路 首先定义变量类似于P1_2 = P1^2这种,先把这八个管脚全部定义好,之后给个for循环,让P1(假设的你LED灯连接的是P1口)口的P1^0~P1^7相关标志位依次等于0或者1(0还是1需要看你在LED等上给的是高电位亮还是低电位亮),之后再给个for循环,五次的循环,全部P1口置为1(假设高电平LED亮),之后设置P1口全为1,再让P1口的相关标志位置为0,再置为0的时候可以加个延时
我求求你了,别用汇编了。C51多简单明了!现在的单片机不需要考虑容量和速度问题,如果不够可以选择大容量高速单片机。51系列有100MHz,128K ROM。 #include// 头文件,定义寄存器等 main(void) { char i=0,j,k;//初始化变量, while(1) { i++; if(i>8)// i从0~8,一共9种状态 { i=0; } j=0x00; for(k=0;k<i;k++)//循环,类似于汇编的DJNZ { j>>=1;// 类似汇编的RR A j|=0x80;//ANL A,#80H } P2=j; } } 真的想要汇编语句,编译后仿真时看吧。
在四个灯循环点亮的状态下,每点亮一个灯需要延时,如果调用延时子程序,按键就显示不灵敏了,所以,采用定时器中断的方式控制延时,就不影响按键了。 #include #include 仿真图效果。