2010-11-14 用定时器1实现51单片机上LED灯每隔十秒亮暗闪烁 9 2011-09-11 51单片机 定时器问题 (LED小灯 每隔一秒亮灭一次) 3 2012-11-07 用51单片机的定时器实现LED灯逐一点亮,间隔一秒。要求拨动 4 2010-12-25 请

可以的,定时器中断时间上要比for循环精确,而且定时器中断不会影响整个程序的运行时间。

你根据你的单片机硬件接线图,把小灯的端口对应改一下就可以了 include define uint unsigned int define uchar unsigned char uchar count;sbit led_1 = P2^1;sbit led_2 = P2^2;void main(){ TMOD =

暂时想到两种解决方案:1.最简方案——利用延时函数:进入主函数后,初始化LED,设置一个延时初始值,然后进入while循环,里边只做四件事,打开LED,利用键盘返回值作延时函数参数,关闭LED,利用键盘返回值作延时函数参数。2.

如果想实现无限循环那就采用死循环方式,可以无限的循环如while(1){};然后设定定时器定时时间为1s(此值需要根据单片机确定是否可以设定这么大),其次,设定一个变量对时间进行计数,根据计数情况做出相应的改变,程序可以这

注意Led的另一端要接在一起,共地或者高电平都可以,但是为了保护LED,最好在每个小灯上串上一个电阻(若单片机采用的是5V电压,电阻可选用500欧左右的就可以了),

用定时器实现51单片机上LED灯每隔两秒亮暗闪烁

同时开放了定时器中断,并将定时器中断优先级设置为1(即高优先级)。在无限循环中,不断检测K1和K2按键状态,以改变全局变量“freq”并控制LED灯的闪烁频率;然后使用一个计时器中断服务程序来控制LED灯的闪烁,具体实现方式

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)

1、新建项目,如图所示。2、添加头文件,创建延迟函数。3、创建C主函数。4、添加死循环效果。5、点亮LED灯。P1=0x7e;二进制11111110。6、添加延迟效果。注意事项:很多公司都有51系列的兼容机型推出,今后很长的一段时间内

说明:单片机控制LED灯间隔时间闪烁 所用程序很简单,实际情况可作相应变化,也有多种方式实现。proteus电路图 所需元件清单:(分别是) 51单片机 电容 瓷片电容(也可用普通电容) 晶振 红色二极管 电阻 (tip:没有给高电

51单片机C程序实验LED灯:[1]单个灯闪烁

我再帮你补一课,看了你的标题,我写了一个用定时器0来控制一个LED灯第隔1秒钟亮灭一次的程序,希望对你有用,另外我也写了一个你说的那个程序,一起发上来吧 这个是用定时器0控制一个灯的亮和灭 include

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口自己修改定义,因为不知道工作频率延时函数自己确定。

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 Timer0

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

} 上述程序的作用是在单片机的P1口上间隔点亮一盏LED灯,每隔1秒钟灯的状态会发生一次变化,即由点亮状态变为熄灭状态,再由熄灭状态变为点亮状态。

单片机led灯一亮一灭间隔1秒

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

当单片机LED灯一亮一灭间隔1秒时,可以使用以下代码实现:// 初始化IO口 P1 = 0xFF; // 设置延时时间 while (1) { P1 = 0x00; // 延时1秒 for (int i = 0; i < 10000; i++) { // 空循环 } P1 =

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

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

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

连接线 2.连接电路:将LED灯与单片机连接起来。一般情况下,将LED的正极连接到单片机的一个GPIO引脚,将LED的负极连接到电阻,然后将电阻的另一端连接到单片机的地(GND)引脚。确保连接牢固。3.编写程序:使用单片机的编程

这种程序是最简单,最基础的程序,初学者应该都能完成,给你写个软件延时200ms闪烁的LED程序,如果要精确闪烁时间,那就要用定时器来实现了。include sbit LED1 = P1^2;sbit LED2 = P1^3;bit LED_Byte;/

led的闪烁是通过一定频率的开关led实现的。如果开关频率太快,人类是看不出来是在闪烁,所以开关频率要低一些,比较高的切换频率可以用来控制led亮度(PWM),或者用来做数码管显示。实现方式主要有两种方式:(1)使用代码循环做为

上述程序的作用是在单片机的P1口上间隔点亮一盏LED灯,每隔1秒钟灯的状态会发生一次变化,即由点亮状态变为熄灭状态,再由熄灭状态变为点亮状态。

delay(); //延时一段时间。} } 单片机驱动LED灯的源程序:include //头文件。define uint unsigned int define uchar unsigned char sbit LED1=P1^7; //位定义。void delay_ms(uint);//mS级带参数延时

//假设标准51 12T 4MHz晶振 闪动我理解为亮200ms灭200ms持续5s 小灯由P1.0控制 高电平为亮 sbit LED=P1^0;int counter=0;void InitTimer0(void) //定时器 100ms { TMOD = 0x01;TH0 = 0x7D;TL0 = 0x

int led = 1;// 定义 LED 闪烁的间隔时间,单位为毫秒 int interval = 200;void setup() { // 初始化数字输出为输出模式 pinMode(led, OUTPUT);} void loop() { // 让 LED 亮起来 digitalWrite(led, HIGH);/

我刚学单片机,想让LED上的第一个小灯间隔200MS闪烁,我编的程序是这样的?

函数名可以写做 delay_ 200ms() 或delay200ms() ,但不可以函数名字中间带个空白符 标识符常识,开头不以是数字,中间不得有空白符等无效符号,C语言基本功不过关啊
#include 头文件 #define uchar unsigned char 宏定义懂吧 以后unsigned char就用uchar表示了 uchar code table[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};编码定义和C中数组定义方法类似 这里主要是为了让数码管显示具体数字而编的 uchar seconds,minute,count1; 定义变量 /**********初始化函数***************/ void init() { P0=0xff; 这个有电路图才好说 不过好像是让端口都为高电平 P0=0x00; // 初始化关显示 seconds=0; minute=0; count1=0; TMOD=0x11; //选择计数器T1模式1 TH1=(65536-46080)/256; 这是定时器的设置 计算初值 改变那个被减数可以改变每次的时间 TL1=(65536-46080)%256; //定时器1实现50MS定时 同上 EA=1; //开总中断 ET1=1; //开定时器1中断 TR1=1; //定时器1开始计数 } /******定时器1中断函数*********/ void t1() interrupt 3 //定时器1中断级别为3 { TH1=(65536-46080)/256;//数据重载 “/”这符号是求模 TL1=(65536-46080)%256; ”%“这符号是求余 count1++; if(count1==20) 这个20乘以上面的那个50毫秒就是1秒钟 { count1=0; 计20次重新归零 seconds++; 每计20次秒数加一 if(seconds>59) { seconds=0; }minute++; 当秒数>59时秒数归零 分加1 我个人觉得这应该设置为>60 如果设置为59的话 seconds=59的时候就归零了 就是说59可能就不会显示了 } } /*******延时函数***************/ void delay(uchar xms) { char x,y; for(x=xms;x>0;x--) for(y=110;y>0;y--); 这是根据程序仿真算的时间 每110次大概就是一毫秒 设置X等于几就是几毫秒 } /************显示函数***********/ void display(uchar temp) { uchar qian,bai,shi,ge; 定义变量 temp=seconds; 把seconds的值传递给temp qian=minute/10; 对10取模 bai=minute%10; 对10取余 shi=temp/10; 对10取模 ge=temp%10; 对10取余 P0=0xff; //消隐 这个没什么大用 去掉也可以 P2=0xdf;//第一个数码管选中 这个值得看你那电路图 P0=table[ge]; 对P0赋值 从table中调取 delay(1); 调用延迟函数 延迟一毫秒 P0=0xff;//消隐 P2=0xef;//第二个数码管选中 看电路图赋值 P0=table[shi]; 同上 delay(1); P0=0xff;//消隐 P2=0xf7;//第三个数码管选中 P0=table[bai]; delay(1); P0=0xff;//消隐 P2=0xfb;//第四个数码管选中 P0=table[qian]; delay(1); } /************主函数***********/ void main() { init(); 初始化函数 while(1) 大循环 { display(seconds); 让数码管开始显示 计秒 } } 这是一个计时器程序 没有小时 是计秒 然后还有分钟 我也是初学者 有什么问题我们可以再讨论 我的邮箱snowleopard331@163.com 有问题发邮件给我一起讨论
设置一个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++; }
你用的是几个灯啊?比如说8个灯吧,用P0口, 就是直接讲P0口与LED直接相连就行了啊,注意Led的另一端要接在一起,共地或者高电平都可以,但是为了保护LED,最好在每个小灯上串上一个电阻(若单片机采用的是5V电压,电阻可选用500欧左右的就可以了),以减小通过led的电流。剩余的就是单片机的最小系统了,没什么好说的吧,就是晶振,复位而已。 程序嘛,也很简单啊,你说用定时器,每个两秒如果单纯用一个定时器的话肯定不够用的,要结合循环判断语句,比如你采用12M的晶振,并且将定时中断时间定为50ms,那么设置一个变量,每20次就是一秒了,所以40次就是两秒。这样的话,每个40次就让led的状态(用0和1表示亮与灭)改变就可以了。main函数中应该设置一个死循环函数,可用while(1),让单片机不断的循环工作。
#include sbit D0=P0^0; //将D0位定义为P0.0引脚 unsigned int delayTimes1,i; void main(void) { i=0; EA=1; ET0=1; TMOD=0x01; //使用定时器T0的模式1 TH0=0xfc; //定时器T0的高8位赋初值 TL0=0x18; //定时器T0的高8位赋初值 TR0=1; D0 = 0; delayTimes1=10000; while(1){ if(delayTimes1==0) { delayTimes1=10000; D0=~D0; } } } timer0() interrupt 1 // 1ms延时(12.0MHz) { TR0=0; ET0=0; TH0=0xfc; TL0=0x18; if(delayTimes1!=0) delayTimes1-- ; TR0=1; ET0=1; }