利用定时器控制LED灯闪烁

合集下载

单片机实验报告——LED灯控制器

单片机实验报告——LED灯控制器

《微机实验》报告LED灯控制器指导教师:专业班级::学号:联系方式:一、任务要求实验目的:加深对定时/计数器、中断、IO端口的理解,掌握定时/计数器、中断的应用编程技术及中断程序的调试方法。

实验内容:利用C8051F310单片机设计一个LED灯控制器主要功能和技术指标要求:1. LED灯外接于P0.0端。

2. LED灯分别按2Hz,1Hz和0.5Hz三种不同频率闪动,各持续10s。

3. 在LED灯开始和停止闪烁时蜂鸣器分别鸣响1次。

4. 利用单片机内部定时器定时,要求采用中断方式。

提高要求:使用按键(KINT)控制LED灯闪烁模式的切换。

二、设计思路C8051F310单片机片上晶振为24.5MHz,采用8分频后为3.0625MHz ,输入时钟信号为48个机器周期,所以T1定时器采用定时方式1,单次定时最长可以达到的时间为1.027s,可以满足0.5Hz是的定时要求。

基础部分:给TMOD赋值10H,即选用T1定时器采用定时方式1,三种频率对应的半周期时间为0.25s、0.5s、1s。

计算得需给TH1和TL1为C1H、B1H;83H、63H;06H、C6H。

要使闪烁持续10s,三种模式需要各循环40、20、10次。

用LOOP3:MOV C,PSW.5 ;PSW.5为标志位,进定时器中断后置一JNC LOOP3代替踏步程序等待中断,以便中断完后回到主程序继续向下执行。

为了减少代码长度,可以采用循环结构,循环主题中,将R1、R2分别赋给TH1、TL1,R7为循环次数(用DJNZ语句实现);定时中断里,重新给TH1、TL1赋值时同理。

这样,循环时只要把定时时间和循环次数赋给R1、R2、R7即可,达到减少代码长度的效果。

蜂鸣器也采用T1定时方式1,定时一秒。

提高部分:采用外部中断0,下降沿触发。

外部中断程序里置标志位PSW.1和R0,PSW.5用于判断执行完一种模式后,是否跳出循环结束。

R0用于判断执行何种模式,每按一次后RO 加一,第四次时就将R0和PSW.5清零,这样程序就又回到了基础部分的循序执行。

用C语言编写程序实现通过按键使LED灯周期闪烁

用C语言编写程序实现通过按键使LED灯周期闪烁

用C语言编写程序实现通过按键使LED灯周期闪烁(2010-02-24 21:12:44)标签:循环闪烁周期led灯按键杂谈一、设计题目二、程序功能:开机复位后,LED0到LED7全部点亮,所有LEDPort持续2S后熄灭,然后等待按键,按0键LED7以0.8S周期闪烁,按1键LEDPort以1S周期闪烁。

三、总体设计思想用中断方式实现定时器的定时,然后通过键盘中断程序实现通过对按键的操作来实现相应的周期闪烁。

在我编写的实验程序中我用到了定时器中断和外部中断。

程序共分为两个模块,一个为定时器模块,一个为键盘中断程序模块,在主函数中,首先实现所有LEDPort点亮,然后通过中断方式实现定时2S,在定时器num==20时,设定全局变量为标志位flag=1,然后再主函数中设定条件,通过标志位的变化实现所有LEDPort持续2S后熄灭。

然后进入循环,等待按键,在按键中断服务程序中使用switch语句实现通过改变num1的值来实现LED7的闪烁周期。

设定标志位b=0,在主函数中使用if语句通过判断b的值来改变LED7的亮灭情况,同时相应的b值会取反。

四、程序具体实现实验要求开机复位后,LED0到LED7全部点亮2S后熄灭。

在主函数中使用LEDPort=0x00;这条语句实现所有灯都亮,使用中断方式实现定时器定时2S,因为实验要求20ms溢出,所以设定num=100,在定时器中断服务程序中使用if语句判断条件,当num加到100,也就是说2S时间到时,执行flag=1;语句(先设定全局变量flag=0)。

然后在主函数中使用while语句规定只有在flag=0时才执行所有LEDPort点亮的操作。

2S时间到后,所有灯熄灭。

然后进入while循环,等待用户按键。

用户按键后,通过使用switch语句,实验按0键,num1=20,按1键,num1=50,。

而在主函数中,当按下0键或者1键时,num1就有了固定的值,通过if语句判断是否到达所要求的时间后,执行相应操作。

累计定时中断次数使LED灯闪烁

累计定时中断次数使LED灯闪烁

累计定时中断次数使LED灯闪烁。

#include "REG52.H"#define const_time_level 200void initial_myself();void initial_peripheral();void delay_long(unsigned int uiDelaylong);void led_flicker();void T0_time(); //定时中断函数sbit led_dr=P3^5;unsigned char ucLedStep=0; //步骤变量unsigned int uiTimeCnt=0; //统计定时中断次数的延时计数器void main(){initial_myself();delay_long(100);initial_peripheral();while(1){led_flicker();}}void led_flicker() ////第三区LED闪烁应用程序{switch(ucLedStep){case 0:if(uiTimeCnt>=const_time_level) //时间到{ET0=0; //禁止定时中断uiTimeCnt=0; //时间计数器清零ET0=1; //开启定时中断led_dr=1; //让LED亮ucLedStep=1; //切换到下一个步骤}break;case 1:if(uiTimeCnt>=const_time_level) //时间到{ET0=0; //禁止定时中断uiTimeCnt=0; //时间计数器清零ET0=1; //开启定时中断led_dr=0; //让LED灭ucLedStep=0; //返回到上一个步骤}break;}}void T0_time() interrupt 1{TF0=0; //清除中断标志TR0=0; //关中断if(uiTimeCnt<0xffff) //设定这个条件,防止uiTimeCnt超范围。

实验三流水灯实验(io口和定时器实验)

实验三流水灯实验(io口和定时器实验)

实验三流水灯实验(I/O口和定时器实验)一、实验目的1.学会单片机I/O口的使用方法和定时器的使用方法;2.掌握延时子程序的编程方法、内部中断服务子程序的编程方法;3.学会使用I/O口控制LED灯的应用程序设计。

二、实验内容1.控制单片机P1口输出,使LED1~LED8右循环轮流点亮(即右流水),间隔时间为100毫秒。

2.控制单片机P1口输出,使LED1~LED8左循环轮流点亮(即左流水),间隔时间为100毫秒。

3.使用K1开关控制上面LED灯的两种循环状态交替进行;4. 用定时器使P1口输出周期为100ms的方波,使LED闪烁。

5.使用定时器定时,使LED灯的两种循环状态自动交替,每一种状态持续1.6秒钟(选作)。

三、实验方法和步骤1.硬件电路设计使用实验仪上的E1、E5和E7模块电路,把E1区的JP1(单片机的P1口)和E5区的8针接口L1~L8(LED的驱动芯片74HC245的输入端)连接起来,P1口就可以控制LED 灯了。

当P1口上输出低电平“0”时,LED灯亮,反之,LED灯灭。

E7区的K1开关可以接单片机P3.0口,用P3.0口读取K1开关的控制信号,根据K1开关的状态(置“1”还是置“0”),来决定LED进行左流水还是右流水。

综上,画出实验电路原理图。

2.程序设计实验1和实验2程序流程图如图3-1实验3程序流程图如图3-2所示。

图3-1 实验1,2程序流程图图3-2 实验3程序流程图实验4程序流程图如图3-3,3-4所示。

实验5程序流程图如图3-5,3-6所示。

图3-5 实验5主程序流程图图3-6 定时器中断服务子程序流程图图3-4 定时器中断服务子程序流程图图3-3 实验4主程序流程图编程要点:(1)Pl,P3口为准双向口,每一位都可独立地定义为输入或输出,在作输入线使用前,必须向锁存器相应位写入“1”,该位才能作为输入。

例如:MOV P1,A; P1口做输出MOV P1,#0FFHMOV A,P1;P1口做输入SETB P3.0MOV C,P3.1;从P3.1口读入数据(2)每个端口对应着一个寄存器,例:P1→90H(P1寄存器地址);P3→B0H(P3寄存器地址);寄存器的每一位对应着一个引脚,例:B0H.0→P3.0(3)对寄存器写入“0”、“1”,对应的外部引脚则输出“低电平”、“高电平”。

定时器实现led灯闪烁原理(一)

定时器实现led灯闪烁原理(一)

定时器实现led灯闪烁原理(一)定时器实现LED灯闪烁原理引言•LED灯闪烁是电子设备中常见的功能之一,它可以用于指示设备运行状态、传递信息等。

•实现LED灯闪烁最常用的方法之一是利用定时器。

什么是定时器•定时器是一种计时设备,它可以在设定的时间间隔内进行周期性的计时操作。

•在单片机和嵌入式系统中,定时器通常由硬件实现,提供了准确和可靠的计时功能。

定时器的原理•定时器的基本原理是利用一个高频的时钟源来驱动计时器计数器的计数。

•当计数器的值达到设定的阈值时,会产生一个中断信号,这个中断信号可以用来触发相应的事件。

•在LED灯闪烁的场景中,我们可以利用定时器的中断信号来周期性地改变LED灯的状态,从而实现闪烁效果。

实现LED灯闪烁的步骤1.设置定时器的时钟源和计数值。

2.配置定时器的工作模式和中断使能。

3.在中断处理函数中编写LED灯状态的改变逻辑。

4.启动定时器,使其开始计时。

设置定时器的时钟源和计数值•定时器的时钟源一般来自于MCU的系统时钟或外部晶振。

•时钟源的选择和计数值的设定决定了定时器的计时精度和闪烁频率。

•一般情况下,计数值越大,闪烁频率越低,计数值越小,闪烁频率越高。

配置定时器的工作模式和中断使能•定时器一般提供多种工作模式,如定时器模式、计数器模式等。

•在LED灯闪烁的场景中,我们需要选择定时器模式,并使能定时器的中断功能。

中断处理函数中编写LED灯状态的改变逻辑•中断处理函数是定时器中断发生时自动调用的函数。

•在中断处理函数中,我们可以编写LED灯状态的改变逻辑。

•可以通过改变LED的电平状态来实现LED的闪烁效果。

启动定时器,使其开始计时•在完成以上步骤后,我们需要启动定时器,使其开始计时。

•定时器会按照设定的计数值进行计时,当计时器的值达到设定的阈值时,会触发中断信号。

总结•通过配置定时器的时钟源、计数值和工作模式,以及编写中断处理函数中的LED灯状态改变逻辑,我们可以实现LED灯的闪烁效果。

定时器控制led灯闪烁实验报告

定时器控制led灯闪烁实验报告

定时器控制led灯闪烁实验报告实验目的:掌握使用定时器控制LED灯闪烁的方法,了解定时器的工作原理以及其在嵌入式系统中的应用。

实验材料:1. MCU开发板2. LED灯3. 面包板4. 连接线5. 电源实验步骤:1. 连接电路:将LED的正极连接至MCU开发板的GPIO口,将LED的负极连接至地线。

2. 编写程序:使用适当的程序开发工具,编写程序并上传至MCU开发板。

程序中应包括以下内容:- 初始化定时器:设置定时器的工作模式、计数器的初始值和计数器的预设值。

- 打开定时器中断:使能定时器中断,并设置中断优先级。

- 配置GPIO口:将使用的GPIO口配置为输出模式。

- 进入主循环:在主循环中不断检测定时器中断标志位,若中断发生,则将GPIO口状态翻转,从而控制LED的闪烁。

3. 连接电源:将MCU开发板连接至电源,确保系统正常运行。

4. 运行实验:观察LED灯是否按照预期进行闪烁,如果有问题,可检查代码和电路连接是否正确,并进行调试。

实验结果与分析:根据实验步骤进行实验后,LED灯应该按照预期进行闪烁。

定时器的中断周期决定了LED的闪烁频率,可以通过调整定时器的计数器值来改变LED闪烁的频率。

通过这个实验,我们可以掌握使用定时器控制LED灯闪烁的方法,并了解了定时器在嵌入式系统中的应用。

实验拓展:1. 实现呼吸灯效果:通过调整定时器的计数器值和PWM功能,使得LED灯的亮度逐渐增加然后逐渐减小,形成呼吸灯效果。

2. 多LED控制:使用多个GPIO口和定时器,控制多个LED灯的闪烁效果,可以实现不同频率、不同亮度的LED灯组合效果。

3. 控制其他外设:除了LED灯,定时器还可以用来控制其他外设,比如蜂鸣器、电机等,可以进行相应的实验拓展。

定时器控制led灯闪烁实验报告

定时器控制led灯闪烁实验报告

定时器控制led灯闪烁实验报告实验目的:学习使用定时器控制LED灯闪烁。

实验器材:Arduino UNO开发板、面包板、杜邦线、1个LED灯、220Ω电阻器。

实验原理:在Arduino开发板中,有三个可以设置的定时器,分别是Timer0、Timer1和Timer2。

定时器的作用就是在指定时间间隔内进行一定操作。

在本实验中,我们使用Timer0来控制LED灯的闪烁。

实验步骤:1. 连接电路。

将LED灯通过220Ω电阻器与Arduino开发板的数字口Pin13相连。

2. 编写程序。

下面是本实验的程序代码:int ledPin=13;void setup() {pinMode(ledPin, OUTPUT);//使用Timer0控制TCCR0B |= (1<<CS02) | (1<<CS00); //设置预扫频率为1024 }void loop() {static boolean output = LOW;static unsigned long previousMillis = 0;unsigned long currentMillis = millis();if (currentMillis - previousMillis >= 1000) { //闪烁周期为1spreviousMillis = currentMillis;if (output == LOW)output = HIGH;elseoutput = LOW;digitalWrite(ledPin, output);}}3. 上传程序。

将编写好的程序上传至Arduino UNO开发板。

4. 实验结果。

当我们打开串口监视器时,LED灯会每隔1秒钟闪烁一次。

实验结论:通过使用定时器控制LED灯的闪烁,我们学习到了如何使用Arduino开发板的Timer0功能,掌握了定时器的使用方法,进一步加深了对Arduino的理解。

C语言使用定时器的方法控制LED灯以1S的速度闪亮

C语言使用定时器的方法控制LED灯以1S的速度闪亮

C语言使用定时器的方法控制LED灯以1S的速度闪亮最近因为赶不上提高班的进度,老师给的教程总是断断续续的,所以我打算跟11月1号通过考试的网友们一起学习,呵呵,这也是我一教训来着,在三维里学习要坚持一步一个脚印,坚持必有奇迹,但也要跟得上大家,以后再忙也要努力实现计划了,不能再像这次一样,因为所谓的考试落下了好几堂课,不过也没有关系,能够吸取点教训总是好的。

我可以先给自己点时间多学些其它的基础知识。

今天开始学单片机的计数器了,呵呵,可能是一直因为用C语言编程序我定时老是定不准的原因,当得知学会定时/计数器后可以让单片机C语言定时准确后,我感觉学它真的很有动力,虽然编一个简单的程序也花了我好长时间,但编出来的感觉却是那么的爽快,我觉得要学会定时/计数器,关键是要学会编程控制 TCOM,TMOD,及TH和TL吧。

主要是TH和TL的准确运算。

还有就是完时以后怎么样让其跟循环语句配合使用。

今天所编的程序是利用单片机定时器控制LED灯以1S 的速度闪烁,我的晶振是12MHZ的,首先是让计时器0.02S进行一次溢出,使TF1=1,其次是利用I++循环50次,加起来为1S。

程序如下: #include;sbit LED = P1^2;void main(){unsigned char i;TMOD |= 0x10;TMOD &= 0xdf;TH1 = 0xb1;TL1 = 0xdf;TCON |= 0x40;while(1){if(TF1==1){TF1 = 0;TH1 = 0xb1;TL1 = 0xdf;i++;if(i==50){i=0;LED=~LED;}}}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档