- #include <REG51.H>
- #include <intrins.h>
- #define NOP() _nop_() // 定義空指令 ,這個函數在庫 <intrins.h> 中
- //SPI IO
- sbit MOSIO = P3^4;
- sbit R_CLK = P3^5;
- sbit S_CLK = P3^6;
- //點陣顯示數組
- unsigned char code tab0[] = {0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80,
- 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00};
- unsigned char code tab1[] ={0,0,254,127,2,64,66,66,34,68,18,72,2,64,2,64,242,79,18,72,18,72,18,72,242,79,2,64,254,127,0,0};
- //函數聲明
- void HC595SendData( unsigned char BT3, unsigned char BT2,unsigned char BT1,unsigned char BT0);
-
- /*************主函數*****************************/
- void main(void)
- {
- int k,i,ms;
- i = 16; //顯示時間
- while(1)
- {
- for(ms = i; ms > 0; ms--)
- {
- for(k = 0; k < 16; k++) //顯示囧
- {
- HC595SendData(~tab1[2*k +1],~tab1[2*k],tab0[2*k],tab0[2*k + 1]);
- }
- }
-
- }
- }
- /*********************************************************************************************************
- ** 函數名稱: HC595SendData
- ** 功能描述: 向SPI總線發送數據
- *********************************************************************************************************/
- void HC595SendData( unsigned char BT3, unsigned char BT2,unsigned char BT1,unsigned char BT0)
- {
- unsigned char i;
- for(i = 0; i < 32; i++)
- {
- if(i > 23 )
- {
- if((BT0 << (i - 24)) & 0x80)
- {
- MOSIO = 1;
- }
- else
- {
- MOSIO = 0;
- }
- }
-
- else if(i > 15 & i < 24 )
- {
- if((BT1 << (i - 16)) & 0x80) //set dataline high 0X80000000 最高位與SendVal左移的最高位 進行邏輯運算
- {
- MOSIO = 1; // 如果為真 MOSIO = 1
- }
- else
- {
- MOSIO = 0;
- }
- }
- else if(i < 16 & i > 7 )
- {
- if((BT2 << (i - 8)) & 0x80)
- {
- MOSIO = 1;
- }
- else
- {
- MOSIO = 0;
- }
- }
-
- else
- {
- if((BT3 << i) & 0x80) //set dataline high 0X80000000 最高位 進行邏輯運算
- {
- MOSIO = 1; // 如果為真 MOSIO = 1
- }
- else
- {
- MOSIO = 0;
- }
- }
- S_CLK = 0;
- NOP(); //產生方形波
- S_CLK = 1;
- }
-
- R_CLK = 0; //set dataline low
- NOP(); //產生方形波
- R_CLK = 1;
- }
復制代碼
|