74HC595應用經(jīng)驗
595控制數(shù)碼管,要我說595,一句話,595就是一個移位寄存器+一個寄存器+8個三態(tài)門.
總結(jié)一下:
1.595是從低位往高位移位,而51串口發(fā)數(shù)據(jù)是從先發(fā)低位,再發(fā)高位.所以要注意要么按照blog里連線的方法(O0~O7分別對應a~dp),但是編寫程序時,字段進行倒序,比如顯示'1'的話,不是0x86(10000110b),而是0x61(01100001).或者連線顛倒一下(O0~O7分別對應dp~a),程序里還是常規(guī)方法.
2.用595控制數(shù)碼管最少占用單片機3個IO口,RCLK(595鎖存器脈沖,上升延使能,等到所有595移位結(jié)束,此引腳來一個上升延送出),SRCLK(一個上升延移位一次),SER(數(shù)據(jù)輸入端).此外,E引腳可以用來關閉所有595的輸出,使引腳呈現(xiàn)高阻抗,CLR清零移位寄存器.
3.595使用3個IO口或者使用串口RXD,TXD兩根線+一個IO口.如果使用串口,應該讓串口工作在方式0,方式0下,數(shù)據(jù)通過RXD輸出,TXD輸出fosc/12頻率的時鐘脈沖.這里需要注意的一點就是RXD,TXD引腳要直接使用單片機直接出來的線(RXD-10腳-P30,TXD-11腳-P31),而不能使用經(jīng)MAX232后的RXD,TXD.因為經(jīng)過MAX232之后使用的是EIA電平,而不是TTL電平了.我經(jīng)過示波器測量,發(fā)現(xiàn)單片機RXD,TXD引腳輸出就是方波,而經(jīng)過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);
}