/************* IO口定義 **************/
sbit P_HC595_SER = P2^5; //SER data input
sbit P_HC595_RCLK = P2^6; //RCLk store (latch) clock
sbit P_HC595_SRCLK = P2^7; //SRCLK Shift data clock
unsigned char code t_display[]={ //段碼標準字庫
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
// 不顯 - H J K L N o P U t G Q r M y
0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,
// 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1
0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};
unsigned char code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位碼
/**************** 向HC595發送一個字節函數 ******************/
void Send_595(u8 dat)
{
u8 i;
for(i=0; i<8; i++)
{
dat <<= 1;
P_HC595_SER = CY;
P_HC595_SRCLK = 1;
P_HC595_SRCLK = 0;
}
}
/********************** 顯示掃描函數 ************************/
void DisplayScan(void)
{
Send_595(~LED_TYPE ^ T_COM[display_index]); //輸出位碼
Send_595( LED_TYPE ^ t_display[LED8[display_index]]); //輸出段碼
P_HC595_RCLK = 1;
P_HC595_RCLK = 0; //鎖存輸出數據
if(++display_index >= 8)
display_index = 0; //8位結束回0
}
|