简单编了一下程序,,,include
图1 流水灯硬件原理图 从原理图中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反, 如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个
sbit KEY8 = P3^7;void main(){{if (KEY1 == 0){LED1 = 1;} else if (KEY2 == 0){LED2 = 1;} else if (KEY3 == 0){LED3 = 1;} else if (KEY4 == 0){LED4 = 1;} else if (KEY5 =
用8只LED代表8盏灯(D1~D8),限流电阻用一个9脚排阻RP1,原理图如下:为了视觉观察观察方便,用一个500ms,也就是0.5秒的延时程序来间隔灯的亮灭变化。当然这个时间是可以自由修改的,修改成1秒的话也可以,只是LED亮
4、添加循环效果。5、点亮灯,通过k++,改变效果。6、添加延迟效果,单片机就可以控制8个灯依次亮,全亮了,然后再依次灭。
1、依次亮,依次灭:从一个灯亮到全亮,再到全灭,每次改变一个灯亮灭 2、奇偶号灯间隔亮灭:隔一个灯亮一个灯亮灯时间为1s,没有灯全灭的时候 3、依次闪烁、切换时间为3秒,闪烁时间为2秒,我理解的是,没三秒
要求用51单片机控制8个LED亮灭的原理图+程序+解说?
void delay10ms()//延时函数(利用for循环){ for(a=100;a>0;a--)for(b=225;b>0;b--);} void main()//主函数main { k=0xfe;//给变量赋初值(十六进制)相当于二进制数11111110 while(1)//死循环 { de
很简单,如果单片机时钟是12MHz,采用16位定时器中断,最长定时周期恰好是65ms ,只要初装值设为0000H,在中断程序中直接依次点灯就OK。
//延时 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=_crol_(P0,1); //P0
因为你只是单个LED,所以使用静态显示就好了(9个I/O口),定时30ms若不精确,可以使用简单的延时函数,若需要精确,要使用定时器T0或者T1。8个LED就是简单的I/O口高低电平了(8个I/O口)。整个功能很简单,若需要详细
timer0_init(); TR0=1; //打开定时器 while(1) { for(i=0;i<8;i++) { P2= ~(1<
要让8个灯每秒依次点亮,可以使用计时器和计数器来实现。以下是一个可能的实现步骤:创建一个1秒的计时器(例如,使用定时器标记为T1)和一个计数器(例如,使用计数器标记为C1)。在计时器T1的触发条件下,将计数器C1的
定时器八盏led灯依次点亮
(2)请用定时器T0,工作方式1,通过中断来实现两灯状态切换的1s延时。ORG 0000H LJMP MAIN ORG 000BH MOV TL0, #(65536 - 50000) MOD 256 ;50ms@12MHz MOV TH0, #(65536 - 50000) / 256 DJNZ
每隔50ms从左到右不断依次循环点 速度够快的。人眼,辨别不出来。看起来,就是同时亮,全亮。
//sbit d1=P1^0;void main(){ TMOD=0x10; //选择定时器 t0的工作方式为1 EA=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET1=1;TR1=1;aa=0xfe;while(1){ if(tt==2){ tt=0;P1=aa;aa=_crol
利用定时器T1产生定时时钟,由P1口控制8个发光二极管使8个灯依次闪烁,闪烁频率10次/秒,循环 - 用定时/计数器t1定时50ms,晶振频率取12mhz,定时器初值为3cb0h,采用中断方式,用变量计数中断次数.p1口控制8个发光二极管
;假设1:D1~D8八个彩灯接在P1口,输出低电平发光 ;假设2:系统晶振为12MHz ;假设3:N = 5 ;程序如下:ORG 0000H MOV R3, #5 ;N=5 LOOP0:MOV A, #0FFH MOV P1, #0FFH ;开始时全灭 ;---逐个
LED负极接单片机IO口,本程序接P1,低电平点亮 include
这就是典型的8个LED的流水灯,并用定时器来控制点亮的时间。可用定时器定时50ms,采用中断方式,对中断计数40次就是2s,每到2s移动点亮下一个LED灯。可先画出仿真图再写程序,如下所示仿真图。
设计一个8灯闪烁的控制电路,系统晶振为12MHZ,编程实现8灯轮流闪烁,每盏灯点亮时间为2s?
给一个程序,用一个开关控制8个灯,每秒钟亮一个。从左到右依次闪亮,然后再从右往左依次闪亮,不断重复循环,直到断开启动开关。
x0为启动按钮,x1为停止按钮。y0~y7为8盏灯。程序在按下启动按钮后,灯1先亮,1秒(T0延时)后灭,1秒后(T1延时)灯2亮,依次循环。当按下x1后,循环结束。按下x0后,m0得电为1并自保持,此时1秒计时器T0计时,
SA1为启动按钮,当SA1松掉时,仅保持当前已经亮的灯,不再继续亮其它灯,除非再按下SA1;任何时候按下SA2,全部灯都灭(包括两个按钮全部按下的情况)。FLAG1、FLAG2为中间变量 S6为系统变量,秒脉冲 开灯用MOVE功能块
方式2 还有你图上网络2中 Q0.0后面的 I0.0不需要加,只要常开开关Q0.0就好了
用14个计时器,流程如下:led1..8:指示灯 t1..14:计时器 sb1:启动按钮 sb2:复位按钮 sb1(on,串联SB2常闭)---led1(on并自锁,自锁回路串联t8常闭和SB2常闭)和 t1(计时)---当t1计时到,led2(on并自锁
求PLC 八盏灯每隔3秒亮一个,直到全亮,再从第一个开始逐个灭梯形图和顺序结构图,谢谢各位~
} } //主程序 void main(){ uint s;while(1){ P0=0xfe;DelayMS(150);for(s=8;s>1;s--){ P0=_crol_(P0,1); //P0 的值向左循环移动 DelayMS(150);} P0=0x00;DelayMS(150);p0=0xff;DelayMS(150);
你首先要确定你的电路。选择什么单片机和数码管,8个按键最简单8个IO口控制。一般简单的是用三极管驱动数码管。如果你会C语言的话,很容易上手。自己先从控制1个数码管学,在控制2个数码管(2个数码管基本上可以完成上面
1、依次亮,依次灭:从一个灯亮到全亮,再到全灭,每次改变一个灯亮灭 2、奇偶号灯间隔亮灭:隔一个灯亮一个灯亮灯时间为1s,没有灯全灭的时候 3、依次闪烁、切换时间为3秒,闪烁时间为2秒,我理解的是,没三秒
首先定义变量类似于P1_2 = P1^2这种,先把这八个管脚全部定义好,之后给个for循环,让P1(假设的你LED灯连接的是P1口)口的P1^0~P1^7相关标志位依次等于0或者1(0还是1需要看你在LED等上给的是高电位亮还是低电位
include
1、创建项目,如图所示。2、创建延迟函数。3、创建C语言主函数。设计unsigned char k=0;变量。4、添加循环效果。5、点亮灯,通过k++,改变效果。6、添加延迟效果,单片机就可以控制8个灯依次亮,全亮了,然后再依次灭。
单片机控制8个灯依次亮,全亮了,再依次灭的c语言流程图,顺便加上解释,不然看不懂
你是要程序 还是流程图其次,我建议还是自己尝试写一写,这个不难,我给你个思路 首先定义变量类似于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的时候可以加个延时
如图所示,其中X0启动,X1停止,Y0~Y7为8盏灯。 望采纳。。。。。。
望采纳!
LED负极接单片机IO口,本程序接P1,低电平点亮 #include //52系列单片机头文件 #include #define uint unsigned int //宏定义 #define uchar unsigned char void delayms(uint); //声明子函数 uchar aa; void main() //主函数 { aa=0xfe; //赋初值11111110 while(1) //大循环 { P1=aa; delayms(2000); //延时2秒 aa=_crol_(aa,1); //将aa循环左移1位后再赋给aa } } void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) //i=xms即延时约xms毫秒 for(j=110;j>0;j--); }
; ORG 0000H LJMP MAIN MAIN: MOV TMOD, #01H MOV TH0, #(65536 - 62500) / 256 MOV TL0, #(65536 - 62500) MOD 256 SETB TR0 M_LOOP: MOV A, #127 MOV R3, #0 OUT: MOV P1, A INC R3 CJNE R3, #60, NEXT ;不到60, 就去流水 CPL F0 ;到了, 就改变方向 SJMP M_LOOP ;从头开始 ;---------------------------------- NEXT: MOV R2, #16 WAIT: JNB TF0, $ MOV TH0, #(65536 - 62500) / 256 MOV TL0, #(65536 - 62500) MOD 256 CLR TF0 DJNZ R2, WAIT ;不到一秒就转移 JB F0, LLL ;选择左右方向 RR A SJMP OUT LLL: RL A SJMP OUT END 上述程序已经得到验证。
#include 包含单片机专用头文件 #include 这个是什么俺也不知道,但这个程序不需要这个头文件 void Delay10ms(unsigned int c); 自定义的延时函数声明 main() 主函数 { unsigned int LED; 建立一个数值型变量,变量名 LED LED=0xfe; 给这个变量赋值,0xfe 换成二进制数为 1111 1110 while(1) 主循环 { P2=LED; 点亮发光管,即先点亮右边的第一个 Delay10ms(50); 延时一段时间 LED=LED<<1; 点亮的发光管,向左移动一位 if (P2==0x00) 判断是否8个全部点亮了 { LED=0xff; 如果全部点亮,则将全部发光管熄灭 } } } void Delay10ms(unsigned int c)延时函数主程序 { unsigned char a, b;建立两个变量 a b for(;c>0;c--)循环语句,不断改变变量数值,已达到延时目的 { for(b=38;b>0;b--) { for(a=130;a>0;a--); } } } 给你翻译了,希望能帮到你
一、利用定时器实现: /*****************************预处理命令*****************************/ #include #define OUT P0 //晶振:12MHZ /********************重新定义数据类型*******************************/ typedef unsigned char unit8; typedef unsigned short unit_16; /* 函数名:main() 函数功能: 主函数 输入:无 输出:无 */ void main() { TMOD = 0x01; TR0 = 1; ET0 = 1; EA = 1; while(1); } /* 函数名:Timer0_Rountine() interrupt 1 函数功能:内部中断T0 服务函数 输入: 无 输出:无 */ void Timer0_Rountine() interrupt 1 { static unit_16 Count=0; static unit8 Count_Sign=0; static bit Sign=0; TH0 = 0xfc; TL0 = 0x18; Count++; if(!Sign) OUT = 0xaa; //奇数 (1秒) if(Count>=1000) { Sign=1; Count=0; if(Count_Sign<3) //2秒 OUT = 0xaa; //奇数 else if(Count_Sign>=3&&Count_Sign<=10) //8秒 OUT = 0x55; //偶数 else if(Count_Sign>10&&Count_Sign<=22) //12秒 OUT = 0x00; //全部 else if(Count_Sign>22)Count_Sign=Sign=0; Count_Sign++; } } 二、利用软件延时实现: #include #define OUT P0 typedef unsigned char unit8; typedef unsigned int unit16; /* 函数名:delay_ms(unit16 x) 函数功能: 延时函数1MS 输入:x 输出:无 */ void delay_ms(unit16 x) { unit8 a,b; while(x--) { for(b=142;b>0;b--) for(a=2;a>0;a--); } } /* 函数名:main() 函数功能: 主函数 输入:无 输出:无 */ void main() { while(1) { OUT = 0xaa; //奇数 delay_ms(3000); //3秒 OUT = 0x55; //偶数 delay_ms(8000); //8秒 OUT = 0x00; //全部 delay_ms(12000);//12秒 } }