我的狐仙女友无修磁力:74HC595应用经验

来源:百度文库 编辑:中财网 时间:2024/05/09 10:14:53
作者:未知 文章来源:网络转载 点击数: 3768 更新时间:2007-2-26 14:09:06



!
今天上午终于搞定了595控制数码管,要我说595,一句话,595就是一个移位寄存器+一个寄存器+8个三态门.

总结一下:
1.595是从低位往高位移位,而51串口发数据是从先发低位,再发高位.所以要注意要么按照blog里连线的方法(O0~O7分别对应a~dp),但是编写程序时,字段进行倒序,比如显示'1'的话,不是0x86(10000110b),而是0x61(01100001).或者连线颠倒一下(O0~O7分别对应dp~a),程序里还是常规方法.

2.用595控制数码管最少占用单片机3个IO口,RCLK(595锁存器脉冲,上升延使能,等到所有595移位结束,此引脚来一个上升延送出),SRCLK(一个上升延移位一次),SER(数据输入端).此外,E引脚可以用来关闭所有595的输出,使引脚呈现高阻抗,CLR清零移位寄存器.
3.595使用3个IO口或者使用串口RXD,TXD两根线+一个IO口.如果使用串口,应该让串口工作在方式0,方式0下,数据通过RXD输出,TXD输出fosc/12频率的时钟脉冲.这里需要注意的一点就是RXD,TXD引脚要直接使用单片机直接出来的线(RXD-10脚-P30,TXD-11脚-P31),而不能使用经MAX232后的RXD,TXD.因为经过MAX232之后使用的是EIA电平,而不是TTL电平了.我经过示波器测量,发现单片机RXD,TXD引脚输出就是方波,而经过MAX232之后就不是方波了,波形很怪.
附源程序:
#include
#include
sbit STCLK = P1^0;
sbit E    = P1^1;
//sbit SRCLK = P1^2;
//sbit DAT   = P1^3;
main()
{
E=0;
SCON=0x00;
SBUF=0x61;
while(!TI);
TI=0;
SBUF=0xdb;
while(!TI);
TI=0;
_nop_();
_nop_();
STCLK=0;
_nop_();
_nop_();
STCLK=1;
E=0;
while(1);
}