节省AT89C2051有限资源进行I/O接口扩展的几个设计

来源 :电脑知识与技术·学术交流 | 被引量 : 0次 | 上传用户:kkrriikk
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:AT89C2051是一种精简型单片机,因其I/O接口有限,应用时必须进行扩展,文章通过5个设计说明如何在耗用较少I/O资源下,实现尽可能多的按键输入。
  关键词:AT89C2051;74LS164;按键;设计;I/O接口
  中图分类号:TP368文献标识码:A文章编号:1009-3044(2008)27-2094-05
  AT89C2051 Save Limited Resources to Conduct I/O Interfaces Expand Several Designs
  LIU Jin-ping, YE Sai-feng
  (Fujian Electric Power Occupation Technical College,Quanzhou 362000, China)
  Abstract: AT89C2051 is a streamlining of Singlechip, is limited because of it’s I/O port,must carry out expansion when applying. the article passes 5 designs specification , how to import in the button consuming with being as far as possible more than stopping coming true under I/O resource.
  Key words: AT89C2051; 74LS164; button; design; I/O port
  
  1 引言
  
  AT89C2051是一种精简型单片机芯片,20脚封装,体积小。它的价格比同类产品便宜一半。 AT89C2051的驱动能力较强,P1和P3上可以有20mA左右驱动电流,对一般数字电路芯片等器件,这样驱动电流足够了。这些是AT89C2051的优点,但它只有两个并行接口,并行口线只有15根,可利用资源有限。
  输入和显示是单片机的外围电路,同时也是人机交互的重要接口。在实际应用中,几乎离不开这两个部分,其中输入主要是按键、键盘等器件,显示主要为数码管和发光二极管。
  随着智能电子产品的功能越来越强,按键个数也越来越多。AT89C2051要应用于这些产品,就必须进行I/O接口扩展。扩展I/O的途径较多,这里就不一一叙述。按照减少成本的原则以及在不动用P3口(具有第二功能)的前提下,有没有什么办法在耗用P1口较少资源的情况下,实现尽可能多的按键输入?下面5个设计回答了这个问题。
  
  2 应用设计
  
  2.1 占用5条I/O线,实现9个按键输入
  2.1.1 硬件电路设计
  本电路由AT89C2051单片机、移位寄存器74LS164、LED及9个按键等组成,电路原理图如图1所示。这个电路比起单片机教科书中所介绍的矩阵按键知识——5条口线,可实现3行2列的6键——多了3 个键。
  2.1.2 程序设计思想与程序代码
  首先检查P1.0~P1.2是否出现低电平,若出现,则说明#6,#7,#8中有一键按下,这时只要分别对P1.0、P1.1、P1.2进行判零,就可以具体确定哪个按键;若都没有低电平出现,则进行以下操作:先在P1.0上输出低电平,分别判断P1.3及P1.4是否出现低电平,若有,就可以分别确定为#0和#1键;若没有,接着在P1.1上输出低电平,然后分别判断P1.3及P1.4,若出现,则不是#2就是#3键;若还是没有,就在P1.2上输出低电平,然后分别判断P1.3及P1.4,若有,则分别为#4及#5键,循环往复。
  
  2.2.2 程序设计思想与程序代码
  在P1.0上输出低电平(其它为高电平,以下相同),若P1.1,P1.2,P1.3及P1.4有一为低电平,则可以确定按键为#0,#1,#2,#3中的一个。同样,在P1.1上输出低电平,分别对P1.2,P1.3及P1.4判零,则可以确定按键为#4,#5,#6中的一个。接着在P1.2上输出低电平,分别对P1.3及P1.4判零,则可以确定按键为#7,#8中的一个。最后在P1.3上输出低电平,对P1.4进行判零,就能确定按键#9是否按下,循环反复。LED显示同上。
  程序代码如下:
  ORG 0
  BEGIN: MOV P1,#0FFH
  MOV P1,#11111110B
  JB P1.1,L1
  MOV R2,#0
  ACALL DSP
  SJMP BEGIN
  L1: JB P1.2,L2
  MOV R2,#1
  ACALL DSP
  SJMP BEGIN
  L2: JB P1.3,L3
  MOV R2,#2
  ACALL DSP
  SJMP BEGIN
  L3: JB P1.4,L4
  MOV R2,#3
  ACALL DSP
  SJMP BEGIN
  L4: MOV P1,#11111101B
  JB P1.2,L5
  MOV R2,#4
  ACALL DSP
  SJMP BEGIN
  L5: JB P1.3,L6
  MOV R2,#5
  ACALL DSP
  SJMP BEGIN
  L6: JB P1.4,L7
  MOV R2,#6
  ACALL DSP
  SJMP BEGIN
  L7: MOV P1,#11111011B
  JB P1.3,L8
  MOV R2,#7
  ACALL DSP
  SJMP BEGIN
  L8: JB P1.4,L9
  MOV R2,#8
  ACALL DSP
  SJMP BEGIN
  L9: MOV P1,#11110111B
  JB P1.4,BEGIN
  MOV R2,#9
  ACALL DSP
  SJMP BEGIN
  DSP: MOV A,R2
  MOV DPTR,#TABLE1
  MOVC A,@A DPTR
  MOV R6,#8
  LP: RRC A
  MOV P1.5,C
  CLR P1.6
  SETB P1.6
  DJNZ R6,LP
  MOV R5,#80H
  LP1: MOV R6,#0
  DJNZ R6,$
  DJNZ R5,LP1
  RET
  TABLE1:DB 3FH,06H,5BH,4FH,66H
  DB 6DH ,7DH,07H,7FH,6FH
  END
  2.2.3 性能分析
  本设计性能与上一个差不多,但凭巧妙的设计,硬是多了一个按键。
  2.3 占用4条I/O线,实现12个按键输入
  2.3.1 硬件电路设计
  本电路由AT89C2051单片机、移位寄存器74LS164、LED、12个按键、4个常用的廉价二极管,以及对P1.0及P1.1的上拉电阻,还有一个12V电源等组成,电路原理图如图3所示。
  
  
  2.3.2 程序设计思想与程序代码
  在一条口线上(如P1.0)输出高电平,其它为低电平(这一点与前两个设计不同,所以电路中上拉电阻必不可少),然后对其它口线(P1.1~P1.3)进行高电平的判断,若在某一线上出现高电平,则对应按键(#3、#6、#9)按下。依次类推,分别在P1.1、P1.2、P1.3上输出高电平,就可以分别判断#0,#7,#A一组键、#1,#4,#B一组键、#2,#5,#8一组键是否有键按下。
  程序代码如下:
  ORG 0
  BEGIN: ORL P1,#0FH
  MOV P1,#01H
  JNB P1.1,L1
  MOV R2,#3
  ACALL DSP
  SJMP BEGIN
  L1: JNB P1.2,L2
  MOV R2,#6
  ACALL DSP
  SJMP BEGIN
  L2: JNB P1.3,L3
  MOV R2,#9
  ACALL DSP
  SJMP BEGIN
  L3: ORL P1,#0FH
  MOV P1,#02H
  JNB P1.0,L4
  MOV R2,#0
  ACALL DSP
  SJMP BEGIN
  L4: JNB P1.2,L5
  MOV R2,#7
  ACALL DSP
  SJMP BEGIN
  L5: JNB P1.3,L6
  MOV R2,#10
  ACALL DSP
  SJMP BEGIN
  L6: ORL P1,#0FH
  MOV P1,#04H
  JNB P1.0,L7
  MOV R2,#1
  ACALL DSP
  SJMP BEGIN
  L7: JNB P1.1,L8
  MOV R2,#4
  ACALL DSP
  SJMP BEGIN
  L8: JNB P1.3,L9
  MOV R2,#11
  ACALL DSP
  SJMP BEGIN
  L9: ORL P1,#0FH
  MOV P1,#08H
  JNB P1.0,L10
  MOV R2,#2
  ACALL DSP
  SJMP BEGIN
  L10: JNB P1.1,L11
  MOV R2,#5
  ACALL DSP
  SJMP BEGIN
  L11: JNB P1.2,BEGIN
  MOV R2,#8
  ACALL DSP
  AJMP BEGIN
  DSP: MOV A,R2
  MOV DPTR,#TABLE1
  MOVC A,@A DPTR
  MOV R6,#8
  LP: RRC A
  MOV P1.4,C
  CLR P1.5
  SETB P1.5
  DJNZ R6,LP
  ACALL DELAY
  RET
  DELAY: MOV R4,#08H
  MOV R5,#9AH
  MOV R6,#7FH
  AA: DJNZ R6,AA
  DJNZ R5,AA
  DJNZ R4,AA
  RET
  TABLE1: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
  DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
  END
  2.3.3 性能分析
  这一设计增加电路的复杂性,增大电路板的面积,但12个按键比较适合大多数微电脑控制的家电的应用。
  2.4 占用4条I/O线,实现16个按键输入
  2.4.1 硬件电路设计
  本电路由AT89C2051单片机、移位寄存器74LS164、LED、16个按键、4个二极管,以及4个上拉电阻,还有一个12V电源等组成,电路原理图如图4所示。
  
  2.4.2 程序设计思想与程序代码
  在一条口线上(如P1.0)输出高电平,其它为低电平,立刻对该口线进行判零,若为低电平,则#C键按下;然后对其它口线(P1.1~P1.3)进行高电平的判断,若在某一线上出现高电平,则对应按键(#3、#6、#9)按下。依次类推。
  本设计与上一个设计类似,只是多了判零这一操作,就增加了4 个按键。
  程序代码如下:
  ORG 0
  BEGIN: ORL P1,#0FH
  MOV P1,#01H
  JB P1.0,NEX1
  MOV R2,#0CH
  ACALL DSP
  SJMP BEGIN
  NEX1: JNB P1.1,L1
  MOV R2,#3
  ACALL DSP
  SJMP BEGIN
  L1: JNB P1.2,L2
  MOV R2,#6
  ACALL DSP
  SJMP BEGIN
  L2: JNB P1.3,L3
  MOV R2,#9
  ACALL DSP
  SJMP BEGIN
  L3: ORL P1,#0FH
  MOV P1,#02H
  JB P1.1,NEX2
  MOV R2,#0DH
  ACALL DSP
  SJMP BEGIN
  NEX2: JNB P1.0,L4
  MOV R2,#0
  ACALL DSP
  SJMP BEGIN
  L4: JNB P1.2,L5
  MOV R2,#7
  ACALL DSP
  SJMP BEGIN
  L5: JNB P1.3,L6
  MOV R2,#10
  ACALL DSP
  SJMP BEGIN
  L6: ORL P1,#0FH
  MOV P1,#04H
  JB P1.2,NEX3
  MOV R2,#0EH
  ACALL DSP
  AJMP BEGIN
  NEX3: JNB P1.0,L7
  MOV R2,#1
  ACALL DSP
  SJMP BEGIN
  L7: JNB P1.1,L8
  MOV R2,#4
  ACALL DSP
  AJMP BEGIN
  L8: JNB P1.3,L9
  MOV R2,#11
  ACALL DSP
  AJMP BEGIN
  L9: ORL P1,#0FH
  MOV P1,#08H
  JB P1.3,NEX4
  MOV R2,#0FH
  ACALL DSP
  AJMP BEGIN
  NEX4: JNB P1.0,L10
  MOV R2,#2
  ACALL DSP
  AJMP BEGIN
  L10: JNB P1.1,L11
  MOV R2,#5
  ACALL DSP
  AJMP BEGIN
  L11: JNB P1.2,DONE
  MOV R2,#8
  ACALL DSP
  DONE: AJMP BEGIN
  DSP: MOV A,R2
  MOV DPTR,#TABLE1
  MOVC A,@A DPTR
  MOV R6,#8
  LP: RRC A
  MOV P1.4,C
  CLR P1.5
  SETB P1.5
  DJNZ R6,LP
  ACALL DELAY
  RET
  DELAY: MOV R4,#08H
  MOV R5,#9AH
  MOV R6,#7FH
  AA: DJNZ R6,AA
  DJNZ R5,AA
  DJNZ R4,AA
  RET
  TABLE1: DB 3FH,06H,5BH,4FH,66H,6DH,7DH
  DB 07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
  END
  2.4.3 性能分析
  本设计给电路增加一定复杂程度,生产成本有所增大。但16按键已经适合于绝大多数的智能家用电器。
  2.5 占用4条I/O线,同时实现16个按键输入及LED输出
  2.5.1 硬件电路设计
  本电路由AT89C2051单片机、两片移位寄存器74LS164、LED、16个按键以及三极管等组成,电路原理图如图5所示。该电路特点是移位寄存器74LS164既控制按键的输入,又控制显示的输出。由于共有16个按键,所以需要2片74LS164。
  
  2.5.2 程序设计思想与程序代码
  由P1.6控制LED是否显示。将双字节数FFFEH逐位移入74LS164,对P1.7判零,若为低电平,则按下#0键;否则,将FFFEH左移一位,转换后为FFFDH并逐位移入74LS164,然后对P1.7判零,若为低电平,则是#1键按下,依此类推,共进行进行16次,就可以判断16个是否按下。
  程序代码如下:
  ORG 0
  MOV DPTR,#TABLE
  LOOP: MOV R2,#0
  MOV R3,#16
  MOV 20H,#0FEH
  MOV 21H,#0FFH
  LOOP2: ACALL SUB
  JNB P1.7,NEXT
  INC R2
  ACALL LEFT
  DJNZ R3,LOOP2
  SJMP LOOP
  NEXT: MOV A,R2
  MOVC A,@A DPTR
  ACALL SUB1
  CLR P1.6
  ACALL DELAY
  SETB P1.6
  SJMP LOOP
  LEFT: MOV C,0FH
  MOV A,20H
  RLC A
  MOV 20H,A
  MOV A,21H
  RLC A
  MOV 21H,A
  RET
  SUB: MOV R7,#8
  MOV A,21H
  LP1: RLC A
  MOV P1.5,C
  CLR P1.4
  SETB P1.4
  DJNZ R7,LP1
  MOV R7,#8
  MOV A,20H
  LP2: RLC A
  MOV P1.5,C
  CLR P1.4
  SETB P1.4
  DJNZ R7,LP2
  RET
  SUB1: MOV R7,#8
  LOOP1: RLC A
  MOV P1.5,C
  CLR P1.4
  SETB P1.4
  DJNZ R7,LOOP1
  RET
  DELAY: MOV R5,#40
  D2: MOV R6,#40
  D1: MOV R7,#248
  DJNZ R7,$
  DJNZ R6,D1
  DJNZ R5,D2
  RET
  TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
  DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
  END
  2.5.3 性能分析
  本设计从原理上讲,每增加一片74LS164就可以增多8个按键,但是以缓长程序执行时间为代价的,所以,虽然在这几个设计中最节省I/O资源,但只能适合实时性要求不高的场合。
  3 结束语
  通过以上5个设计,可以看出,尽管AT89C2051单片机的I/O口很紧张,但我们可以通过巧妙的软件设计和添加常用廉价的器件,占用较少的I/O资源,实现尽可能多的按键输入。在这些设计中,作者为了显示设计的结果,在用PROPTEUS软件仿真时采用LED显示键值。由于每个程序设计中键值都保存在R2中,所以完全可以根据具体功能的设计的需求,将显示七段代码部分改为以下程序段就可以了。
  MOV A ,R2
  MOV B, #2
  MUL AB
  MOV DPTR, #SUBTABLE
  JMP @A DPTR
  …
  SUBTABLE: ACALL SUB1
  ACALL SUB2
  …
  以上5个设计为AT89C2051更广泛地应用于智能家用电器、工业生产控制等开发提供一些设计思想。
  
  参考文献:
  [1] 高卫东.51单片机原理与实践[M].北京:航空航天大学出版社,2008.
  [2] 邹久明.80C51单片机实用技术[M].北京:航空航天大学出版社,2008.
  [3] 周润景.基于PROTEUS的电路及单片机系统设计与仿真[M].北京:航空航天大学出版社,2006.
其他文献
摘要:数据库备份是保证数据库安全的一项重要措施,Oracle数据库管理系统提供了强大的数据库备份功能,RMAN是Oracle数据库管理提供的数据库备份与恢复实用程序。文章对RMAN组成、工作机制、备份步骤进行了介绍。  关键词:ORACLE数据库;RMAN;备份    Backup of Oracle Database Base on RMAN  HONG Jia-feng  (Zhuhai Ca
摘要:当今,计算机应用逐渐由海量数据处理转向大规模的事务处理和对工作流的管理,产生了对以台式计算机为核心,以数据库管理系统为开发环境的管理信息系统的迫切需要。素质教育深化改革,教育信息化的要求使得设计高校教务管理信息系统成为很好的研究和实践课题。  关键词:ASP.NET;教务管理信息系统;系统设计;系统实现  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)36-30
摘要:随着WEB技术的发展,基于网络的课程教学系统已经得到广泛的应用与实践。该文在分析操作实践课程特点及网络学习特点的基础上,提出了基于WEB的《ACCESS数据库程序设计》课程自主学习系统的设计与实施方案。系统以知识点为基础,组合围绕知识点的相关学习要素,综合解决和实现了学生在无教师指导下的完全自主学习。  关键词:自主学习;远程教育;WEB应用  中图分类号:TP311文献标识码:A文章编号:
摘要:如何在高校通识教育课程设置中融入计算思维的培养目标,已成为计算机教学工作者及高等教育课程体系制订者的研究课题之一。该文介绍了计算思维概念及研究现状,分析了国内大学通识教育现存问题,并在借鉴美国众多研究型大学通识教育课程的多种模式经验的基础上,对于大学计算机通识教育课程的设计提出了思路建议。  关键词:计算思维;通识教育;课程设置模式  中图分类号:G642 文獻标识码:A 文章编号:1009
我国的传统教育经历了两千多年的发展演进,构建了一套相对完整而严谨的理论体系,不仅在一定程度上维持了社会和国家的长治久安,也保证了文化与思想的传承,更塑造了中华民族的精神气质和性格特点。其中,“修身、齐家、治国、平天下”的家国情怀与“天人和谐、睦邻里仁、文道结合、知行合一”等传统思想,对现代教育影响深远。由吴婕主编、大连理工大学出版社于2013年出版的《中华优秀传统文化》一书,对中华优秀传统文化进行
摘要:我国基层社会治理面临着许多的矛盾和问题。而网格化管理就是根据属地管理、地理布局等原则,将辖区分成若干个网格状的单元,并对每一个网格实施动态、全方位的管理,对格内居民进行多元化、精细化、个性化的服务,从而达到高效、有针对性的服务,从而提高提高公共管理服务职能、密切党群干群关系、完善为民办实事的长交机制的目的。该文主要是通过介绍乌兰浩特铁西街社区网格化建设,来阐释网格化管理在解决基层社会治理的矛
摘要:C语言是一种被广泛应用的计算机语言,它已成为高校计算机教学的重要内容。本文结合教学实践,探讨C语言教学中培养学生编程能力的途径,探索C语言程序设计的教学方法,解决C语言程序设计存在的问题,旨在进一步提高C语言程序设计教学效果。  关键词:C语言;编程能力;算法;教育  中图分类号:TP3文献标识码:A文章编号:1009-3044(2009)04-0886-02  The Ascertaini
摘要:在当代家族小说作品中,周大新的《第二十幕》以尚吉利家族的兴衰史来影射上个世纪中国的时代风云变幻,作品在真实展现传统民族工业的现代化转型的基础上,深入挖掘了根植于儒家文化土壤中的家族精神在家族工业发展中的重要价值和意义。该小说在对家族精神予以肯定的同时,用现代的眼光对小说中人物自我意识的淡化进行了理性层面的审视。  关键词: 《第二十幕》 家族精神 自我意识  新旧世纪之交,重装登场的新历史小
崔峦曾说,从理念、文本组织和教学方法三个方面可以看到,群文阅读与统编语文教材的编排,同我们对教学的期望是一致的。二者在理念上都重视阅读和阅读质量,都鼓励由课内的单篇、群文阅读,引向整本书的阅读。在文本组织上,群文阅读是结构化阅读,对多文本的信息进行整合,教材编写的普通单元、阅读策略单元、习作单元等组文成群的角度和方式在群文阅读中也经常使用;群文阅读是探究性阅读,教材是以语文要素为重点,提倡“1 X
摘要:应急决策是抗灾救灾中的关键步骤,直接决定着救灾效果,关系着人民生命财产安全。应急决策的及时、有效依赖于对灾害情况的全面了解以及对救助预案的准确分析。利用虚拟仿真技术、GIS技术和多媒体技术等研制用于培训的突发事件应急推演系统,它能生成不同的虚拟环境和其相关问题,使受训人员融入其中来进行突发事件印记推演训练;该系统为应急决策提供了可视化环境,实现预案的可视性以及可操作性。文章从研究综述、目标定