好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

单片机矩阵键盘设计方案.doc

14页
  • 卖家[上传人]:王****
  • 文档编号:310301745
  • 上传时间:2022-06-14
  • 文档格式:DOC
  • 文档大小:24.54KB
  • / 14 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、设计原理  (1)如图142所示,用单片机的并行口P3连接4×4矩阵键盘,并以单片机的P30—P3.3各管脚作输入线,以单片机的P34—P3.7各管脚作输出线,在数码管上显示每个按键 “0-F”的序号.  (2)键盘中对应按键的序号排列如图14.1所示.  2、参考电路  图14.2 4×4矩阵式键盘识别电路原理图  3、电路硬件说明  (1)在“单片机系统"区域中,把单片机的P30-P3.7端口通过8联拨动拨码开关JP3连接到“4×4行列式键盘”区域中的M1—M4,N1-N4端口上  (2)在“单片机系统"区域中,把单片机的P0.0—P07端口连接到“静态数码显示模块”区域中的任何一个a-h端口上;要求:P00对应着a,P0.1对应着b,……,P0.7对应着h  4、程序设计内容  (1)4×4矩阵键盘识别处理   (2)每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码矩阵的行线和列线分别通过两并行接口和CPU通信.键盘的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么?还要消除按键在闭合或断开时的抖动。

      两个并行口中,一个输出扫描码,使按键逐行动态接地;另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能  5、程序流程图(如图143所示)6、汇编源程序  ;;;;;;;;;;定义单元;;;;;;;;;;  COUNT EQU 30H  ;;;;;;;;;;入口地址;;;;;;;;;;  ORG 0000H  LJMP START  ORG 0003H  RETI  ORG 000BH  RETI  ORG 0013H  RETI  ORG 001BH  RETI  ORG 0023H  RETI  ORG 002BH  RETI  ;;;;;;;;;;主程序入口;;;;;;;;;;  ORG 0100H  START: LCALL CHUSHIHUA  LCALL PANDUAN  LCALL XIANSHI  LJMP START  ;;;;;;;;;;初始化程序;;;;;;;;;;  CHUSHIHUA: MOV COUNT,#00H  RET  ;;;;;;;;;;判断哪个按键按下程序;;;;;;;;;;  PANDUAN: MOV P3,#0FFH  CLR P3。

      4  MOV A,P3  ANL A,#0FH  XRL A,#0FH  JZ SW1  LCALL DELAY10MS  JZ SW1  MOV A,P3  ANL A,#0FH  CJNE A,#0EH,K1  MOV COUNT,#0  LJMP DK  K1: CJNE A,#0DH,K2  MOV COUNT,#4  LJMP DK  K2: CJNE A,#0BH,K3  MOV COUNT,#8  LJMP DK  K3: CJNE A,#07H,K4  MOV COUNT,#12  K4: NOP  LJMP DK  SW1: MOV P3,#0FFH  CLR P3.5  MOV A,P3  ANL A,#0FH  XRL A,#0FH  JZ SW2  LCALL DELAY10MS  JZ SW2  MOV A,P3  ANL A,#0FH  CJNE A,#0EH,K5  MOV COUNT,#1  LJMP DK  K5: CJNE A,#0DH,K6  MOV COUNT,#5  LJMP DK  K6: CJNE A,#0BH,K7  MOV COUNT,#9  LJMP DK  K7: CJNE A,#07H,K8  MOV COUNT,#13  K8: NOP  LJMP DK  SW2: MOV P3,#0FFH  CLR P3.6  MOV A,P3  ANL A,#0FH  XRL A,#0FH  JZ SW3  LCALL DELAY10MS  JZ SW3  MOV A,P3  ANL A,#0FH  CJNE A,#0EH,K9  MOV COUNT,#2  LJMP DK  K9: CJNE A,#0DH,KA  MOV COUNT,#6  LJMP DK  KA: CJNE A,#0BH,KB  MOV COUNT,#10  LJMP DK  KB: CJNE A,#07H,KC  MOV COUNT,#14  KC: NOP  LJMP DK  SW3: MOV P3,#0FFH  CLR P3。

      7  MOV A,P3  ANL A,#0FH  XRL A,#0FH  JZ SW4  LCALL DELAY10MS  JZ SW4  MOV A,P3  ANL A,#0FH  CJNE A,#0EH,KD  MOV COUNT,#3  LJMP DK  KD: CJNE A,#0DH,KE  MOV COUNT,#7  LJMP DK  KE: CJNE A,#0BH,KF  MOV COUNT,#11  LJMP DK  KF: CJNE A,#07H,KG  MOV COUNT,#15  KG: NOP  LJMP DK  SW4: LJMP PANDUAN  DK: RET  ;;;;;;;;;;显示程序;;;;;;;;;;  XIANSHI: MOV A,COUNT  MOV DPTR,#TABLE  MOVC A,@A+DPTR  MOV P0,A  LCALL DELAY  SK: MOV A,P3  ANL A,#0FH  XRL A,#0FH  JNZ SK  RET  ;;;;;;;;;;10ms延时程序;;;;;;;;;;  DELAY10MS: MOV R6,#20  D1: MOV R7,#248  DJNZ R7,$  DJNZ R6,D1  RET  ;;;;;;;;;;200ms延时程序;;;;;;;;;;  DELAY: MOV R5,#20  LOOP: LCALL DELAY10MS  DJNZ R5,LOOP  RET  ;;;;;;;;;;共阴码表;;;;;;;;;;  TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H  DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H  ;;;;;;;;;;结束标志;;;;;;;;;;  END7、C语言源程序  #include  unsigned char code table[]={0x3f,0x66,0x7f,0x39,  0x06,0x6d,0x6f,0x5e,  0x5b,0x7d,0x77,0x79,  0x4f,0x07,0x7c,0x71};  void main(void)  { unsigned char i,j,k,key;  while(1)  { P3=0xff; //给P3口置1//  P3_4=0; //给P3。

      4这条线送入0//  i=P3;  i=i&0x0f; //屏蔽低四位//  if(i!=0x0f) //看是否有按键按下//  { for(j=50;j〉0;j—-) //延时//  for(k=200;k〉0;k--);  if(i!=0x0f) //再次判断按键是否按下//  { switch(i) //看是和P3.4相连的四个按键中的哪个//  { case 0x0e:  key=0;  break;  case 0x0d:  key=1;  break;  case 0x0b:  key=2;  break;  case 0x07:  key=3;  break;  }  P0=table[key]; //送数到P0口显示//  }  }  P3=0xff;  P3_5=0; //读P3.5这条线//  i=P3;  i=i&0x0f; //屏蔽P3口的低四位//  if(i!=0x0f) //读P3.5这条线上看是否有按键按下//  { for(j=50;j>0;j—-) //延时//  for(k=200;k〉0;k——);  i=P3; //再看是否有按键真的按下//  i=i&0x0f;  if(i!=0x0f)  { switch(i) //如果有,显示相应的按键//  { case 0x0e:  key=4;  break;  case 0x0d:  key=5;  break;  case 0x0b:  key=6;  break;  case 0x07:  key=7;  break;  }  P0=table[key]; //送入P0口显示//  }  }  P3=0xff;  P3_6=0; //读P3.6这条线上是否有按键按下//  i=P3;  i=i&0x0f;  if(i!=0x0f)  { for(j=50;j〉0;j——)  for(k=200;k〉0;k-—);  i=P3;  i=i&0x0f;  if(i!=0x0f)  { switch(i)  { case 0x0e:  key=8;  break;  case 0x0d:  key=9;  break;  case 0x0b:  key=10;  break;  case 0x07:  key=11;  break;  }  P0=table[key];  }  }  P3=0xff;  P3_7=0; //读P3。

      7这条线上是否有按键按下//  i=P3;  i=i&0x0f;  if(i!=0x0f)  { for(j=50;j〉0;j—-)  for(k=200;k〉0;k-—);  i=P3;  i=i&0x0f;  if(i!=0x0f)  { switch(i)  { case 0x0e:  key=12;  break;  case 0x0d:  key=13;  break;  case 0x0b:  key=14;  break;  case 0x07:  key=15;  break;  }  P0=table[key];  }  }  }  }  8、注意事项  在硬件电路中,要把8联拨动拨码开关JP2拨下,把8联拨动拨码开关JP3拨上去.。

      点击阅读更多内容
      相关文档
      吉林油田第十二中学2024~2025学年度第一学期期中质量检测 初二语文试卷(含答案).docx 吉林省长春市九台区四校2025~2026学年度上学期第一次月考试卷 七年级历史试卷(含答案).docx 名著阅读二:西游记 ——初中语文统编版(教学课件)(第一课时)(2024)七年级上册(共26页).pptx 吉林省松原市前郭一中2025-2026学年度第一学期9月份质量检测 八年级生物试卷(含答题卡、答案).docx 8.1 咏雪(教学课件)——初中语文统编版(2024)七年级上册(共22页).pptx 吉林省农安县合隆镇实验学校2025-2026学年度上学期9月学情调研七年级数学试卷(含答题卡、答案).docx 吉林省松原市宁江区风华中学2025—2026学年度上学期第一次月考试卷 九年级数学试卷(含答题卡、答案).docx 吉林省松原市宁江区风华中学2025—2026学年度上学期第一次月考试卷 八年级数学试卷(含答题卡、答案).docx 吉林油田第十二中学2024~2025学年度第一学期期中质量检测 初二英语试卷(含答案).docx 2025~2026学年度下学期七年级第三次综合检测 历史(含答案).docx 吉林油田第十二中学2024—2025学年度第一学期期末质量检测 初三数学试卷(含答案).docx 1.1 正数和负数 教学设计 初中数学人教版(2024)七年级上册 第一章 有理数.docx 吉林省长春市九台区四校2025~2026学年度上学期第一次月考试卷 七年级语文试卷(含答案).docx 2025~2026学年度下学期八年级第四次综合检测 生物(含答案).docx 9 《从百草园到三味书屋》鲁迅 教学设计初中语文统编版(2024)七年级上册 第三单元.docx 吉林省松原市前郭县2025~2026学年度上学期东北三省精准教学2026年8月高三联考 英语讲评PPT.pptx 吉林油田第十二中学2024—2025学年度第一学期期末质量检测 初二地理试卷(含答案).doc 6《散步》 莫怀戚 教学设计初中语文统编版(2024)七年级上册 第二单元.docx 吉林油田第十二中学2024—2025学年度第一学期期末质量检测 初二道德与法治试卷(含答案).docx 2025~2026学年度下学期八年级第三次综合检测 语文(含答案).docx
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.