单片机应用:定时闪烁的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;   // 重置计数器
    }
}
相关推荐
fie88891 天前
基于51单片机的航模遥控器6通道接收机程序
单片机·嵌入式硬件·51单片机
bu_shuo1 天前
嵌入式硬件工程师VS单板硬件工程师
嵌入式硬件·电子工程师·单板硬件
llilian_161 天前
选择北斗导航卫星信号模拟器注意事项总结 北斗导航卫星模拟器 北斗导航信号模拟器
功能测试·单片机·嵌入式硬件·测试工具·51单片机·硬件工程
Yyq130208696821 天前
MH2457,‌国产 32 位屏驱 MCU‌芯片,支持‌1080P 高清显示‌与‌以太网通信‌,广泛应用于两轮车仪表盘及工控屏等领域
单片机·嵌入式硬件
爱吃程序猿的喵1 天前
南邮计科电工电子实验B《RLC串联谐振电路》实验报告
单片机·嵌入式硬件
独小乐1 天前
009.中断实践之实现按键测试|千篇笔记实现嵌入式全栈/裸机篇
linux·c语言·驱动开发·笔记·嵌入式硬件·arm
XINVRY-FPGA1 天前
XC7VX690T-2FFG1157I Xilinx AMD Virtex-7 FPGA
arm开发·人工智能·嵌入式硬件·深度学习·fpga开发·硬件工程·fpga
bubiyoushang8882 天前
利用STM32实现Modbus通信(RTU从机方案)
stm32·单片机·嵌入式硬件
cmpxr_2 天前
【单片机】常用设计模式
单片机·嵌入式硬件·设计模式
杰杰桀桀桀2 天前
4*4无时延矩阵键盘(非阻塞)--附代码链接
stm32·单片机·嵌入式硬件·矩阵·计算机外设·无时延矩阵键盘