利用定时器控制LED灯闪烁
- 格式:doc
- 大小:20.50 KB
- 文档页数:2
《微机实验》报告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灯周期闪烁(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灯闪烁。
#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超范围。
实验三流水灯实验(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灯闪烁的步骤1.设置定时器的时钟源和计数值。
2.配置定时器的工作模式和中断使能。
3.在中断处理函数中编写LED灯状态的改变逻辑。
4.启动定时器,使其开始计时。
设置定时器的时钟源和计数值•定时器的时钟源一般来自于MCU的系统时钟或外部晶振。
•时钟源的选择和计数值的设定决定了定时器的计时精度和闪烁频率。
•一般情况下,计数值越大,闪烁频率越低,计数值越小,闪烁频率越高。
配置定时器的工作模式和中断使能•定时器一般提供多种工作模式,如定时器模式、计数器模式等。
•在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灯闪烁。
实验器材: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的速度闪亮最近因为赶不上提高班的进度,老师给的教程总是断断续续的,所以我打算跟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;}}}}。
CC2530学习路线-基础实验-定时器控制LED灯亮灭(3)⽬录1. 前期预备知识1.1 定时器中断触发本次实验需关注的中断寄存器。
在本次实验中,分别会使⽤T1和T3定时器完成功能,所以我们需要注意上图中标注出的中断寄存器。
T1定时器:16位定时器(065535)。
T3定时器:8位定时器(0255)1.2 相关寄存器注:⼀下只给出实验中新出现的寄存器,并不是本次实验需⽤到的所有寄存器;想了解其它寄存器作⽤及功能请看之前的基础实验⽂档,或查看CC2530中⽂数据⼿册。
寄存器名称作⽤寄存器描述T1CTL (0xE4)定时器1的控制和状态T1CTL (bit 3~2) 为分频器划分值,具体值如下:00:标记频率/101:标记频率/810:标记频率/3211:标记频率/128T1CTL (bit 1~0) 为选择定时器1模式00:暂停运⾏01:⾃由运⾏10:模,从0x0000到T1CC0反计数11:正计数/倒计数,从0x0000到T1CC0反复计数并且从T1CCO倒计数到0x000T1STAT (0xAF)定时器1 状态bit5:定时器计数器溢出中断标志bit4:定时器1通道4中断标志bit3:定时器1通道3中断标志bit2:定时器1通道2中断标志bit1:定时器1通道1中断标志bit0:定时器1通道0中断标志IEN1 (0xB8)中断使能 1IEN1寄存器中我们只使⽤了bit1,bit3所在的功能,bit1 : T1计时器中断使能bit3 : T3计时器中断使能TIMIF (0xD8)定时器1/3/4中断屏蔽/标志TIMIF我们这⼀次实验只⽤到了bit6为定时器1溢出中断屏蔽IRCON (0xC0)中断标志4bit1:定时器1中断标志。
当定时器1中断发⽣时设为1并且当CPU向量指向中断服务例程时清除。
0:⽆中断未决1:中断未决T3CTL (0xCB)定时器3的控制和状态bit[7:5] : 定时器时钟分频倍数选择:000:不分频; 001:2分频; 010:4分频011:8分频; 100:16分频; 101:32分频110:64分频; 111:128 分频.bit4 : T3 起⽌控制位bit3 : 溢出中断掩码 0:关溢出中断 1:开溢出中断bit2 : 清计数值⾼电平有效Bit[1:0]T3模式选择00:⾃动重装 0x00-0xFF01:DOWN (从T3CC0 到0X00计数⼀次)10:模计数(反复从 0X00到T3CC0 计数)11:UP/DOWN(反复从0X00到T3CC0 计数再到0X00)T3CCTL0(0xCC)T3 通道 0 捕获/⽐较控制寄存器bit6: 通道0中断屏蔽 0:中断禁⽌ 1:中断使能bit5~3: T3 通道0 ⽐较输出模式选择bit2: T3 通道0模式选择: 0:捕获 1:⽐较bit1~0 T3 通道 0 捕获模式选择00 没有捕获 01 上升沿捕获10 下降沿捕获 11 边沿捕获T3CC0(0xCD)定时器 3 通道0捕获/⽐较值定时器捕获/⽐较值通道 0。
定时器控制LED灯闪烁实验报告引言本实验旨在通过使用定时器控制LED灯的闪烁,演示定时器在嵌入式系统中的应用。
通过本实验,我们可以深入了解定时器的工作原理以及如何使用它来实现各种定时功能。
实验器材•STM32F407开发板•杜邦线•LED灯•电阻实验步骤步骤一:准备工作1.将STM32F407开发板与计算机通过USB线连接。
2.在计算机上安装Keil软件,并打开工程文件。
3.将LED灯连接到开发板的GPIO引脚。
4.在Keil软件中配置GPIO引脚为输出模式。
步骤二:编写程序1.在程序的头文件中引入相应的库文件。
2.在代码中定义LED灯所连接的GPIO引脚。
3.初始化LED灯所连接的GPIO引脚,并设置为输出模式。
4.配置定时器的工作模式和频率。
5.启动定时器。
6.在无限循环中读取定时器的计数器值,并通过判断计数器值的大小来控制LED灯的亮灭状态。
步骤三:烧录程序1.将开发板与计算机通过USB线连接。
2.打开Keil软件,点击烧录按钮,将程序烧录到开发板中。
步骤四:实验验证1.确保程序已成功烧录到开发板中。
2.接通开发板的电源,观察LED灯的闪烁状态。
结果与分析经过实验验证,LED灯按照预定的频率闪烁,证明定时器工作正常。
通过调整定时器的频率,可以控制LED灯的闪烁速度,进一步验证了定时器的功能。
实验总结通过本实验,我们深入了解了定时器的工作原理,并成功实现了定时器控制LED灯的闪烁功能。
定时器在嵌入式系统中具有广泛的应用,可以用于定时中断、测量时间等功能。
在今后的学习和应用中,我们可以灵活运用定时器,提高嵌入式系统的稳定性和性能。
参考文献暂无参考文献。
附录无序列表:•STM32F407开发板•USB线•LED灯•电阻有序列表:1.准备工作1.将STM32F407开发板与计算机通过USB线连接。
2.在计算机上安装Keil软件,并打开工程文件。
3.将LED灯连接到开发板的GPIO引脚。
4.在Keil软件中配置GPIO引脚为输出模式。