分享

单片机_第7章 实例_八位移位寄存器原理图

 和生k7zm98l2kv 2023-06-08 发布于广东

考虑到本章不是很重要且暂时不需要掌握,所以就只讲解一个例题,其余的例题可以看本专栏的文章“单片机_介绍”中的介绍网页中下载的PPT或者实例

 实例1 利用串行方式0和74LS164扩展并行输出口,并实现LED由上向下循环。

74LS164——8位串入并出移位寄存器

 工作原理:
1)清零端(MR)若为低电平,输出端都为0;
2)清零端若为高电平,且时钟端(CP)出现上升沿脉冲,则输出端Q锁存输入端D的电平;
3)前级Q端与后级D端相连——移位作用,最先接收到的数将进入最高位。

电路接线:
数据输入端1(2)→RXD
时钟端8→ TXD
输出端Q0~Q7 →D1~D8
清零端9——Vcc或I/O口

编程分析

①串口初始化 

方式0(SM0 SM1 = 00),中断发送标志位清0 ( TI = 0)和禁止接收数据(REN = 0)→ SCON = 0  

②查询法串行发送

 ③ 74LS164倒序校正
     欲使164输出1111 1110B,SBUF发应为0111 1111B (0x7f )
     欲使D1~D8由上向下点亮,SBUF发应右移1位且最高位置1
     → (SBUF发 >> 1) | 1000 0000B   ; 与0x80逻辑或

实例1的源程序

  1. #include<reg51.h>
  2. void delay() //延时
  3. {
  4. unsigned int i;
  5. for (i=0; i<20000; i++);
  6. }
  7. void main()
  8. {
  9. unsigned char index, LED; //定义LED指针和显示字模
  10. SCON = 0; //设置串行模块工作在方式0
  11. while (1)
  12. {
  13. LED=0x7f;
  14. for (index=0; index < 8; index++)
  15. {
  16. SBUF = LED; //控制L0灯点亮
  17. do {} while(!TI); //通过TI查询判别数据是否输出结束
  18. LED = ((LED>>1)|0x80); //左移1位,末位置1
  19. TI=0;
  20. delay();
  21. }
  22. }
  23. }

 实例1的仿真运行

 仿真结果,流水灯的运行效果满足题意要求

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多