51单片机程序框架之组合按键
/****************************************************************************** 此程序是依据吴坚鸿程序框架,在普中51 A2单片机开发板上的程序练习 程序目标:按键组合键,按下后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_Debounce 40 //按键debounce time sbit LED=P2^0; sbit Key=P3^1; sbit Key2=P3^0; unsigned char Key_Handle=0; //按键值,按下组合键之后为1,LED取反 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 Key_CNT; static unsigned char Key_Lock; if ((0!=Key)||(0!=Key2)) { Key_CNT=0; Key_Lock=0; } else if (0==Key_Lock) { Key_CNT++; if (Key_CNT>Key_Debounce) { Key_Lock=1; Key_Handle=1; } } } void Key_Service() { if (0==Key_Handle) { return; } switch (Key_Handle) { case 1: LED=!LED; Key_Handle=0; break; } }
分类:
吴鸿坚程序框架在普中开发板的应用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)