下图是延时很慢的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);//故意延时
-
-
- }
- }
复制代码
|