下圖是延時很慢的74hc595的仿真圖:
如上圖顯示,在ST_CP 有上升沿后,右邊應該有輸出才對。這個圖片是輸入了兩組數據。下邊附上單片機代碼:
- #include<reg51.h>
- #include "intrins.h"
- sbit YA=P2^1;
- sbit HUAN=P2^2;
- sbit DAT=P2^0;
- sbit RE=P2^3;
- unsigned char shengduan[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
- //unsigned char shengduan[8]={0x7f,0xbf,0xbf,0xef,0xf7,0xfb,0xfd,0xfe};
- void delay(unsigned int i)
- {
- while(i--);
- }
- void HC595SendByte(unsigned char dat)//3入多出,這是串行輸入,并行輸出的東西
- {
- unsigned char a;
- YA=0;
- HUAN=0;
-
- for(a=0;a<8;a++)
- {
- DAT=dat>>7;
- dat<<=1;
- YA=1;
- _nop_();//對于12mhz的芯片延時1us,包含在intrinsic.h里
- _nop_();
- delay(50000);//故意延時
- YA=0;
- delay(50000);//故意延時
- }
- HUAN=1;
- _nop_();
- _nop_();
- delay(50000);//故意延時
- HUAN=0;
-
- }
- void main(void) //定義函數
- {
-
- unsigned char i;
- RE=0;
- delay(50000);//故意延時
- RE=1;
- HC595SendByte(0x00);
-
- for(i=0;i<8;i++)//實現動態掃描
- {
- HC595SendByte(shengduan[i]);
-
- delay(50000);//故意延時
- delay(50000);//故意延時
-
-
- }
- }
復制代碼
|