新手小白,正在學習74HC595,找了一串代碼,有些地方看不懂,各位大佬幫忙解釋一下。
1.dat可以幫忙解釋一下嗎,沒有定義為什么沒有報錯?
2._nop_();為什么要連用兩次,可以用一次嗎,用一次和用兩次有什么區別?
3.P0=0x7f;在這里是控制第一列的吧(這個不太確定),可以不加嗎?
單片機源程序如下:
- #include "reg51.h"
- #include<intrins.h>
- typedef unsigned int u16;
- typedef unsigned char u8;
- sbit SRCLK=P3^6;
- sbit RCLK=P3^5;
- sbit SER=P3^4;
- u8 ledduan[]={0x38,0x44,0x42,0x21,0x42,0x44,0x38,0x00};
- u8 ledwei[]={0x7f
- ,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
- void delay(u16 i)
- {
- while(i--);
- }
- void Hc595SendByte(u8 dat)
- {
- u8 a;
- SRCLK=0;
- RCLK=0;
- for(a=0;a<8;a++)
- {
- SER=dat>>7;
- dat<<=1;
- SRCLK=1;
- _nop_();
- _nop_();
- SRCLK=0;
- }
- RCLK=1;
- _nop_();
- _nop_();
- RCLK=0;
- }
- void main()
- {
- u8 i;
- while(1)
- {
- P0=0x7f;
- for(i=0;i<8;i++)
- {
- P0=ledwei[i];
- Hc595SendByte(ledduan[i]);
- delay(100);
- Hc595SendByte(0x00);
- }
- }
- }
復制代碼
|