先写一个延时子函数delay,延时时间1秒。然后写LED=0;delay(1);LED=1;这样就可以做到一亮一灭,再把这段程序加入到循环中就可以,循环函数很简单不用再说了吧,如果还不懂回复我给你程序
单片机驱动LED灯的源程序:include
include
说明:单片机控制LED灯间隔时间闪烁 所用程序很简单,实际情况可作相应变化,也有多种方式实现。proteus电路图 所需元件清单:(分别是) 51单片机 电容 瓷片电容(也可用普通电容) 晶振 红色二极管 电阻 (tip:没有给高
同时开放了定时器中断,并将定时器中断优先级设置为1(即高优先级)。在无限循环中,不断检测K1和K2按键状态,以改变全局变量“freq”并控制LED灯的闪烁频率;然后使用一个计时器中断服务程序来控制LED灯的闪烁,具体实现方式
以下是一个简单的51单片机程序,通过按下按键可以实现4种不同状态的灯亮灭,包括正闪、反闪、多种间隔闪。程序中使用了定时器来实现闪烁功能。程序中使用了P1.0到P1.3作为控制灯的引脚,P3.2作为按键的引脚。每当按下
P1=0x00; //将P1口全部置为0,熄灭LED灯 delay(1000); //延时1秒 } } 上述程序的作用是在单片机的P1口上间隔点亮一盏LED灯,每隔1秒钟灯的状态会发生一次变化,即由点亮状态变为熄灭状态,再由熄灭状态变为点亮状态。
求单片机控制LED灯1秒钟闪烁一次程序
用个定时中断就可以啦。把定时器的寄存器设置好,中断标志置位后,将信号灯的信号取反就可以了。
C语言实现LED灯闪烁控制配套51单片机开发板。include //包含单片机寄存器的头文件 /***函数功能:延时一段时间 / void delay(void) //两个void意思分别为无需返回值,没有参数传递。{ unsigned int i; //定义
中断 125 次,即为一秒。令 IO 接口取反即可。
在无限循环中,不断检测K1和K2按键状态,以改变全局变量“freq”并控制LED灯的闪烁频率;然后使用一个计时器中断服务程序来控制LED灯的闪烁,具体实现方式请参考代码注释。最后,为了保证每个周期的闪烁持续时间与频率相符,应该
设置定时器时间间隔为1s,计数总共不到1s的话,就再定义一个变量,循环多次,以实现1s 然后再1s时的定时器中断子程序中设置输出脚的电平交替即可
单片机中怎样中断控制led灯隔一秒闪烁一次,c语言的,麻烦高手贴个程序看一下,最好用定时器t0。
也就是要求1HZ的频率闪烁 用单片机实现 首先定时500MS,设定一个标志位B_FLASH_500MS,在主程序里你点亮LED,同时在时间子程序里判断是否到了500MS,时间到了B_FLASH_500MS取反,然后在点亮LED的时候判断是否B_FLASH_500
可以用外部中断计数,来实现流水灯的正转、暂停、以及反转和爆闪。。这是我前几天写的一个这样的程序,楼主可以结合protues 画图仿真,注意程序中所用到的IO端口就行了。include
利用定时器T1控制LED灯照1Hz的频率闪烁二极管以1HZ闪烁,意思是1秒内亮灭一次,HZ单位是次/秒(次每秒),1HZ就是一秒1次。单片机的晶振频率应该是11.0592 MHZ(兆赫兹),也就是11059200次每秒,频率是11.0592MHZ,单位
1hz就是1秒周期闪烁发光了,这用mcu的定时器1秒控制输出很简单啊。
要想让发光二极管以1HZ闪烁,要求不高的情况下,编程时可以用500ms的延时函数,控制单片机连接LED的I/O口毎500毫秒进行高低电平切换。至于延时函数会根据不同类型的单片机会有所不同。以下是STC89C系列的500ms延时函数参考:
怎样使led灯以1hz的频率闪烁发光
include
while(1){ P1=0xff; //点亮P1口第0个引脚上的LED灯,0xff为二进制的11111111 delay(1000); //延时1秒 P1=0x00; //将P1口全部置为0,熄灭LED灯 delay(1000); //延时1秒 } } 上述程序的作用是在单片机的P1口
我的思路是,延时用8253 的方式3,两个通道连用,输出周期为1秒的方波,在0.5秒的低电平时,让8255工作,0.5秒的高电平时,不让8255工作,这个题的延时是通过硬件电路实现的,如果用软件延时,8253一点用都没有
如果你LED的接口一个低电平,即0,灯就会亮,给一个高电平,1,就会灭。如果要一闪一闪的,只需给亮和灭的中间加延时,控制亮灭次数,可以使用一个循环。
loopwait3;输出延时循环,将闪烁两次 mov dx, IO8253B mov al, 0AAH outdx, al outdx, al ;再次给计数器1送入计数初值0AAAAH jmp zl LS: mov dx, IO8253D mov al, 0B0H out dx, al;定义控制字,使用计数
用8253怎样编程让led灯一秒闪一次
以51位例,使用P1的八个IO口控制。先定义:sbit LED0=P1^0;sbit LED1=P1^1;以此类推,定义八个。然后在主循环中:LED0=0;延时一段时间;LED0=1;就可以看到闪烁了。
while(1){ P3=0xfe;//第一个灯亮 delay();//延时 P3=0xfd;//第二个灯亮 delay();P3=0xfb;//第三个灯亮 delay();P3=0xf7;//第四个灯亮 delay();P3=0xef;//第五个灯亮 delay();P3=0xdf;//第六
看来是你自己把自己搞晕了。那P2口接的8个LED灯是怎么排列的?注意那P2.0的灯排在左边还是右边了吗?见下图,P2输出的就是0x55,看到的就是灭亮灭亮,那是因为P2.0所接的灯是在左边,而你又是从左边向右看的,
可见执行结果是:LED由外向内,再由内向外点亮
1:设定一个变量i,可以从0到3循环的变化 2:检测一个经过消抖处理的按键,按一下,i+1 3:当i值为各个值时,执行相应的花样。流水灯参考程序 include include define uchar unsigned char uchar j,temp;void delay(un
void main(){ uchar i;while(1){ P2=0x01;//此处有改 for(i=0;i<7;i++){ P2=_crol_(P2,1); //P2 的值向左循环移动 DelayMS(150);} P2=0x80;//此处有改 for(i=0;i<7;i++){ P2=_cror_(P2,
void main(){ while(1){ P2=0xfe; //第1个管亮 delay(500);P2=0xfd; //第2个管亮 delay(500);P2=0xfb; //依次类推 delay(500);P2=0xf7;delay(500);P2=0xef;delay(500);P2=0xdf;delay(500);P2=0x
画出一个仿真图,让p2口接8个LED发光二极管,并书写一道程序,让LED灯做亮灭闪烁每一秒闪烁一次
毕业设计研究思路及方法: 通过介绍51单片机和所用到的元件,用KEIL软件写C程序并仿真对错与修改,还在PROTEUS软件里面画仿真电路图,把正确的C程序烧入51单片机的芯片里面,运行。在点阵屏幕上显示“单片机”三个字样。
设置定时器时间间隔为1s,计数总共不到1s的话,就再定义一个变量,循环多次,以实现1s 然后再1s时的定时器中断子程序中设置输出脚的电平交替即可
sbit ledbP0^1 void delay(int t){ while(t--)} void main(void){ while(1){ leda=0;ledb=1 delay( );leda=1;ledb=0;delay();} } 说明:IO口自己修改定义,因为不知道工作频率延时函数自己确定。
sbit L1=P0^0;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;d
define uchar unsigned char /***主函数***/ void timer0();void main() // 主程序 { TMOD=0x01; //定时器0工作方式1 EA=1;ET0=1; //定时器0中断 TR0=1; //启动定时器0 TH0=(65536-50000)/256;TL0=
如果为高低电平 则选择控制LED的端口内容右移一位 即可实现对流水灯的方向控制。呵呵 满意 就选满意回答哦
当单片机LED灯一亮一灭间隔1秒时,可以使用以下代码实现:// 初始化IO口 P1 = 0xFF; // 设置延时时间 while (1) { P1 = 0x00; // 延时1秒 for (int i = 0; i < 10000; i++) { // 空循环 } P1 =
如何使是51单片机板上相间隔的LED灯以间隔1s闪动?
#include //包括一个52标准内核的头文件 #define uchar unsigned char /******************************主函数*****************************/ void timer0(); void main() // 主程序 { TMOD=0x01; //定时器0工作方式1 EA=1; ET0=1; //定时器0中断 TR0=1; //启动定时器0 TH0=(65536-50000)/256; TL0=(65536-50000)%256; while(1); //程序循环 } /*****************************定时器0中断*************************/ void timer0() interrupt 1 { uchar t;//定义变量 TF0=0;//定时器清0 t++; //中断一次累加1 if(t==20) //预置值,溢出20次就是1秒钟,晶振12MHZ { t=0; P3=~P3; //反转LED灯的亮灭 } } /*****************************************************************/嘿嘿 这个俺可以帮你解答 1 利用定时计数器0 工作在方式2 定时50毫秒 结合软件计数器(初始值选20) 允许定时计数器中断 2 设计一个定时器0的中断服务程序 每50毫秒 就中断 在中断程序中软件计数器减1 当减到0时,表示1秒时间到 (重新送初始值20) 判断拨动开关状态 如果为低低电平 则选择控制LED的端口内容左移一位 如果为高低电平 则选择控制LED的端口内容右移一位 即可实现对流水灯的方向控制。 呵呵 满意 就选满意回答哦
#include #define uchar unsigned char void delay(uchar a) { uchar i,j; for(i=0;i<a;i++) for(j=0;j<120;j++); } main() { while(1) { P2=0x00; delay(100); P2=0xff; delay(100); } }
#include #define uchar unsigned char #define uint unsigned int uint num=0,i=0; uchar code LED[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void main() { EA=1; ET0=1; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; P1=0; while(1) { if(num==2) { num=0; P1=LED[i]; i++; if(i>7) i=0; } } } void time0() interrupt 1 { num++; TH0=(65536-50000)/256; TL0=(65536-50000)%256; }
找厂家
设置定时器时间间隔为1s,计数总共不到1s的话,就再定义一个变量,循环多次,以实现1s 然后再1s时的定时器中断子程序中设置输出脚的电平交替即可
根据您的疑问,闪烁频率是不支持更改的 。
LED的点亮速度可以达到 ns(纳秒)级,不过需要相应的高品质LED管,还要有相应的配套辅助电路
include #define uchar unsigned char char code dx516[3] _at_ 0x003b; void main(void) { RCAP2H=0x10; RCAP2L=0x00; TR2=1; ET2=1; EA=1; while(1) { } } timer2() interrupt 5 { static uchar t; TF2=0; t++; if(t==30) { t=0; P1=~P1; } }
C语言实现LED灯闪烁控制配套51单片机开发板。 #include //包含单片机寄存器的头文件 /****************************************函数功能:延时一段时间 *****************************************/ void delay(void) //两个void意思分别为无需返回值,没有参数传递。 { unsigned int i; //定义无符号整数,最大取值范围65535。 for(i=0;i<20000;i++) //做20000次空循环。 ; //什么也不做,等待一个机器周期。 } /******************************************************* 函数功能:主函数 (C语言规定必须有也只能有1个主函数)。 ********************************************************/void main(void) { while(1) //无限循环。 { P0=0xfe; //P1=1111 1110B, P0.0输出低电平。 delay(); //延时一段时间。 P0=0xff; //P1=1111 1111B, P0.0输出高电平。 delay(); //延时一段时间。 } } 单片机驱动LED灯的源程序: #include //头文件。 #define uint unsigned int #define uchar unsigned char sbit LED1=P1^7; //位定义。 void delay_ms(uint);//mS级带参数延时函数。 void main() { while(1) { LED1=0; delay_ms(1000); LED1=1; delay_ms(1000); } } void delay_ms(uint z) //延时子程序 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } 扩展资料: 单片机应用分类: 通用型: 这是按单片机(Microcontrollers)适用范围来区分的。例如,80C51式通用型单片机,它不是为某种专门用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电子体温计的要求,在片内集成ADC接口等功能的温度测量控制电路。 总线型: 这是按单片机(Microcontrollers)是否提供并行总线来区分的。总线型单片机普遍设置有并行地址总线、 数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接。 另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不要并行扩展总线,大大减省封装成本和芯片体积,这类单片机称为非总线型单片机。 控制型: 这是按照单片机(Microcontrollers)大致应用的领域进行区分的。一般而言,工控型寻址范围大,运算能力强;用于家电的单片机多为专用型。 通常是小封装、低价格,外围器件和外设接口集成度高。 显然,上述分类并不是惟一的和严格的。例如,80C51类单片机既是通用型又是总线型,还可以作工控用。 参考资料来源:百度百科-单片机
设置定时器时间间隔为1s,计数总共不到1s的话,就再定义一个变量,循环多次,以实现1s 然后再1s时的定时器中断子程序中设置输出脚的电平交替即可
1、同时去掉两个delay,会导致led引脚的电平持续在0、1之间变化,变化频率非常快,在MHz量级,导致的结果就是直接看不到灯闪烁,如果灯的初始状态是灭的,则灯会基本看不到亮度。 2、见上一条,见不到闪烁。 3、去掉第一个delay,实际灯会持续表现出led=1指令的状态,该状态与硬件中led灯的控制端是接在阴极还是阳极有关;类似地,去掉第二个delay,实际灯会持续表现出led=1指令的状态。 4、人眼能分辨的灯闪烁最快的情况应该在几十Hz左右,可以实际更改delay函数的值,进行测试;最慢闪烁速度,则取决于delay的最长延时时间,这里delay的参数num为16位,则当num取65535时,灯闪烁最慢,另外,还可以增大delay函数内部参数“y=110”的值,增加延时时间,降低闪烁速度。