本篇文章主要是講解如何簡單示用74HC595,更具體的講解請移步
https://www.cnblogs.com/lulipro/p/5067835.html#undefined
這篇文章講解的更加詳細.
/**************************************************************************************/
在開始前要預習的一些東西
595里面有2個8位寄存器:移位寄存器SRCLK、存儲寄存器RCLK;
SER:串行輸入口;
先放一張原理圖.
在圖中我們可以看到三個管腳
P43-SRCLK;
P54-RCLK;
P40-SER;
工作路徑是SER->SRCLK->RCLK;
下面簡單演示下如何在右起第二個數碼管顯示2.
/*段碼*/
unsigned char code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/*位碼*/
unsigned char code T_COM[9]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit P_SRCLK=P4^3;//移動寄存器
sbit P_RCLK=P5^4;//存儲寄存器
sbit P_SER=P4^0;//串行輸入口
//我們首先定義一個函數
void Sent595_in(unsigned char dat){
unsigned int i=1;
for(i=1;i<=8;i++){
dat<<=1;
P_SER=CY;
P_SRCLK=1;
P_SRCLK=0;
}}
/*這個函數的作用是收到段碼或位碼dat后,8位二進制依次左移,溢出的數存儲在CY中直接賦值給串行輸入口P_SER,移動8次正好將8位二進制碼全部輸入.
然后移動寄存器上升沿有效給它一個高電平,
記得還原低電平.*/
//第二個函數
void Sent595_out(){
Sent595_in(T_COM[2]);
Sent595_in(smgduan[2]);
P_RCLK=1;
P_RCLK=0;
}
/*我們分別調用了兩次Sent595_in,因為是兩塊HC595,所以必須是位碼先放進去,位碼放進去后再放入段碼,於是原先的位碼便會從Q7口進入上面的那塊HC595中的SER口,起到位碼的作用.
上面的HC595負責選擇哪個數碼管,下面的HC595負責選擇數碼管顯示什么.
最后存儲寄存器賦值高電平,然后還原.