投影片使用說明
1.此投影片使用HTML5技術,為正常使用,請勿使用IE瀏覽器開啟
2.可使用鍵盤之↑、↓、←、→鍵或是畫面右下角
的▲、▼、◄、►切換頁面
P.S:抱歉因為我沒有Office,在製作PPT檔案有些困難,因此使用此工具製作投影片
嵌入式系統期末報告
班級:資工三1
學號:1401K027
姓名:許雲皓
指導教授:陳永隆 教授
第一題:
將旋轉鈕的結果於Uart 輸出
1.1:電路圖-Uart

1.2:修改的程式碼
由於此程式碼直接是範例檔的結果因此不貼上
第二題:
將鍵盤輸入結果於Uart 0輸出
2.1:電路圖:Uart

2.2:修改的程式碼-Main.c
//原本的rUTRSTAT1全部改成rUTRSTAT0、rURXH1改成rURXH0、rUTXH1改成rUTXH0
while(1)
{
while((rUTRSTAT0 & 0x1)==0x0);
data = rURXH0;
if(data=='\r'){
while(!(rUTRSTAT0 & 0x2));
rUTXH0 = data;
while(!(rUTRSTAT0 & 0x2));
rUTXH0 = '\n';
}
else{
while(!(rUTRSTAT0 & 0x2));
rUTXH0 = data;
}
}第三題:
4*4鍵盤掃描
3.1:電路圖:LED*4

3.2a:電路圖:8*8LED(晶片連接處)

3.2b:電路圖:8*8LED(接腳處)

3.3:電路圖:4*4鍵盤

3.4:修改的程式碼Main.c
extern void KeyScan_Test(void);
void Main(void)
{
rGPFCON=0x5500; //新增
rGPFUP=0xffff; //這兩行
Port_Init();
Uart_Init( 0,115200 );
Uart_Select(0 );
Uart_Printf("test key \n");
KeyScan_Test();
}3.4:修改的程式碼keyscan.c(Part. 1)
#define rGPFCON (*(volatile unsigned *)0x56000050)
#define rGPFDAT (*(volatile unsigned *)0x56000054)
#define rGPFUP (*(volatile unsigned *)0x56000058)
#define LED1_ON() (rGPFDAT &= ~0x10)
#define LED3_ON() (rGPFDAT &= ~0x20)
#define LED2_ON() (rGPFDAT &= ~0x40)
#define LED4_ON() (rGPFDAT &= ~0x80)
#define LED1_OFF() (rGPFDAT |= 0x10)
#define LED3_OFF() (rGPFDAT |= 0x20)
#define LED2_OFF() (rGPFDAT |= 0x40)
#define LED4_OFF() (rGPFDAT |= 0x80)
#define LED8X8_Address *(volatile U16 *)( 0x08001000 )
U16 LEDDisp[10][8]={......};//顯示0~9的陣列,因為太常所以省略
U16 LEDDispK[8]={ 0x00,0x00,0x3e,0x08,0x14,0x22,0x00,0x00 };//顯示K的陣列
U16 LEDDispNone[8]={0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00};//顯示空白的陣列
void LED8X8_Display( U16 *LED8X8, U32 d )//LED 8*8顯示的Function{
U16 m ;
while( d-- ){
for( m = 0; m < 8; m++ ){
LED8X8_Address = ( (1<<(8+m))&0xff00 ) | ( (~LED8X8[m]) & 0x00ff ) ;
Delay( 2 ) ;
}
}
}3.4:修改的程式碼keyscan.c(Part. 2)
KeyMatrix_Address =0xe ;//1、4、7、0的程式瑪
if((rGPFDAT&(1<< 0)) == 0 ){
LED1_OFF();
LED2_ON();
LED3_ON();
LED4_ON();
LED8X8_Display(LEDDisp[7],60 );
return 7 ; //SW10
}
else if( (rGPFDAT&(1<< 2)) == 0 ){
LED1_OFF();
LED2_ON();
LED3_OFF();
LED4_OFF();
LED8X8_Display(LEDDisp[4],60 );
return 4 ; //SW13
}
else if( (rGPGDAT&(1<< 3)) == 0 ){
LED1_OFF();
LED2_OFF();
LED3_OFF();
LED4_ON();
LED8X8_Display(LEDDisp[1],60 );
return 1 ; //SW14
}
else if( (rGPGDAT&(1<<11)) == 0 ){
LED1_OFF();
LED2_OFF();
LED3_OFF();
LED4_OFF();
LED8X8_Display(LEDDisp[0],60 );
return 0 ; //SW17
}3.4:修改的程式碼keyscan.c(Part. 3)
KeyMatrix_Address =0xd ;//2、5、8、F的程式碼
if((rGPFDAT&(1<< 0)) == 0 ){
LED1_ON();
LED2_OFF();
LED3_OFF();
LED4_OFF();
LED8X8_Display(LEDDisp[8],60 );
return 8 ;
}
else if( (rGPFDAT&(1<< 2)) == 0 ){
LED1_OFF();
LED2_ON();
LED3_OFF();
LED4_ON();
LED8X8_Display(LEDDisp[5],60 );
return 5 ;
}
else if( (rGPGDAT&(1<< 3)) == 0 ){
LED1_OFF();
LED2_OFF();
LED3_ON();
LED4_OFF();
LED8X8_Display(LEDDisp[2],60 );
return 2 ;
}
else if( (rGPGDAT&(1<<11)) == 0 ){
LED1_ON();
LED2_ON();
LED3_ON();
LED4_ON();
LED8X8_Display(LEDDispK,60 );
LED8X8_Display(LEDDisp[0],60 );
LED8X8_Display(LEDDisp[2],60 );
LED8X8_Display(LEDDisp[7],60 );
LED8X8_Display(LEDDispK,60 );
LED8X8_Display(LEDDisp[0],60 );
LED8X8_Display(LEDDisp[4],60 );
LED8X8_Display(LEDDisp[8],60 );
LED8X8_Display(LEDDispNone,1 );
return 0xf ;
}3.4:修改的程式碼keyscan.c(Part. 4)
KeyMatrix_Address =0xb ;//3、6、9、E的程式碼
if( (rGPFDAT&(1<< 0)) == 0 ){
LED1_ON();
LED2_OFF();
LED3_OFF();
LED4_ON();
LED8X8_Display(LEDDisp[9],60 );
return 9 ;
}
else if( (rGPFDAT&(1<< 2)) == 0 ){
LED1_OFF();
LED2_ON();
LED3_ON();
LED4_OFF();
LED8X8_Display(LEDDisp[6],60 );
return 6 ;
}
else if( (rGPGDAT&(1<< 3)) == 0 ){
LED1_OFF();
LED2_OFF();
LED3_ON();
LED4_ON();
LED8X8_Display(LEDDisp[3],60 );
return 3 ;
}
else if( (rGPGDAT&(1<<11)) == 0 ){
LED1_ON();
LED2_ON();
LED3_ON();
LED4_OFF();
LED8X8_Display(LEDDispNone,60 );
return 0xe ;
}3.4:修改的程式碼keyscan.c(Part. 5)
KeyMatrix_Address &=0x7 ;//A、B、C、D的程式碼
if( (rGPFDAT&(1<< 0)) == 0 ){
LED1_ON();
LED2_OFF();
LED3_ON();
LED4_OFF();
LED8X8_Display(LEDDispNone,60 );
return 0xa ;
}
else if( (rGPFDAT&(1<< 2)) == 0 ){
LED1_ON();
LED2_OFF();
LED3_ON();
LED4_ON();
LED8X8_Display(LEDDispNone,60 );
return 0xb ;
}
else if( (rGPGDAT&(1<< 3)) == 0 ){
LED1_ON();
LED2_ON();
LED3_OFF();
LED4_OFF();
LED8X8_Display(LEDDispNone,60 );
return 0xc ;
}
else if( (rGPGDAT&(1<<11)) == 0 ){
LED1_ON();
LED2_ON();
LED3_OFF();
LED4_ON();
LED8X8_Display(LEDDispNone,60 );
return 0xd ;
}感想
許久沒接觸硬體和C 語言了,老實說還滿不習慣的(畢竟平常用的程式語言是HTML、CSS、JavaScript和PHP)
這堂課除了讓我有機會重新了解C語言的用法外,還讓我了解到除了8051以外的硬體架構,使用了不同的工具,解決了不同的問題,雖然教的東西不多,但我吸收到許多不同的硬體資訊,ARM架構的硬體在我們身邊不知道多少年了(比如:使用iOS、Android、Windows Phone的裝置),不過第一次碰到他的底層讓我感到新鮮,雖然說未來不一定會繼續學下去,不過我覺得還滿充實的。
嵌入式系統報告
By NumberTen Hsu
嵌入式系統報告
- 690