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