:::

論壇索引


Board index » All Posts (cisity)




如何用4X4 去控制LED!! (急)
#1
新會員
新會員


因為期末作業要用以下程式修改
用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
頂部






:::

Microchip連結

https://www.linkedin.com/company/microchiptechnologytaiwan
https://www.facebook.com/microchiptechnologytaiwan/?locale=zh_TW
https://mkpage.microchip.com/l/1082123/2025-03-12/2stnv5
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------