LED控制實習 KEY與LED控制實習 DAC輸出三角波實習
/************** 輸出控制實習 *****************************
*檔名︰GPIO1.C
*功能︰令LED1-4(P10-13)遞加或遞減輸出
*模擬:開啟Watch、Logic Analyzer及GPIO視窗,快速執行
*附加:IO.C
**********************************************************/
#include "LPC2106.h" // 暫存器設定
void main(void)
{
uint8 i; // 宣告8-bit變數
IODIR = LED1+LED2+LED3+LED4; // 設定LED1-4接腳為輸出
while(1) // 重覆執行
{for(i=0;i<16;i++)
{ IOCLR = ~(i<<10); // 清除LED4-1該位元=0
IOSET = i<<10; // 變數i由LED4-1遞加輸出
//IOSET = ~(i<<10); // 設定LED4-1該位元=1
//IOCLR = i<<10; // 變數i由LED4-1低電位輸出,形成遞減顯示
Delay_ms(100); // 延時
}
}
}
/**********************按鍵與輸出控制實習**********************
*檔名︰GPIO2.C
*功能︰按鍵KEY1(P14)令LED遞加,按鍵KEY2(P15)令LED遞減。
*模擬:開啟Watch及GPIO視窗,快速執行。
*操作:按KEY1令LED遞加,按KEY2令LED遞減。
*附加:IO.C
********************************************************************/
#include "LPC2106.h"
int16 i=0; // 宣告有符號16-bit變數
void LED_INC(void) // LED遞加函數
{
i++; // 變數遞加
if(i>15) i=0; // 由0遞加到15重覆
IOCLR = ~(i<<10); // 清除LED4-1該位元=0
IOSET = i<<10; // 變數i由LED4-1輸出
//IOSET = ~(i<<10); // 設定LED4-1該位元=1
//IOCLR = i<<10; // 變數i由LED4-1低電位輸出
Delay_ms(2); // 延時,消除機械跳動
while((IOPIN & KEY1)==0); // 等待KEY1鍵放開
Delay_ms(2); // 延時,消除機械跳動
}
void LED_DEC(void) // LED遞減函數
{
i--; // 變數遞減
if(i < 0) i=15; // 由15遞減到0重覆
IOCLR = ~(i<<10); // 清除LED4-1該位元=0
IOSET = i<<10; // 變數i由LED4-1輸出
//IOSET = ~(i<<10); // 設定LED4-1該位元=1
//IOCLR = i<<10; // 變數i由LED4-1低電位輸出
Delay_ms(2); // 延時,消除機械跳動
while((IOPIN & KEY2)==0); // 等待KEY2鍵放開
Delay_ms(2); // 延時,消除機械跳動
}
void main(void)
{
IODIR = IOCLR =LED1+LED2+LED3+LED4;// 設定LED1-4接腳輸出0
IOSET = i<<10; // 變數i由LED4-1輸出
while(1) // 重覆執行
{
if((IOPIN & KEY1) ==0 ) LED_INC(); // 若按KEY1鍵遞加
if((IOPIN & KEY2) ==0 ) LED_DEC();// 若按KEY2鍵遞減
}
}
/*****************使DAC輸出三角波實習範例*********************
*檔名:DAC1.C
*功能:由P00-07輸出經DAC輸出三角波。
*模擬:開啟Logic Analyzer視窗,設定PORT0-7為類比輸出,顯示三角波
*操作:外加8-bit的DAC電路,以示波器量測類比波形。
***********************************************************/
#include "LPC2106.H"
void main(void)
{
int16 i;
IODIR = 0xff; // 設定接腳P07-00為輸出
while(1) // 永久循環執行
{
for (i=0;i<256;i++) //電壓上升
{
IOCLR=~i; // 清除該位元資料
IOSET=i; // 設定該輸出1
}
for (i=255;i>=0;i--) //電壓下降
{
IOCLR=~i; // 清除該位元資料
IOSET=i; // 設定該輸出1
}
}
}
/****************** LCD顯示輸出字串範例***********
*檔名:LCD1.C
*動作:由LCD顯示兩行文字及畫面右移
*接線:P22=LCD_RS,P23=LCD_EN ,P24-31=LCD_DATA,DBGSEL=0
*附加:IO.C
********************************************************/
#include "LPC2106.h"
void main(void)
{
uint8 i;
LCD_init(); //重置及清除LCD
LCD_Cmd(0x80); //由第一行開始顯示
for(i='A' ; i<='Z'; i++) Send_Data(i); //顯示第一行文字
LCD_Cmd(0xc0); //由第二行開始顯示
for(i='a' ; i<='z'; i++) Send_Data(i); //顯示第二行文字
while(1)
{
LCD_Cmd(0x1C); //0001 1100 令整個劃面右移
//bit3:S/C(Display/cursor):1=整個顯示幕,0=游標
//bit2:R/L(Right/Left):1=右移,0=左移
Delay_ms(500); //延時
}
}