📄 key.c
字号:
/******************************************************************
本程序只供学习使用,未经作者许可,不得用于其它任何用途
欢迎光临天祥电子 www.txmcu.cn
*******************************************************************/
#include "Key.h"
#include "MyType.h"
#include "config.h"
volatile uint8 idata KeyCurrent,KeyOld,KeyNoChangedTime;
volatile uint8 idata KeyPress;
volatile uint8 idata KeyDown,KeyUp,KeyLast;
volatile uint8 KeyCanChange;
extern unsigned char s6,s7,s10,s11,s14,s15,s,again1,again2,again3,again4,again5,again6,pp,qq,rr,ss,tt,uu;
/********************************************************************
函数功能:定时器0初始化,用来做键盘扫描。
入口参数:无。
返 回:无。
备 注:无。
********************************************************************/
void InitTimer0(void)
{
TMOD&=0xF0;
TMOD|=0x01;
ET0=1;
TR0=1;
}
/*******************************************************************/
/********************************************************************
函数功能:键盘初始化
入口参数:无。
返 回:无。
备 注:无。
********************************************************************/
void InitKeyboard(void)
{
KeyIO=0xFF; //键盘对应的口设置为输入状态
KeyPress=0; //无按键按下
KeyNoChangedTime=0;
KeyOld=0;
KeyCurrent=0;
KeyLast=0;
KeyDown=0;
KeyUp=0;
InitTimer0(); //初始化定时器
KeyCanChange=1; //允许键值改变
}
/*******************************************************************/
/********************************************************************
函数功能:定时器0中断处理。
入口参数:无。
返 回:无。
备 注:22.1184M晶体约5ms中断一次。
********************************************************************/
void Timer0Isr(void) interrupt 1
{
//定时器0重装,定时间隔为5ms,加15是为了修正重装所花费时间
//这个值可以通过软件仿真来确定,在这里设置断点,调整使两次运行
//时间差刚好为5ms即可。
TH0=(65536-Fclk/1000/12*5+15)/256;
TL0=(65536-Fclk/1000/12*5+15)%256; //
if(!KeyCanChange)return; //如果正在处理按键,则不再扫描键盘
P3|=0x37;
lcden=0;
rs=1;
if(rxd==0)
{
s6=1;
again3=1;
}
if(rxd&again3)
{
again3=0;
rr=1;
}
if(txd==0)
{
s10=1;
again5=1;
}
if(again5&txd)
{
again5=0;
tt=1;
}
if(csda==0)
{
s14=1;
again1=1;
}
if((csda==1)&(again1==1))
{
pp=1;
again1=0;
}
lcden=1;
rs=0;
if(rxd==0)
{s7=1;
again4=1;
}
if(rxd&again4)
{
again4=0;
ss=1;
}
if(txd==0)
{
s11=1;
again6=1;
}
if(again6&txd)
{
again6=0;
uu=1;
}
if(csda==0)
{
s15=1;
again2=1;
}
if((csda==1)&(again2==1))
{
again2=0;
qq=1;
}
s=s6|s7|s10|s11|s14|s15|pp|qq|rr|ss|tt|uu;
}
/*******************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -