用51单片机中断编写的4x4键盘程序文档格式.docx
- 文档编号:18870509
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:7
- 大小:297.02KB
用51单片机中断编写的4x4键盘程序文档格式.docx
《用51单片机中断编写的4x4键盘程序文档格式.docx》由会员分享,可在线阅读,更多相关《用51单片机中断编写的4x4键盘程序文档格式.docx(7页珍藏版)》请在冰豆网上搜索。
SETBET0
SETBTR0
SETBET1
SETBTR1
SETBIT0
SETBIT1
SETBEX0
SETBEX1
xh:
movP1,#0feh
LcallDelay
movP1,#0fdh
LcallDelay
movP1,#0fbh
movP1,#0f7h
SJMPxh
ZD0:
JNBP1.0,dat1
JNBP1.1,dat2
JNBP1.2,dat3
JNBP1.3,dat4
dat1:
movP2,#06h
;
1
sjmpZD0R
dat2:
movP2,#5bh
2
dat3:
movP2,#4fh
3
dat4:
movP2,#66h
4
ZD0R:
reti
ZD1:
JNBP1.0,dat5
JNBP1.1,dat6
JNBP1.2,dat7
JNBP1.3,dat8
dat5:
movP2,#6dh
50110
sjmpZD1R
dat6:
movP2,#7dh
6
sjmpZD1R
dat7:
movP2,#07h
7
dat8:
movP2,#7fh
8
ZD1R:
TZD0:
JNBP1.0,dat9
JNBP1.1,dat0
JNBP1.2,dat10
JNBP1.3,dat11
dat9:
movP2,#6fh
9
dat0:
movP2,#3fh
sjmpZD0R
dat10:
movP2,#77h
A
dat11:
movP2,#7ch
B
TZD0R:
reti
TZD1:
JNBP1.0,dat12
JNBP1.1,dat13
JNBP1.2,dat14
JNBP1.3,dat15
dat12:
movP2,#39h
C
sjmpTZD1R
dat13:
movP2,#5eh
D
dat14:
movP2,#79h
E
dat15:
movP2,#71h
F
TZD1R:
Delay:
movr7,#10d
djnzr7,$
ret
end
二、C语言程序(扫描P1)
#include"
reg51.h"
intyu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
inti,j,k,time,temp,dat;
voiddelay(time)
{
while(time--)
for(i=0;
i<
120;
i++);
}
voidmain()
P2=0x40;
TMOD=0x66;
//设定定时计数器T0、T1为方式2计数模式
TH0=0xFF;
TL0=0xFF;
TH1=0xFF;
TL1=0xFF;
IE=0x8F;
//开总中断和定时计数器两个中断,两个外中断
IT0=1;
IT1=1;
//设置外中断为下降沿触发
TR0=1;
TR1=1;
//打开定时计数器开始计数
while
(1)
{
P1=0xfe;
delay
(1);
P1=0xfd;
P1=0xfb;
P1=0xf7;
}
voidintsvr0(void)interrupt0
using1
temp=P1;
switch(temp)
case0xfe:
key=0;
break;
case0xfd:
key=1;
case0xfb:
key=2;
case0xf7:
key=3;
default:
P2=yu[dat];
voidtimer0(void)interrupt1using1
if(temp==0xfe)
dat=4;
if(temp==0xfd)dat=5;
if(temp==0xfb)dat=6;
if(temp==0xf7)dat=7;
voidintsvr1(void)interrupt2using1
if(temp==0xfe)
dat=8;
if(temp==0xfd)dat=9;
if(temp==0xfb)dat=10;
if(temp==0xf7)dat=11;
voidtimer1(void)interrupt3using1
intdat;
key=12;
key=13;
key=14;
key=15;
}
/*************************************************************/
三、C语言(扫描P3的P3.0、P3.1、P3.6、P3.7)
从这个程序也可以看出51单片机I/O口没有方向性,输入输出都可读写,而且在一个寄存器中。
注意该程序对应电路图与上图的区别。
sbitpp0=P3^0;
sbitpp1=P3^1;
sbitpp2=P3^6;
sbitpp3=P3^7;
pp0=0;
delay(5);
pp0=1;
pp1=0;
pp1=1;
pp2=0;
pp2=1;
pp3=0;
pp3=1;
/*以上可用下列这段代替
P3=0xfe;
P3=0xfd;
P3=0xbf;
P3=0x7f;
*/
temp=P3;
switch(temp)
{
case0xfa:
dat=0;
case0xf9:
dat=1;
case0xbb:
dat=2;
case0x7b:
dat=3;
break;
if(temp==0xee)dat=8;
if(temp==0xed)dat=9;
if(temp==0xaf)dat=10;
if(temp==0x6f)dat=11;
voidintsvr1(void)interrupt2using3
if(temp==0xf6)dat=4;
if(temp==0xf5)dat=5;
if(temp==0xb7)dat=6;
if(temp==0x77)dat=7;
case0xde:
dat=12;
case0xdd:
dat=13;
case0x9f:
dat=14;
case0x5f:
dat=15;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 中断 编写 x4 键盘 程序