- #include <reg51.h>
- #define u8 unsigned char
- #define u16 unsigned short int
- //定義HC595使用的IO口
- sbit HC595_DATA=P1^2;
- sbit HC595_RCK=P1^3;
- sbit HC595_SCK=P1^4;
- void HC595_Send_Byte(u8 byte)
- {
- u8 i;
- for(i=0;i<8;i++)
- {
- if(byte&0x80)HC595_DATA=1;
- else HC595_DATA=0;
- HC595_SCK=0;
- HC595_SCK=1;
- byte<<=1;
- }
- }
- /*
- 將HC595存儲器里的數據輸出到總線上
- */
- void HC595_DataOut()
- {
- HC595_RCK=0;
- HC595_RCK=1;
- HC595_RCK=0;
- }
- /*
- 延時函數
- */
- void DelayMs(u8 p)
- {
- u8 z,e;
- for(z=p;z>=0;z--);
- for(e=110;e>=0;e--);
- }
- /*
- HC595的3、4級是控制點陣的列(低電平)
- HC595的1、2級是控制點陣的行(高電平)
- 給HC595第1級發送的數據會移動到最后一個HC595。
- */
- int main()
- {
- u8 i,j;
- u16 Row;
- u16 col;
- while(1)
- {
- for(i=0;i<16;i++)
- {
- Row=0x0000;
- Row|=1<<i;
- for(j=0;j<16;j++)
- {
- col=0xFFFF;
- col&=~(1<<j);
- HC595_Send_Byte(col>>8);
- HC595_Send_Byte(col);
- HC595_Send_Byte(Row>>8);
- HC595_Send_Byte(Row);
- HC595_DataOut();
- DelayMs(100);
- HC595_Send_Byte(0xFF);
- HC595_Send_Byte(0xFF);
- HC595_Send_Byte(0x00);
- HC595_Send_Byte(0x00);
- HC595_DataOut();
- }
- }
- }
- }
復制代碼
|