考虑到本章不是很重要且暂时不需要掌握,所以就只讲解一个例题,其余的例题可以看本专栏的文章“单片机_介绍”中的介绍网页中下载的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的源程序
#include<reg51.h>
void delay() //延时
{
unsigned int i;
for (i=0; i<20000; i++);
}
void main()
{
unsigned char index, LED; //定义LED指针和显示字模
SCON = 0; //设置串行模块工作在方式0
while (1)
{
LED=0x7f;
for (index=0; index < 8; index++)
{
SBUF = LED; //控制L0灯点亮
do {} while(!TI); //通过TI查询判别数据是否输出结束
LED = ((LED>>1)|0x80); //左移1位,末位置1
TI=0;
delay();
}
}
}
实例1的仿真运行
仿真结果,流水灯的运行效果满足题意要求