题目
:使用汇编或者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