单片机程序设计4*4键盘输入系统~控制16个发光二极管
答案:6 悬赏:40 手机版
解决时间 2021-11-11 09:36
- 提问者网友:美人性情
- 2021-11-10 17:32
单片机程序设计4*4键盘输入系统~控制16个发光二极管
最佳答案
- 五星知识达人网友:你哪知我潦倒为你
- 2021-11-10 17:49
LINE EQU 30H
ROW EQU 31H
VAL EQU 32H
ORG 00H
START: MOV DPTR,#TABLE ;段码表首地址
MOV P2,#10H ;数码管显示初始化
LSCAN: MOV P3,#0F0H ;列线置高电平,行线置高电平
L1: JNB P3.0,L2 ;逐行扫描
LCALL DELAY
JNB P3.0,L2
MOV LINE,#00H ;存行号
LJMP RSCAN
L2: JNB P3.1,L3
LCALL DELAY
JNB P3.1,L3
MOV LINE,#01H ;存行号
LJMP RSCAN
L3: JNB P3.2,L4
LCALL DELAY
JNB P3.2,L4
MOV LINE,#02H ;存行号
LJMP RSCAN
L4: JNB P3.3,L1
LCALL DELAY
JNB P3.3,L1
MOV LINE,#03H ;存行号
RSCAN: MOV P3,#0FH ;行线列线电平互换
C1: JNB P3.4,C2 ;逐列扫描
MOV ROW,#00H ;存列号
LJMP CALCU
C2: JNB P3.5,C3
MOV ROW,#01H ;存列号
LJMP CALCU
C3: JNB P3.6,C4
MOV ROW,#02H ;存列号
LJMP CALCU
C4: JNB P3.7,C1
MOV ROW,#03H ;存列号
CALCU: MOV A,LINE ;根据行号和列号计算键值
MOV B,#04H
MUL AB
ADD A,ROW
MOV VAL,A ;存键值
MOVC A,@A+DPTR ;要据键值查段码
MOV P2,A ;输出段码显示
LJMP LSCAN
DELAY: MOV R6,#20
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
TABLE: DB 00H,01H,02H,03H,04H,05H,06H,07H
DB 08H,09H,0AH,0BH,0CH,0DH,0EH,0FH
END
应该能看得懂 不是很难的
ROW EQU 31H
VAL EQU 32H
ORG 00H
START: MOV DPTR,#TABLE ;段码表首地址
MOV P2,#10H ;数码管显示初始化
LSCAN: MOV P3,#0F0H ;列线置高电平,行线置高电平
L1: JNB P3.0,L2 ;逐行扫描
LCALL DELAY
JNB P3.0,L2
MOV LINE,#00H ;存行号
LJMP RSCAN
L2: JNB P3.1,L3
LCALL DELAY
JNB P3.1,L3
MOV LINE,#01H ;存行号
LJMP RSCAN
L3: JNB P3.2,L4
LCALL DELAY
JNB P3.2,L4
MOV LINE,#02H ;存行号
LJMP RSCAN
L4: JNB P3.3,L1
LCALL DELAY
JNB P3.3,L1
MOV LINE,#03H ;存行号
RSCAN: MOV P3,#0FH ;行线列线电平互换
C1: JNB P3.4,C2 ;逐列扫描
MOV ROW,#00H ;存列号
LJMP CALCU
C2: JNB P3.5,C3
MOV ROW,#01H ;存列号
LJMP CALCU
C3: JNB P3.6,C4
MOV ROW,#02H ;存列号
LJMP CALCU
C4: JNB P3.7,C1
MOV ROW,#03H ;存列号
CALCU: MOV A,LINE ;根据行号和列号计算键值
MOV B,#04H
MUL AB
ADD A,ROW
MOV VAL,A ;存键值
MOVC A,@A+DPTR ;要据键值查段码
MOV P2,A ;输出段码显示
LJMP LSCAN
DELAY: MOV R6,#20
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
TABLE: DB 00H,01H,02H,03H,04H,05H,06H,07H
DB 08H,09H,0AH,0BH,0CH,0DH,0EH,0FH
END
应该能看得懂 不是很难的
全部回答
- 1楼网友:夜余生
- 2021-11-10 22:39
自己看书
- 2楼网友:野慌
- 2021-11-10 21:43
简单倒是简单,要专门替你作好还是要点时间.
- 3楼网友:第四晚心情
- 2021-11-10 20:16
我这有C语言程序的 4*4键盘程序 和电路 要的 来个邮箱 qq:709672381
- 4楼网友:夜余生
- 2021-11-10 19:15
挺简单的一个东西,网上有大量的资料,这个都不自己做,平时不就白学了吗
- 5楼网友:罪歌
- 2021-11-10 18:20
1)P1.0-P1.3为4列,P1.4-P1.7为4行。
2)P0.1-P0.7连接1-8LED,P2.0-P2.7连接9-16LED。
3)P1初始值为0xf0,P1.0-P1.3同时连接到一个与非门接入到INT1口。
4)用外部中断1来触发按键扫描。
我画好了Proteus的图,已经和Proteus联调过,目前我的等级无法上传图片。
程序很简单,基本是自解释的。C的源程序如下:
#include
sbit L1=P1^0;
sbit L2=P1^1;
sbit L3=P1^2;
sbit L4=P1^3;
//中断服务程序
void keyinterrupt() interrupt 2
{
int t;
//延时软件消抖
t=5000;
while(t--);
if(INT1==1)
return;
EX1=0;
//扫描键值
P1=0xef;
if(L1==0){P0=0xfe;P2=0xff;} //按键盘key1
if(L2==0){P0=0xfd;P2=0xff;} //按键盘key2
if(L3==0){P0=0xfb;P2=0xff;} //按键盘key3
if(L4==0){P0=0xf7;P2=0xff;} //按键盘key4
P1=0xdf;
if(L1==0){P0=0xef;P2=0xff;} //按键盘key5
if(L2==0){P0=0xdf;P2=0xff;} //按键盘key6
if(L3==0){P0=0xbf;P2=0xff;} //按键盘key7
if(L4==0){P0=0x7f;P2=0xff;} //按键盘key8
P1=0xbf;
if(L1==0){P2=0xfe;P0=0xff;} //按键盘key9
if(L2==0){P2=0xfd;P0=0xff;} //按键盘key10
if(L3==0){P2=0xfb;P0=0xff;} //按键盘key11
if(L4==0){P2=0xf7;P0=0xff;} //按键盘key12
P1=0x7f;
if(L1==0){P2=0xef;P0=0xff;} //按键盘key13
if(L2==0){P2=0xdf;P0=0xff;} //按键盘key14
if(L3==0){P2=0xbf;P0=0xff;} //按键盘key15
if(L4==0){P2=0x7f;P0=0xff;} //按键盘key16
P1=0x0f;
EX1=1;
return;
}
void main(void)
{
IE=0;
EX1=1;
EA=1; //中断open
P1=0x0f;
P0=0xff;
P2=0xff;
while(1);
}
2)P0.1-P0.7连接1-8LED,P2.0-P2.7连接9-16LED。
3)P1初始值为0xf0,P1.0-P1.3同时连接到一个与非门接入到INT1口。
4)用外部中断1来触发按键扫描。
我画好了Proteus的图,已经和Proteus联调过,目前我的等级无法上传图片。
程序很简单,基本是自解释的。C的源程序如下:
#include
sbit L1=P1^0;
sbit L2=P1^1;
sbit L3=P1^2;
sbit L4=P1^3;
//中断服务程序
void keyinterrupt() interrupt 2
{
int t;
//延时软件消抖
t=5000;
while(t--);
if(INT1==1)
return;
EX1=0;
//扫描键值
P1=0xef;
if(L1==0){P0=0xfe;P2=0xff;} //按键盘key1
if(L2==0){P0=0xfd;P2=0xff;} //按键盘key2
if(L3==0){P0=0xfb;P2=0xff;} //按键盘key3
if(L4==0){P0=0xf7;P2=0xff;} //按键盘key4
P1=0xdf;
if(L1==0){P0=0xef;P2=0xff;} //按键盘key5
if(L2==0){P0=0xdf;P2=0xff;} //按键盘key6
if(L3==0){P0=0xbf;P2=0xff;} //按键盘key7
if(L4==0){P0=0x7f;P2=0xff;} //按键盘key8
P1=0xbf;
if(L1==0){P2=0xfe;P0=0xff;} //按键盘key9
if(L2==0){P2=0xfd;P0=0xff;} //按键盘key10
if(L3==0){P2=0xfb;P0=0xff;} //按键盘key11
if(L4==0){P2=0xf7;P0=0xff;} //按键盘key12
P1=0x7f;
if(L1==0){P2=0xef;P0=0xff;} //按键盘key13
if(L2==0){P2=0xdf;P0=0xff;} //按键盘key14
if(L3==0){P2=0xbf;P0=0xff;} //按键盘key15
if(L4==0){P2=0x7f;P0=0xff;} //按键盘key16
P1=0x0f;
EX1=1;
return;
}
void main(void)
{
IE=0;
EX1=1;
EA=1; //中断open
P1=0x0f;
P0=0xff;
P2=0xff;
while(1);
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯