51单片机 | 并行I/O口扩展实例(74LS244/74LS373/4071)

并行I/O口扩展实例

//51单片机原理及应用(第二版)——基于Keil C与Proteus》第四章例4.4

I/O口不能完全用于输入/输出操作,当需要扩展外部存储器时,P0、P2口用作地址总线和数据总线,此时能用的I/O口就只有P1和P3口,如果再使用串行通信,I/O口就不够使用了,需要扩展I/O口

两种方式:

① 采用普通锁存器、三态门等芯片来进行简单的扩展(如74LS373或74LS244等)

采用可编程的I/O芯片来扩展(如8255或8155等)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

要求:用4个开关控制4个LED的亮灭状态,其中采用74LS244控制开关的输入,采用74LS373控制LED输出

代码:

电路图:

过程分析:

过程://右键点击图片"在新标签页中打开图片"即可放大

  1. #18 P0=0xff; 通过拉高P0口置为1111 1111,即关闭LED灯;
  2. #19 com=0; CD4071 U2.A1CD4071 U2.B5输入一个0
  3. #20 rd = 0; CD4071 U2.A2输入一个0
  4. 由于CD4071的功能是执行逻辑或运算,12分别输入0,则3输出074LS244OE口;
  5. 74LS244缓冲驱动器的OE为使能端,低电平是有效的,高电平时输出为三态,此时通过CD4071传给OE低电平,使开关的电平可以通过74LS244传入P0
  6. 开关状态传入P0
  7. #21 temp = P0; 通过定义的unsigned char temp来存放P0的状态
  8. #22 rd = 1; CD4071 U2.A2输入一个1
  9. 1=02=1;此时或门输出为1
  10. 74LS244OE端高电平时输出为三态,关闭74LS244
  11. #23 wr = 1;CD4071 U2.B6输入一个1
  12. 此时5=06=1CD4071 U2.B7输出一个1
  13. 74LS343OE为低电平时,用作地址锁存器;LE为高电平时,输出Q0-Q7状态与D0-D7状态相同;当LE发生负跳变(1->0)时,输入端的D0-D7锁入Q0-Q7
  14. #24 P0 = temp; temp中的数据存入P0,传送到74LS343D端;
  15. #25 wr = 0; CD4071 U2.B6输入一个0
  16. 此时5=06=0CD4071 U2.B7输出一个0
  17. LE的状态从1->0,发生负跳变,输出Q0-Q7
  18. LED等接受到开关的情况,发生亮灭。

       

实验结果

posted @ 2017-04-19 18:29  hugh.dong  阅读(8094)  评论(0编辑  收藏  举报