您的位置 首页 应用

状态机方法按键扫描单片机程序

这是从http:www51heicombbsdpj-19294-1html这个单片机做的收音机里面截取出来的一个子程序,完整的代码和原理图可从原帖下载*–

这是从http://www.51hei.com/bbs/dpj-19294-1.html这个单片机做的收音机里边截取出来的一个子程序,完好的代码和adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=17&is_app=0&jk=66a41a025f30382d&k=%D4%AD%C0%ED%CD%BC&k0=%D4%AD%C0%ED%CD%BC&kdi0=0&luki=3&n=10&p=baidu&q=98059059_cpr&rb=0&rs=1&seller_id=1&sid=2d38305f21aa466&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1831118&u=http%3A%2F%2Fwww%2E51hei%2Ecom%2Fmcu%2F1974%2Ehtml&urlid=0″ id=”5_nwl” mpid=”5″ target=”_blank”>原理图可从原帖下载.

/*———–状况机方法按键扫描———–*/
/*————外部晶振为 12MHz———–*/
/*——–最终修正2011.02.26————–*/
#include “STC12C5620AD.H”
#include “Key_Scan.H”
#define Key_Mask 0x0f //屏蔽不必的按键,不必的按键用0屏蔽

/********************** 声明外部变量**************************/
extern uchar Work_Mode; //From Main.c
/********************** 按键扫描读取**************************/
uchar Key_Scan(void)
{
static uchar Key_State=0; //界说按键状况
uchar Key_Press;
uchar Key_Return=0x00; //界说按键回来的键值
Key_Press=Key_Input&Key_Mask;//读按键I/O电平
switch(Key_State)
{
case 0: // 按键初始态
if (Key_Press!=Key_Mask)
Key_State=1; // 键被按下,状况转换到键承认态
break;
case 1: // 按键承认态
if (Key_Press==Key_Input&Key_Mask)
{
Key_Return=Key_Press; // 按键仍按下且键值键值,按键承认输出
BEEP_DRV=1; // 驱动蜂鸣器
Key_State=2;// 状况转换到键开释态
}
else
Key_State=0;// 按键已抬起或改动,并转换到按键初始态
break;
case 2:
if (Key_Press==Key_Mask)
{
Key_State=0;//按键已开释,转换到按键初始态
BEEP_DRV=0;// 封闭蜂鸣器
}
else
if(Work_Mode==1)
{
Key_Return=Key_Press|0x09; // 只要调台形式而且只要>>| 和 |<< 才干连按
BEEP_DRV=0;// 封闭蜂鸣器
}
else
BEEP_DRV=0;// 封闭蜂鸣器
break;
}
return Key_Return;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/254853.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部