Re: 如何用4X4 去控制LED!! (急)
|
||||
---|---|---|---|---|
資深會員
|
參照:
捐給創世基金會不行嗎?
發表於: 2008/1/14 15:24
|
|||
|
如何用4X4 去控制LED!! (急)
|
||||
---|---|---|---|---|
新會員
|
因為期末作業要用以下程式修改
用4X4 去控制LED 小弟真的想不出來 希望藉助各位大大幫助!! 以下是我們課本的程式碼!! #include <p18cxxx.h> #include <delays.h> #include "lcdcmd.c" #define KeyBoard_LENGTH 16 #define ROW_1 1 #define ROW_2 2 #define ROW_3 3 #define ROW_4 4 Const rom unsigned char *UC_KeyBoard_Array[KeyBoard_LENGTH]={"7","8","9","C","4","5","6","D","1","2","3","B","0","F","A","E"}; unsigned char UC_Result,UC_Result_OLD=0,UC_Counter=0,UC_Loop=0; void F_Initial(void); unsigned char F_Check_COL(unsigned char,unsigned char); void F_Display_KeyBoard(void); void main(void) { unsigned char UC_ROW=1,UC_COL,UC_Address=0x80; F_Initial(); F_LCD_Initial(); while (1) { switch ( UC_ROW ) { case ROW_1: PORTD = 0x07; UC_COL = 0xF0 & PORTD; if ( 0xF0 ^ UC_COL ) { UC_Result = F_Check_COL(0,UC_COL); F_Display_KeyBoard(); } UC_ROW = ROW_2; break; case ROW_2: PORTD = 0x0B; UC_COL = 0xF0 & PORTD; if ( 0xF0 ^ UC_COL ) { UC_Result = F_Check_COL(4,UC_COL); F_Display_KeyBoard(); } UC_ROW = ROW_3; break; case ROW_3: PORTD = 0x0D; UC_COL = 0xF0 & PORTD; if ( 0xF0 ^ UC_COL ) { UC_Result = F_Check_COL(8,UC_COL); F_Display_KeyBoard(); } UC_ROW = ROW_4; break; case ROW_4: PORTD = 0x0E; UC_COL = 0xF0 & PORTD; if ( 0xF0 ^ UC_COL ) { UC_Result = F_Check_COL(12,UC_COL); F_Display_KeyBoard(); } UC_ROW = ROW_1; break; default: break; } UC_Loop++; if ( UC_Counter == 16 ) { UC_Counter = 0; F_LCD_Set_DDA( UC_Address ^= 0x40); } if ( UC_Loop == 6 ) { UC_Loop = 0; UC_Result_OLD = 0; } } } void F_Initial(void) { TRISB = 0; TRISD = 0xF0; TRISE = 0; } unsigned char F_Check_COL(unsigned char UC_ROW,unsigned char UC_COL) { Delay1KTCYx(50); if ( UC_COL == ( 0xF0 & PORTD ) ) { switch ( UC_COL ) { case 0x70: return ( *UC_KeyBoard_Array[(UC_ROW)] ); case 0xB0: return ( *UC_KeyBoard_Array[(UC_ROW + 1)] ); case 0xD0: return ( *UC_KeyBoard_Array[(UC_ROW + 2)] ); case 0xE0: return ( *UC_KeyBoard_Array[(UC_ROW + 3)] ); default: return (0); } } else return (0); } void F_Display_KeyBoard(void) { if ( (UC_Result) ) { if ( UC_Result != UC_Result_OLD ) { F_LCD_Put_Data(UC_Result); UC_Result_OLD = UC_Result; UC_Counter++; } UC_Loop = 0; } } 程式結束了@@" 如何利用鍵盤來控制LED所亮之燈數?
發表於: 2008/1/13 22:58
|
|||
|