51单片机串口1工作方式0驱动74hc595和74hc164输出数码管

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

我也是研究了好几天才开发明白的所以废话不多少,直接上硬货

一,代码部分:

(1)相关寄存器配置:

串行口控制寄存器SCON

串行口控制寄存器SCON的格式

D7 D6 D5 D4 D3 D2 D1 D0

SCON SM0 SM1 SM2 REN TB8 RB8 TI RI 98H 位地址9FH 9EH 9DH 9CH 9BH 9AH 99H 98H

SM0、SM1——串行口的4种工作方式选择位

SM0 SM1 方式功能

0 0 0 同步移位寄存器方式

0 1 1 8位异步收发,波特率由定时器控制

1 0

2 9位异步收发,波特率为时钟频率的1/64或者1/32 1 1

3 9位异步收发,波特率由定时器控制

寄存器的十六进制操作控制:

复习一下例子:

SCOM = 0x02

0X02的0代表在高八位,2的位置代表在低八

按照8421 8421顺序操控

scon SM0 SM1 SM2 REN TB8 RB8 TI RI

8 4 2 1 8 4 2 1

还不懂的画再来一个例子明白了就跳过往下:

例如问配置REN置1,发送8位时间置1,接收标志位置1怎么配置

答:0x1A

好接着往下:

(1)代码原创:

#include

#include

unsigned char count;

sbit ST_CP = P3^5; //P3^5 串行锁存寄存器时钟RCK,上升沿有效

void main()

{

SCON = 0x00;//工作方式0

while(1)

{

for(count=0;count<8;count++)

{

SBUF = 0x55;

while(!TI)

TI = 0;

//左移一位将高位补给低位,如果二进制数为01010101 那么_crol_(1) 为10101010

}

ST_CP = 1;

_nop_();

_nop_();

ST_CP = 0;

for(count=30000;count>0;count--);//串口通信太快了,延时一下方便看示波器时序

}

}

(1)代码解析

51单片机通过直接操控SBUF寄存器会自动启动发送8位数据,期间TXD作为时钟线,每发送一位都会置1一次时钟线TXD,因此74HC595的SCK引脚只需连接51芯片的TXD引脚即可,51单片机会自动拉高拉低发送.

二,protues仿真部分:

(1),74HC595引脚功能:

9 脚:串行数据出口引脚。当移位寄存器中的数据多于8个bit位时,会把原来的8个bit 数据一个个重新更新

10脚:MR,低电平时,清空移位寄存器中已有的数据位,一般不需要,接高电平即可。

14脚:DS(SER),串行数据输入引脚

13脚:OE,输出使能控制脚,它是低电才使能输出,所以接GND

12脚:RCK(STCP),存储寄存器时钟输入引脚。上升沿时,数据从移位寄存器转存到存储寄存器。

11脚:SCK(SHCP),移位寄存器时钟引脚,上升沿时,移位寄存器中的数据位数据整体后移,并接受新的数据位(从SER输入)。

Q0~Q7:并行输出引脚

74HC595数据端:

QA--QH:8位并行输出端,可以直接控制数码管的8个段

QH':级联输出端,可将它接下一个595的SI端

SI:串行数据输入端

74HC595的控制端说明

/SCLR(10脚):低电平时将移位寄存器数据清零,通常接VCC

SCK(11脚):上升沿时数据寄存器的数据移位.QA-QB-.QC....下降沿移位寄存器数据不变(2)74HC164时序及引脚功能:

————————————————

相关文档
最新文档