定时中断键盘扫描

heavenxyf 2002-11-20 10:20:15
那位大虾有16键的定时中断扫描键盘程序(C程序),可否给小弟一个程序!谢谢!我现在有急用!当然8279的外部中断程序也可以,也是C程序,我想做一个参考!
我是新手!
...全文
288 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
heavenxyf 2002-12-03
  • 打赏
  • 举报
回复
谢谢上面的兄弟!感激涕零!
wyabc 2002-12-02
  • 打赏
  • 举报
回复
4*6键盘!
在t2中进行键盘扫描.可判断是否为连击按健.t2终端周期:1.5625ms
sbit KH0=P0^0;
sbit KH1=P0^1;
sbit KH2=P0^2;
sbit KH3=P0^3;


unsigned char KEY(void) //获得key值
{
static unsigned char KEY_i=0x40; //key扫描指针
unsigned char data ka;

if (KEY_i!=0x40) { KEY_i=_crol_(KEY_i,1);} //左移一位
else KEY_i=1;
OUTKEY=KEY_i;
ka=0;
if (KH0==1) ka=ka+1;
if (KH1==1) ka=ka+2;
if (KH2==1) ka=ka+4;
if (KH3==1) ka=ka+8;
if (ka==0x0f) return(0); //无按键按下
return(KEY_i*10+15-ka); //扫描到按键,返回键值
}


void KKEY(unsigned char key)
{
static unsigned char nk=0, //没有扫描到按键计数器
mk=0, //本次按键和前次按键不同计数器
yk=60, //单击到连击的延时计数器
pk; //前次键值

if (key==0) //若没有扫描到按键
{
if ((++nk)==15)
{ pk=0;nk=0;mk=0;yk=60;CSK=0;ECK=0;} //若连续15次(23ms)没有扫描到按键,初始化。
return; // 15次*1.5625ms
}
nk=0; //初始化没有扫描到按键计数器
if (CSK==0)
{
pk=key; //若是首次按键,保存键值到前次键值,作为下次按键的比较依据
CSK=1; //设为非首次按键
return;
}
if (pk!=key) //若扫描的键值和前次不同,
{ pk=0;nk=0;yk=60;CSK=0;ECK=0; //干扰抖动处理
return;
}
if (ECK==0) //确认为单击
{
// BEEP=0; //单击时,响铃
F_key(key); //按键处理
ECK=1; //连击标志
return;
}
if ((--yk)==0) //已经扫描到按键,开始计数连击按键计数器
{
yk=20; //修正连击按键时的延时计数器
F_key(key);
}
}

void F_key(unsigned char key) //确认按键后的处理
{
switch(key)
{
case 18: F_QIDONG();return; //Start按键,开始启动
}
}
你试试看!
heavenxyf 2002-12-01
  • 打赏
  • 举报
回复
哦!能给小弟一份资料吗?万分感谢!heavenwj@hotmail.com
  • 打赏
  • 举报
回复
我有,但是用的是东芝单片机,不知要否?C程序,4X4键盘,定时扫描.
Hermit 2002-11-29
  • 打赏
  • 举报
回复
单片机的话就有很多C了,AVRGCC,keilyC,AVRICC,IAR...
winskeeter 2002-11-29
  • 打赏
  • 举报
回复
是。keily c 吧
猛禽 2002-11-28
  • 打赏
  • 举报
回复
还是汇编好.^_^
heavenxyf 2002-11-24
  • 打赏
  • 举报
回复
当然是c语言了!汇编的很多,只是不太会改,所以想要点现成的东西作参考!
Hermit 2002-11-22
  • 打赏
  • 举报
回复
用什么C

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧