|
本帖最后由 KeepYn 于 2021-6-20 18:54 编辑
配置定时器0的定时模式,控制点亮LED灯闪烁
实现现象为开发板上的红蓝绿LED灯交替闪烁
以下代码经过实际验证
艾克姆科技STC15W4K64的一块系统开发板
话不多说,直接上代码(模块化)
主函数代码如下
#include "timer.h"
void main()
{
unsigned char time = 0; //定义计数次数的数据类型
P0M0 = 0; P0M1 =1; //配置P0为准双向模式
Timer0_Init(); //调用初始化函数,初始化定时器0
while(1)
{
if(TF0 == 1) //T0溢出标志位,溢出后硬件置 1 (检测定时器是否溢出)
{
TF0 = 0; //软件查询,软件清 0
time++; //记录溢出的次数
if(time == 30) //0.3s
{ LED1 = 1;
LED2 = 1;
LED0 = 0;
}
if(time == 60) //0.6s
{ LED0 = 1;
LED2 = 0;
}
if(time == 90) //0.9s
{ LED2 = 1;
LED1 = 0;
time = 0;
}
}
}
}
有关定时器的点C代码如下
#include "timer.h"
void Timer0_Init(void) //溢出定时的时间为10ms
{
TMOD = 0X00; //工作模式寄存器,设置为启动禁止仅由TR0控制,设置为定时模式,工作模式设置为模式0
TH0 = 0XDC; //给加法计数器附初值 0XDC(65536-9213)/256
TL0 = 0X00; // (65536-9213)%256
TR0 = 1; //TR0 T0的运行控制位,等于1开始计数
}
```
定时器点H代码如下
#ifndef __TIMER_H__
#define __TIMER_H__
#include <STC15W.h> //15单片机头文件
sbit LED0 = P0^5; //LED灯的位定义(蓝)
sbit LED1 = P0^6; // 绿
sbit LED2 = P0^7; // 红
void Timer0_Init(void);
#endif
以下是验证图展示
|
评分
-
查看全部评分
|