单片机应用:定时闪烁的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;   // 重置计数器
    }
}
相关推荐
cjy_Somnr3 小时前
keil5报错显示stm32的SWDIO未连接不能烧录
stm32·单片机·嵌入式硬件
Lay_鑫辰4 小时前
西门子诊断-状态和错误位(“轴”工艺对象 V1...3)
服务器·网络·单片机·嵌入式硬件·自动化
无垠的广袤6 小时前
【工业树莓派 CM0 NANO 单板计算机】本地部署 EMQX
linux·python·嵌入式硬件·物联网·树莓派·emqx·工业物联网
雲烟8 小时前
嵌入式设备EMC安规检测参考
网络·单片机·嵌入式硬件
泽虞8 小时前
《STM32单片机开发》p7
笔记·stm32·单片机·嵌入式硬件
田甲8 小时前
【STM32】 数码管驱动
stm32·单片机·嵌入式硬件
up向上up9 小时前
基于51单片机垃圾箱自动分类加料机快递物流分拣器系统设计
单片机·嵌入式硬件·51单片机
纳祥科技18 小时前
Switch快充方案,内置GaN,集成了多个独立芯片
单片机
单片机日志19 小时前
【单片机毕业设计】【mcugc-mcu826】基于单片机的智能风扇系统设计
stm32·单片机·嵌入式硬件·毕业设计·智能家居·课程设计·电子信息
松涛和鸣20 小时前
从零开始理解 C 语言函数指针与回调机制
linux·c语言·开发语言·嵌入式硬件·排序算法