首页 > 编程语言 >51单片机程序框架之按键单击

51单片机程序框架之按键单击

时间:2024-05-02 21:55:21浏览次数:22  
标签:Handle 单击 Key2 void 51 单片机 Key Lock Key1

/******************************************************************************
此程序是依据吴坚鸿程序框架,在普中51 A2单片机开发板上的程序练习
程序目标:按键单击,Key1按下,LED灯亮,Key2按下LED灭
*******************************************************************************/

include<REG51.H>

define Main_Fosc 12000000L //默认系统时钟12Mhz

define T1MS (65536-Main_Fosc/12/1000) //12分频下1ms定时器的装载值,n=t/T=t/(12/f)=0.001*f/12=f/12/1000

define Key_Filter_CNT 40 //按键debounce time

sbit LED=P2^0;
sbit Key1=P3^1;
sbit Key2=P3^0;
unsigned char Key_Handle=0; //按键值,没有按下时,默认为0
void Sys_Init(); //系统初始化
void Delay_Long(); //长延时,等待系统稳定
void Perpherial_Init(); //端口初始化
void Key_Scan(); //按键扫描函数
void Key_Service(); //按键响应函数

void main()
{
Sys_Init();
Delay_Long();
Perpherial_Init();
while (1)
{
Key_Service();
}

}

void Sys_Init()
{
TMOD=0X01; //定时器0模式1
TL0=T1MS;
TH0=T1MS>>8;
}

void Delay_Long()
{
unsigned char i,j;
for(i=0;i++;i<220)
{
for(j=0;j<220;j++)
;
}
}

void Perpherial_Init()
{
ET0=1;
TR0=1;
EA=1;
}

void Timer0_ISR() interrupt 1 //定时器0中断函数
{
TL0=T1MS;
TH0=T1MS>>8;
Key_Scan();
}

void Key_Scan()
{
static unsigned int Key1_cnt;
static unsigned char Key1_Lock;
static unsigned char Key2_Lock;
static unsigned int Key2_Cnt;

if (0!=Key1)
{
    Key1_cnt=0;
    Key1_Lock=0;
}
else if (0==Key1_Lock)
{
    Key1_cnt++;
    if (Key1_cnt>=Key_Filter_CNT)
    {
        Key_Handle=1;
        Key1_Lock=1;
    }
    
}

if (0!=Key2)
{
    Key2_Cnt=0;
    Key2_Lock=0;
}
else if (0==Key2_Lock)
{
    Key2_Cnt++;
    if (Key2_Cnt>=Key_Filter_CNT)
    {
        Key2_Lock=1;
        Key_Handle=2;
    }
    
} 

}

void Key_Service()
{
if (0==Key_Handle)
{
return;
}

switch (Key_Handle)
{
case 1:
    LED=0;
    Key_Handle=0;
    break;
case 2:
    LED=1;
    Key_Handle=0;
    break;
}

}

标签:Handle,单击,Key2,void,51,单片机,Key,Lock,Key1
From: https://www.cnblogs.com/boliuXun/p/18170615

相关文章

  • 长江存储PC411 512GB SSD实测:旗舰读写性能 温度表现逆天
    一、前言:搭载长江存储PC411512GBSSD的机械革命蛟龙16S不久前我们测试过某品牌的笔记本,其搭载的PCIe4.0SSD在高负载运行时温度轻松突破70度,导致性能下降了20%左右。对于笔记本而言,由于无法像台式电脑那样给SSD安装厚重的散热装甲,在搭载高性能PCIe4.0SSD时,很容易出现温度失......
  • acwing351
    https://www.acwing.com/activity/content/problem/content/9051/NOIP2007提高组T4。本题是加强版。题目描述设\(T=(V,E,W)\)是一个无圈且连通的无向图(也称为无根树),每条边带有正整数的权,我们称\(T\)为树网(treenetwork),其中\(V,E\)分别表示结点与边的集合,\(W\)表示各边......
  • ABC351
    Alink算出两个队分别得了几分,让木青队的总得分比高桥队多\(1\)即可。点击查看代码#include<bits/stdc++.h>usingnamespacestd;intgq,mq;signedmain(){ intx; for(inti=1;i<=9;++i){ cin>>x;gq+=x; } for(inti=1;i<=8;++i){ cin>>x;m......
  • 《自动机理论、语言和计算导论》阅读笔记:p215-p351
    《自动机理论、语言和计算导论》学习第11天,p215-p351总结,总计37页。一、技术总结1.constrainedproblem2.Fermat'slatstheoremFermat'sLastTheoremstatesthatnothreepositiveintegersa,bandcsatisfytheequationa^n+b^n=c^nforanyintegervalue......
  • 51单片机程序框架之跑马灯练习
    /******************************************************************************此程序是依据吴坚鸿程序框架,在普中51A2单片机开发板上的程序练习程序目标:LED以1HZ的频率闪烁*******************************************************************************/#include<......
  • 51单片机程序框架之LED闪烁_方法1
    /******************************************************************************此程序是依据吴坚鸿程序框架,在普中51A2单片机开发板上的程序练习程序目标:LED以1HZ的频率闪烁*******************************************************************************/#include<......
  • [atcoder 351] [F Double Sum] [线段树]
    解法,使用线段树。请看代码:importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.math.BigInteger;importjava.util.StringTokenizer;publicclassMain{staticclassSegmentNode{intleft;......
  • ABC351F
    F-DoubleSum题意简述Justit.思路1发现很像求正序对,但是需要具体数字计算。只考虑\(A_j-A_i>0\),那么我们把\(A_j,-A_i\)分开计算。考虑\(A_j\)被计算的清形,其实就是以它结尾的正序对个数。考虑\(-A_i\)被计算的清形,其实就是以它开头的正序对个数,翻转序列,转化为以......
  • ABC351E
    E-JumpDistanceSum题意简述Justit.思路兔子斜着走->国际象棋里的象->黑象只能到达黑格,白象只能到达白格(横纵坐标相加的奇偶性)。将点分成两组,则每组内的点之间都有答案。可以发现可以先朝着那个方向斜着走,然后超出的部分向着那个方向迂回是最优的。如图不难发现距离是......
  • ABC351讲解
    ABC351A:题意思路:直接按题意模拟,求出\(\SigmaA\)和\(\SigmaB\)再相减便是差,因为要获胜所以再\(+1\)即可。代码B:题意思路:直接按照题意\(N^2\)枚举即可。代码C:题意思路:直接按照题意模拟即可。代码D:请lrx讲解。F:题意思路:题意十分简单,就是求\(\Sig......