给你改写成一次发送3个字节的示例,1T的MCU需要加短延时,12T的51不需要加短延时。
- #include<reg52.h>
- #include<intrins.h>
- sbit Ds=P1^0;//串行数据输入端 14脚
- sbit Sh=P1^1;//移位寄存器时钟输入端 11脚
- sbit St=P1^2;//存储寄存器时钟输入 12脚
- sbit Mr=P1^3;//主复位端,低电平复位 10脚
- void DelayMS(unsigned int ms)
- {
- unsigned char i;
- while(ms--)
- for(i=0;i<120;i++);
- }
- void In_Data(unsigned char a,b,c)
- {
- unsigned char i,j;
- j=a;
- for(i=0;i<8;i++)
- {
- j<<=1;
- _nop_();_nop_();
- Ds=CY;
- _nop_();_nop_();
- Sh=0;
- _nop_();_nop_();
- Sh=1;
- }
- j=b;
- for(i=0;i<8;i++)
- {
- j<<=1;
- _nop_();_nop_();
- Ds=CY;
- _nop_();_nop_();
- Sh=0;
- _nop_();_nop_();
- Sh=1;
- }
- j=c;
- for(i=0;i<8;i++)
- {
- j<<=1;
- _nop_();_nop_();
- Ds=CY;
- _nop_();_nop_();
- Sh=0;
- _nop_();_nop_();
- Sh=1;
- }
- St=0;
- _nop_();_nop_();
- St=1;
- }
- void main()
- {
- Mr=0;
- DelayMS(1);
- Mr=1;
- In_Data(0x4A,0x55,0xAA);
- while(1);
- }
复制代码
|