投影片使用說明

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