当前位置: 首页 > article >正文

单片机应用:定时闪烁的LED小灯的实现

一、STC89C52单片机

STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

具有以下标准功能:8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。

二、代码实现

在这里插入图片描述

#include<reg52.h>

sbit LED = P0^0;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

unsigned int counter = 0;

void Timer0_Init() {
    TMOD |= 0x01;    // 设置定时器0为模式1
    TH0 = 0x3C;      // 50ms定时初值(12MHz晶振)
    TL0 = 0xB0;
    ET0 = 1;         // 允许定时器0中断
    EA = 1;          // 开启总中断
    TR0 = 1;         // 启动定时器
}

void main()
{
    ENLED = 0;
    ADDR3 = 1;
    ADDR2 = 2;       // 注意:这里的ADDR2被赋值为2是错误的,应为0或1,因为sbit类型只能表示单个位
    ADDR1 = 1;
    ADDR0 = 0;

    Timer0_Init();
    LED = 0;         // 初始状态,LED关闭
    while(1);
}

void Timer0_ISR() interrupt 1 {
    TH0 = 0x3C;      // 定时器0中断服务程序,重装初值以维持50ms定时
    TL0 = 0xB0;
    if (++counter >= 20) { // 每50ms增加一次计数器,达到20次即1秒时翻转LED状态
        LED = ~LED;    // 翻转LED状态,实现LED闪烁
        counter = 0;   // 重置计数器
    }
}

在这里插入图片描述


http://www.kler.cn/a/571819.html

相关文章:

  • 非平衡数据的处理
  • DeepSeek本地接口调用(Ollama)
  • 【一文学会 HTML】
  • 基于单片机的可燃气体火灾报警器的设计与实现
  • 2.反向传播机制简述——大模型开发深度学习理论基础
  • 如何将飞书多维表格与DeepSeek R1结合使用:效率提升的完美搭档
  • 【每日学点HarmonyOS Next知识】网络请求回调toast问题、Popup问题、禁止弹窗返回、navigation折叠屏不显示返回键、响应式布局
  • 匹配HTML标签中 href 属性的正则表达式
  • 开源向量数据库Milvus简介
  • 公司网络安全组织结构
  • rnmapbox
  • 单例模式记录
  • 信贷风控系统架构设计
  • 厦门大学第3弹:DeepSeek大模型及其企业应用实践(150页PPT,企业人员的大模型宝典)
  • 深度学习神经网络分类原理
  • 串口通讯基础
  • javaweb自用笔记:Vue
  • 【朝夕教育】《鸿蒙原生应用开发从零基础到多实战》004-TypeScript 中的泛型
  • 【MATLAB源码-第269期】基于matlab的鱼鹰优化算法(OOA)无人机三维路径规划,输出做短路径图和适应度曲线.
  • 显式 GC 的使用:留与去,如何选择?