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