导航:首页 > 操作系统 > 单片机矩阵键盘改中断

单片机矩阵键盘改中断

发布时间:2023-08-01 16:20:09

⑴ 求个单片机矩阵键盘(4*4)中断(记得要中断)的C语言程序。。求高手自己写个啊

很简单的啊,不太清楚你的电路图,我把主要程序写一下:

#include<reg52.h>
unsigned char flag=0;//设置flag作为标志位,初值为0,一旦产生中断,将其置1
void main()
{
EA=1;//开总中断
EX0=1;//开外部中断0 ,假设是由P3.2产生的中断
IT0=1;//设置产生中断的方式,这是表示下降沿触发
P0=0X0F;//假设矩阵键盘接P0口,给所有列线低电平,所有行线高电平
while(1)
{
if(flag==1) //这个是表示,如果中断不产生,下面的程序不会运行,只有中断了,才会键盘扫描
{
按键扫描程序,这个我就不写了,写法有很多啦
}
数码管显示程序,这个我也不写了,不晓得你是什么电路图
}
}

void scan() interrupt 0
{
flag=1;//表示,一旦中断产生了,将flag置1
}

希望对你有用,呵呵

⑵ 怎样用3*4矩阵键盘,改变51单片机程序里的数据

//考虑易读,使用3个标志
char flag=0; //修改状态=1
char f_change=0; //日期修改标志=1,时间修改标志=2,var修改标志=3
char num_on=0; //数字键盘

//按键:
//11=修改, 10=退出修改
//1=date,2=time,3=var为多功能键,必须使用num_on来切换
//按键还需有个keydown()判断键是否按下

/*****************************************************/
//判断键是否按下
/*****************************************************/
int keydown(void)
{

}
void proc_key(void)
{
switch(f_change)
{
case 1:funDate(K);break;
case 2:funTime(K);break;
case 3:funVar(K);break;
default:break;
}
}
main()
{
.....
while(1)
{
if(keydown())
{
K=keyscan();
switch(K)
{

case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
if(num_on)
{
proc_key();
}
break;
case 1:
case 2:
case 3:
if(num_on)
{
proc_key();break;
}

if(!f_change && flag)
{
f_change=K;
num_on = 1;
}
break;
case 10:f_change=0;flag=0;break; //结束修改
case 11:f_change=0;flag=1;break;
default:break;
}
}
}
}

⑶ 用亚龙单片机实训装置,通过51单片机控制机械手,我把矩阵键盘的键盘扫描程序放在定时器中断里,

你放到中断里可能会出现这样的情况,程序运行到键盘检查段时候,你没有设置跳出中断,这样说吧!程序在扫描键盘时候需要有键盘返回的值,当你键盘没有任何反应(没去按它)它就一直在检查检查,就没有跳出中断,所以你的机械手死在了这个无限循环的检查中。这样设置,中断计时,到点了中断一下检查一下键盘值,检查完后马上跳出来让MCU去执行其他程序段。

⑷ 求MSP430单片机4X4矩阵键盘的中断扫描程序

//msp430F149
4*4矩阵键盘P1口中断扫描
#include<msp430x14x.h>
#define
KEY_DIR
P1DIR
#define
KEY_OUT
P1OUT
#define
KEY_IN
P1IN
#define
KEY_IE
P1IE
#define
KEY_IES
P1IES
#define
KEY_IFG
P1IFG
/***************全局变量***************/
unsigned
char
Key_Val;
//存放键值
void
CtrlKey(unsigned
char
sw);
//控制键盘开关//sw=0关
sw=1开
/*******************************************
函数名称:Init_Keypad

能:初始化扫描键盘的IO端口

数:无
返回值
:无
********************************************/
void
Init_Keypad(void)
{
KEY_DIR
=
0x0f;
//P1.0~P1.3设置为输出状态,P1.4~P1.7输入
状态(上拉H)
KEY_OUT=0;
KEY_IES
=0xf0;
//P1.4~P1.7允许中断
KEY_IE
=0xf0;
//P1.4~P1.7下降沿触发中断
KEY_IFG=0;
//中断标志清0
Key_Val
=
0;
}
/*******************************************
函数名称:Check_Key

能:扫描键盘的IO端口,获得键值

数:无
返回值
:无
********************************************/
//p14\5\6\7
接上拉电阻
/***************************************
key_Val
对应键值
列:[p14]
[p15]
[p16]
[p17]




行:
[p13]→
1
2
3
4
[p12]→
5
6
7
8
[p11]→
9
10
11
12
[p10]→
13
14
15
16
***************************************/
void
Check_Key(void)
{
unsigned
char
row
,col,tmp1,tmp2;
unsigned
char
keymap[]
=
{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};//设置键盘逻辑键值
与程序计算键值的映射
tmp1
=
0x08;
for(row
=
0;row
<
4;row++)
//行扫描
{
KEY_OUT
=
0x0f;
//P1.4~P1.7输出全1
KEY_OUT
-=
tmp1;
//P1.4~p1.7输出四位中有一个为0
tmp1
>>=1;
if((KEY_IN
&
0xf0)<0xf0)
//是否P1IN的P1.0~P1.3中有一位为0
{
tmp2
=
0x10;
//
tmp2用于检测出哪一位为0
for(col
=
0;col
<
4;col++)
//
列检测
{
if((KEY_IN
&
tmp2)
==
0x00)
//
是否是该列,等于0为是
{
Key_Val
=
keymap[row*4
+
col];
//
获取键值
return;
//
退出循环
}
tmp2
<<=
1;
//
tmp2右移1位
}
}
}
}
/*******************************************
函数名称:delay

能:延时约15ms,完成消抖功能

数:无
返回值
:t=
tmp*5*clk
根据使用时钟调整tmp值
********************************************/
void
delay(void)
{
unsigned
int
tmp;
for(tmp
=
12000;tmp
>
0;tmp--);
}
/*******************************************
函数名称:Key_Event

能:检测按键,并获取键值

数:无
返回值
:无
********************************************/
void
Key_Event(void)
{
unsigned
char
tmp;
KEY_OUT
=0;
//
设置P1OUT全为0,等待按键输入
tmp
=
KEY_IN;
//
获取
p1IN
if((tmp
&
0xf0)
<
0xf0)
//如果有键按下
{
delay();
//消除抖动
Check_Key();
//
调用check_Key(),获取键值
}
}
/*********************************************************************
控制打开或者关闭键盘中断
SW=
0:关闭;
ELSE:打开
*********************************************************************/
void
CtrlKey(unsigned
char
sw)
{
if(sw==0)
KEY_IE
=0;
//关闭端口中断
else
KEY_IE
=0xf0;
//打开端口中断
}
/*端口1按键中断*/
#pragma
vector=PORT1_VECTOR
__interrupt
void
Port(void)
{
if((KEY_IFG&0xf0)!=0)
{
Key_Event();
if(Key_Val!=0)
//键值!=0有键按下
{
CtrlKey(0);
//关键盘中断
}
}
KEY_IFG=0;KEY_OUT=0;
//清中断标志
}

阅读全文

与单片机矩阵键盘改中断相关的资料

热点内容
如何让软件在多个安卓系统上运行 浏览:569
java判断半角 浏览:878
java判断正负 浏览:318
刷头条程序员的日常 浏览:102
吉林程序员吐槽 浏览:243
单片机温度范围 浏览:419
程序员为什么素质低 浏览:897
可爱的程序员小姐姐 浏览:145
服务器上网站的地址 浏览:798
苹果平板如何找到app资源库 浏览:321
阿里云可以云服务器地址 浏览:249
熊猫绘画app如何导入图片 浏览:555
如何自己编辑手机app 浏览:924
程序员那么可爱带的项链 浏览:532
安卓系统导航mic什么意思 浏览:192
编译sdk如何输出bin文件 浏览:677
如何用html5开发app 浏览:142
怎么隐藏苹果的app 浏览:326
上海積架空气压缩机 浏览:457
51单片机换行 浏览:738