登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 按键消抖

[复制链接]
发表于 2019-1-22 21:45:48 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 单片机
学习安排: 按键消抖
开始时间: 2019-01-22
结束时间: 2019-01-22
#include<reg52.h>

sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit ENLED = P1^1;

sbit KEY4 = P2^3;
sbit KeyOut4 = P2^7;

unsigned char code LedChar[] = {     //真值表
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};

bit KeySta = 1;                      //当前按键状态

void main()
{
bit backup = 1;
unsigned char cnt = 0;

  P20 = 1;                           //DS5进行显示
  P21 = 0;
  P22 = 1;
  ENLED = 0;

TMOD = 0x01;                       //定时器0定时2ms
TH0 = 0xEA;
TL0 = 0x66;
TR0 = 1;
EA = 1;
ET0 = 1;           

KeyOut4 = 0;                         //KeyOut4输出低电平
P0 = LedChar[cnt];

while (1)
{
  if(KeySta != backup)
  {
   if(backup == 0)
   {
    cnt++;
    if(cnt >= 10)
    {
     cnt = 0;
    }
    P0 = LedChar[cnt];
   }
   backup = KeySta;
  }
}
}
void InterruptTime0() interrupt 1                //TO中断
{
static unsigned char keybuf = 0xFF;

TH0 = 0xEA;
TL0 = 0x66;
keybuf = (keybuf<<1)|KEY4;
if(keybuf == 0x00)
{
  KeySta = 0;
}
else if(keybuf == 0xFF)
{
  KeySta = 1;
}
else
{}
}

好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表