C51编程--用定时器定时检测按键的长按与短按开关LED灯

这篇博客介绍了如何使用C51编程在单片机上,通过定时器精确控制按键长按0.2秒和2秒分别开启和关闭LED灯。程序基于12MHz晶振,利用定时器中断检测按键状态,实现不同时间间隔的开关操作。
摘要由CSDN通过智能技术生成

题目:使用汇编或者C语言,编写一个单片机程序。

P2.0控制LED灯(0为亮,1为灭),P3.1为按键KEY(按下为0,不按下为1),实现按键长按0.2s后开灯,长按2s后关灯。时间需要准确,用定时器来实现。单片机晶振为12MHZ。

分析:使用定时器中断,在主循环中一直检测按键是否按下

 

程序如下:

#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit LED=P2^0;
sbit KEY=P3^1;
static uint i=0;

void Timer0Init()  //定时器0初始化
{
    TMOD |= 0x01; //模式1
    TMOD &= 0x0F;
    TH0 = (65536-1000)/256;
    TL0 = (65536-1000)%256;  //定时1ms
    EA=1;
    ET0=1;
    TR0=1; //T0中断溢出请求标志位
}

void delay (uint i) //延时函数
{
    while(i--);
}

void main()
{
    while(1) //一直检测按键是否按下  按下则进入中断
    {
        delay(1000);
        if(KEY==0)
        {
            delay(1000); //按键消抖
            if(KEY==0)
                Timer0Init(); //定时器0初始化 申请中断
        }
        else
        
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值