P3=0xfe;//第一个灯亮 delay();//延时 P3=0xfd;//第二个灯亮 delay();P3=0xfb;//第三个灯亮 delay();P3=0xf7;//第四个灯亮 delay();P3=0xef;//第五个灯亮 delay();P3=0xdf;//第六个灯亮 delay
以下是led流水灯代码 我们将其编译生成hex文件 我们在Proteus里面双击单片机,加载单片机流水灯程序 并把晶振改为12Mhz 我们点击下面那个三角形符号就可以允许仿真了 仿真的时候引脚接口会有电压颜色显示,可以看到流水灯已经在走
程序如下:include
proteus电路图 画法依旧不说,给出元件清单,其实都差不多,与上篇一致51单片机 电容 瓷片电容 晶振 红色二极管 电阻 电路图如图 程序清单 说明:流水灯的闪亮方法肯定不是唯一的,按照各种形式都可以写出所需的程序,这里只用
可以用for循环试试unsingned char i;for(i=0;i<5;i++)//流水灯闪烁程序。若干个灯泡依次点亮就叫流水灯,它用在夜间建筑物装饰方面。例如在建筑物的棱角上装上流水灯,可起到变换闪烁美不胜收的效果。单片机(Single-
单片机流水灯程序代码(汇编语言):ORG0000HAJMPMAINORG0030HMAIN:MOVP1,#11111110BACALLDELAY;跳转到子程序MOVP1,#11111101BACALLDELAYMOVP1,#11111011BACALLDELAYMOVP1,#11110111BACALLDELAYMOVP1,#11101111BACALLDELAYMOVP1,
单片机流水灯程序
当松手时,KEY1 = 1,不满足if语句不 进入循环,LED继续保持当前状态即LED = 0,如果再次按下按键,此时检测到KEY1 = 0,进入循环,LED取反得到LED = 0,灯亮。*/ delay(500); /*此处延迟,保证连续两次按键
首先if(SW13==0)是判断此引脚是否为0 (按键按下)然后一个delay用于按键防抖动 没被注释的那部分是靠if在次判断是否为0按下按下后执行LED_ON函数使LED亮 然后通过while判断按键是否松开,如果松开的话就继续执行LED_
你没有松手监测呀!就是在按键处理程序后要加一个while(k1!=0);就是只有你松开按键后才认为本次按键执行完毕,不然就会一直重复执行按键按下的程序,那么你的d1一直就会执行亮灭操作!
再次读取IO口,判断是否为低电平,如果是则表示有有效的按键按下,接着用while判断等待按键释放,然后让连接led的IO口电平取反以控制其亮灭(是强电的灯可以通过此处控制继电器的合、闭来控制灯的亮灭)。
include
1、首先打开桌面上的keil软件,在进行对51单片机进行编程时最常用的就是keil软件。2、编写相应的代码:#include
单片机用c语言,按钮控制一个LED灯,要求按下松开,LED亮,按下松开,LED暗!循环
流水彩灯的原理及电路图如下:原理:该流水灯电路由时钟发生电路和功能显示电路两部分组成。以集成电路NE555为核心器件构成自激多谐振荡器。当电源开关S闭合时,电源通过电阻R1和R2向电容器C1充电。当C1刚充电时,由于555的②
流水灯还要什么电路图?阴极随便接2 个IO口,阳极串一小电阻(320~510)到+5V 。ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV R0,#8 MOV A,#0FEH DISP: MOV P0,A ACALL DLY200 RL A DJNZ R0,DISP MOV R0,#
for(i=0;i<8;i++)//流水灯从P1^7口到P1^0口 { P1=temp;temp=_cror_(temp,1);delay(5);} i=0;temp=0x7f;for(i=0;i<8;i++)//流水灯从P0^7口到P0^0口 { P0=temp;temp=_cror_(temp,1);delay
05 LED模拟交通灯 /* 名称:LED模拟交通灯 说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮, 红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。 */ #include
电路如下:将16个LED的阴极(Led-、K极)连接到单片机的IO口(P1.0、P1.1P1.7。。。),LED的阳极(Led+、A极)串联一个560欧姆电阻(一共16个)到电源正极 (Vcc、5V)如果要点亮一个Led的话(P1.0)
急求一个单片机流水灯(16个灯)电路图!!
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<
当单片机LED灯一亮一灭间隔1秒时,可以使用以下代码实现:// 初始化IO口 P1 = 0xFF; // 设置延时时间 while (1) { P1 = 0x00; // 延时1秒 for (int i = 0; i < 10000; i++) { // 空循环 } P1 =
void Timer0_isr(void) interrupt 1 using 1 { TH0=0x00; //重新赋值,方式1是16位计数器,不能硬件重装初始值 TL0=0x00;LED=~LED; //指示灯反相,可以看到闪烁 }
{ P1=0xff; //点亮P1口第0个引脚上的LED灯,0xff为二进制的11111111 delay(1000); //延时1秒 P1=0x00; //将P1口全部置为0,熄灭LED灯 delay(1000); //延时1秒 } } 上述程序的作用是在单片机的P1口上间隔点亮
单片机间隔点亮一led灯的C语言程序
while(1){ j=0x01;//假如高电平灯亮 for(i=0;i<8;i++){ P0=j;delay(1000);//逐个循环点亮 j<<=1;} j=0xfe;for(i=0;i<8;i++){ P0=j;delay(1000); // 逐个循环熄灭 j<<=1;} } }
首先定义变量类似于P1_2 = P1^2这种,先把这八个管脚全部定义好,之后给个for循环,让P1(假设的你LED灯连接的是P1口)口的P1^0~P1^7相关标志位依次等于0或者1(0还是1需要看你在LED等上给的是高电位亮还是低电位
sbit led8=P0^7;void delay(u16 i){ while(i--);} void main(){ while(1){ leda=1;//全部灯亮 //从左到右依次熄灭 led1=0;delay(50000);//大约延时450ms led2=0;delay(50000);//大约延时450ms led3=
1、依次亮,依次灭:从一个灯亮到全亮,再到全灭,每次改变一个灯亮灭 2、奇偶号灯间隔亮灭:隔一个灯亮一个灯亮灯时间为1s,没有灯全灭的时候 3、依次闪烁、切换时间为3秒,闪烁时间为2秒,我理解的是,没三秒
define uint unsigned int //延时 void DelayMS(uint x){ uchar i;while(x--){ for(i=0;i<120;i++);} } //主程序 void main(){ uint s;while(1){ P0=0xfe;DelayMS(150);for(s=8;s>1;s--){ P0=
include
1、创建项目,如图所示。2、创建延迟函数。3、创建C语言主函数。设计unsigned char k=0;变量。4、添加循环效果。5、点亮灯,通过k++,改变效果。6、添加延迟效果,单片机就可以控制8个灯依次亮,全亮了,然后再依次灭。
单片机控制8个灯依次亮,全亮了,再依次灭的c语言流程图,顺便加上解释,不然看不懂
1、用精确定时的方法,设置流水灯运行时的时间间隔,延时时间为500MS。2、#include "reg51.h"首先写出单片机的头函数。3、#include "intrins.h"输入位移函数。4、unsigned int count=0,led;定义函数。5、输入主函数,
我们得出在不同LED小灯被点亮的时候,P1端口输出的状态程序流程图还是比较简单的,P1口在间隔一段时间之后,输出不同的值,然后返回到程序执行的起点,重新开始执行,这样就会循环往复不断地出现流水的效果。
一、点亮一个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,
【第一种】 #includereg51.h //延时 void delay() { int i; for(i=0;i=30000;i++); } void main() { char i; int m; m=0x80; delay(); for(i=0;i=7;i++) { P0=~m; m=m1; delay(); }
单片机led流水灯实验步骤
学习单片机的第一个程序就是流水灯实验学习单片机的第一个程序就是流水灯实验学习单片机的第一个程序就是流水灯实验学习单片机的第一个程序就是流水灯实验!!!!学习语言的输出学习语言的输出学习语言的输出学习语言的输出的第一个程序就是的第一个程序就是的第一个程序就是的第一个程序就是 hello word! 这都是一个过程这都是一个过程这都是一个过程这都是一个过程!!!! 我们知道单片机执行的机器语言我们知道单片机执行的机器语言我们知道单片机执行的机器语言我们知道单片机执行的机器语言!!!!汇编就是其执行的根本的语言汇编就是其执行的根本的语言汇编就是其执行的根本的语言汇编就是其执行的根本的语言,,,,任任任任何程序的编译最终还是要生成何程序的编译最终还是要生成何程序的编译最终还是要生成何程序的编译最终还是要生成HEX语言语言语言语言,,,,汇编语言汇编语言汇编语言汇编语言~~!!!! 来回显示来回显示来回显示来回显示,,,,并且显示时还会发出蜂咛声并且显示时还会发出蜂咛声并且显示时还会发出蜂咛声并且显示时还会发出蜂咛声!!!! P1口接八个发光二极管口接八个发光二极管口接八个发光二极管口接八个发光二极管,,,,P2.3接一个蜂咛器接一个蜂咛器接一个蜂咛器接一个蜂咛器!!!! 一一一一....汇编语言汇编语言汇编语言汇编语言 mov r7,#8 main:mov r0,#8 ;一个循环需要移动一个循环需要移动一个循环需要移动一个循环需要移动8位位位位 mov p1,#01111111b ;初始为初始为初始为初始为P0.7灯点亮灯点亮灯点亮灯点亮 loop: clr p2.3 acall ds1ms ;延时延时延时延时,,,,以便人眼可以观察到以便人眼可以观察到以便人眼可以观察到以便人眼可以观察到 setb p2.3 acall ds1ms mov a,p1 ;读读读读P0口当前显示的数据送到口当前显示的数据送到口当前显示的数据送到口当前显示的数据送到A rr a ;将将将将A中的数据循环右移中的数据循环右移中的数据循环右移中的数据循环右移1位位位位 mov p1,a ;再将再将再将再将A中右移过的数据送到中右移过的数据送到中右移过的数据送到中右移过的数据送到P0 djnz r0,loop djnz r7,main ;移动不够移动不够移动不够移动不够8位位位位,,,,跳到跳到跳到跳到LOOP处循环处循环处循环处循环, ljmp rel ;流动流动流动流动1遍跳转到遍跳转到遍跳转到遍跳转到MAIN处循环流处循环流处循环流处循环流。。。。 ;---显示延时显示延时显示延时显示延时---------- ds1ms: mov r1,#1 ds1lo: mov r2,#200 ds2lo: mov r3,#200 djnz r3,$ djnz r2,ds2lo djnz r1,ds1lo ret ;延时返回延时返回延时返回延时返回 rel:end 二二二二.C语言语言语言语言 #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; //直接对直接对直接对直接对I/O口口口口P1赋值赋值赋值赋值,,,,使使使使P1.0输出低点平输出低点平输出低点平输出低点平。。。。 delay(); //延时延时延时延时 for(i=1;i>(8-i); P1=a|b; delay(); } for(i=1;i>i; b=temp<<(8-i); P1=a|b; delay(); } } } 实验很简单实验很简单实验很简单实验很简单!!!!懂的朋友完全可以在此基础上开发懂的朋友完全可以在此基础上开发懂的朋友完全可以在此基础上开发懂的朋友完全可以在此基础上开发!!!!比如一个爱心的流比如一个爱心的流比如一个爱心的流比如一个爱心的流水灯水灯水灯水灯。。。。如果你看懂了这两个程序如果你看懂了这两个程序如果你看懂了这两个程序如果你看懂了这两个程序!!!!恭喜你恭喜你恭喜你恭喜你,,,,你已经入门你已经入门你已经入门你已经入门!!!!#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;//点亮第八个发光管 } }
1、创建项目,如图所示。 2、创建延迟函数。 3、创建C语言主函数。设计unsigned char k=0;变量。 4、添加循环效果。 5、点亮灯,通过k++,改变效果。 6、添加延迟效果,单片机就可以控制8个灯依次亮,全亮了,然后再依次灭。
设置一个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++; }
流水灯还要什么电路图?阴极随便接2 个IO口,阳极串一小电阻(320~510)到+5V 。 ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV R0,#8 MOV A,#0FEH DISP: MOV P0,A ACALL DLY200 RL A DJNZ R0,DISP MOV R0,#8 MOV P0,#0FFH DISP1: MOV P1,A ACALL DLY200 RL A DJNZ R0,DISP1 MOV R0,#8 MOV P1,#0FFH AJMP DISP DLY200: ;延时200us,误差 0us MOV R7,#04H DL1: MOV R6,#74H DL0: MOV R5,#0D6H DJNZ R5,$ DJNZ R6,DL0 DJNZ R7,DL1 NOP RET END
其实红外遥控就是一个无线按键 你先把流水灯(多花式)做好,按键作为开关,流水灯花样、样式选择等,具体看你的想法 然后你就可以选择普通遥控器,比如电视的,然后解码 或者自己用另一个单片机模拟红外遥控器,协议可参考现有常用红外协议或是自定义一个简单的
bit flash;//闪烁标志位 sbit led=P0^0; sbit P01=P0^1; sbit P02=P0^2; void main() { P01=P02=0; flash=0; led=0; while(1) { scankey(); ledflash(); } } void scankey()//键盘扫描 { P01=1;//行线给1 if(P02)//如果P02也是1则说明接通 { delay(10);//去抖动10MS if(P02)//再次确定按键按下 { while(P02){flash=flash}//按住按键的动作 flash=~flash;//按键按下后执行动作 } } } void ledflash() { if(flash) { led=1;//点亮 delay(100);//延时100MS led=0;//熄灭 } else led=0; } void delay(unsigned int i) {自己根据单片机频率写个1MS带形参的演示程序} 这个程序是现写的。。应该能执行,有些细节没有写,自己修改下,只是个大框而已(比如函数声明,定义端口什么的)
这个很简单啊~~ 写一个嵌套判断~ if(key==0) { delay(100); //假设这是1s的延时,嵌套10个就是10秒的~~ if(key==0) { delay(100); if(key==0) { flag=1; //标志位改变 } } } if(flag==1) { led=1; //灯点亮 } if(key==1) { flag=0; //标志位还原 } if(flag==0) { led=0; //灯熄灭 }
1、用精确定时的方法,设置流水灯运行时的时间间隔,延时时间为500MS。 2、#include "reg51.h"首先写出单片机的头函数。 3、#include "intrins.h"输入位移函数。 4、unsigned int count=0,led;定义函数。 5、输入主函数,定义单片机的端口,写入延时函数。 6、中断跳转,使流水灯运行起来。
第4题 89S51 单片机的P1 口接有 8个 LED,当某一端口输出为“0”时,相应的 LED 点亮,P3.2、P3.3、P3.4、P3.5 分别接有四个按钮 K1~K4,按下按钮时,相应引脚被接地。现要求编写可键控的流水灯程序,当 K1 按下时,开始流动,K2 按下时停止流动,全部灯灭,K3 使灯由上往下流动,K4 使灯由下往上流动。 #include "reg51.h" #include "intrins.h" #define uchar unsigned char void mDelay(unsigned int DelayTime) { unsigned int j=0; for(;DelayTime>0;DelayTime--) { for(j=0;j<125;j++) {;} }} uchar Key() { uchar KeyV; uchar tmp; P1=P1|0x3c; //四个按键所接位置 KeyV=P1; if((KeyV|0xc3)==0xff) //无键按下 return(0); mDelay(10); //延时,去键抖 KeyV=P1; if((KeyV|0xc3)==0xff) return(0); else { for(;;){ tmp=P1; if((tmp|0xc3)==0xff) break;} return(KeyV);}} void main() { unsigned char OutData=0xfe; bit UpDown=0; bit Start=0; uchar KValue; for(;;) { KValue=Key(); switch (KValue) { case 0xfb: //P3.2=0,Start { Start=1; break; } case 0xf7: //P3.3=0,Stop { Start=0; break; } case 0xef: //P3.4=0 Up { UpDown=1; break; } case 0xdf: //P3.5=0 Down { UpDown=0; break; } } if(Start) { if(UpDown) OutData=_crol_(OutData,1); else OutData=_cror_(OutData,1); P2=OutData; } else P2=0xff; //否则灯全灭 mDelay(1000); } }