執行個體目的:掌握proteus軟體的使用及調試方法,學習io程式設計。
執行個體内容:
學習使用proteus、ads、keil for arm軟體,掌握繪制原理及編譯程式。
鍵盤輸入,當檢測到有按鍵輸入時,對發光二極管進行取反控制。使用
i/o口輸入方式對按鍵進行掃描。
執行個體步驟:
在proteus中繪制原理圖。
在keil for arm中輸入程式,并編譯通過。
加載elf程式,觀察仿真結果。
采用keil for arm與proteus的整合方式聯調。
lpc2000系列作為 “微控制器”,其gpio特性就顯得很
重要。它具有如下的特性:
①可以獨立控制每個gpio口的方向(輸入/輸出模式);
②可以獨立設定每個gpio的輸出狀态(高/低電平);
③所有gpio口在複位後預設為輸入狀态。
lpc2114/2124微控制器具有兩個端口--p0和p1,可以作為gpio使用的引腳數為46個。
lpc2210/2212/2214微控制器還包含另外兩個端口--p2和p3,這個兩個端口與外部存儲器總線複用,當它們全部作為gpio使用時,gpio引腳數多達112個
①引腳設定為輸出方式時,輸出狀态由ioxset和ioxclr中最後操作的寄存器決定;
②大部分gpio輸出為推挽方式(個别引腳為開漏輸出),正常拉出/灌入電流均為4ma(短時間極限值40ma);
③複位後預設所有gpio為輸入模式。。
功能:鍵盤輸入.當檢測到有按鍵輸入時,對發光二極管進行取反控制 使用i/o口輸入方式對按鍵進行掃描
平台:nxp-lpc2124
環境:keil4 + proteus7
要求如圖
/******************************************************************************/
/* this file is part of the uvision/arm development tools */
/* copyright keil elektronik gmbh 2002-2004 */
/*******************************************************************************
*file:main.c
*功能: 鍵盤輸入.當檢測到有按鍵輸入時,對發光二極管進行取反控制
* 使用i/o口輸入方式對按鍵進行掃描
*******************************************************************************/
#include "config.h"
#define ledcon 0x00000200 // p0.9引腳控制led,低電平點亮
#define key 0x00008000 // p0.15引腳連接配接按鍵
/*******************************************************************************
*名稱:waitkey()
*功能:等待一個有效按鍵.本函數有去抖功能
void waitkey(void)
{
uint32 i;
while(1)
{
// 當按下p0.15以後會輸出低電平, p0.15位為0
while((io0pin & key) != 0); // 等待按鍵按下, io0pin & key) != 0表示io0pin的p0.15不是0, 辨別沒有按下
for(i = 0; i < 50000; i++); // 延時消抖
// 電路中的脈沖可能不穩定, 也就是說可能出現, 電平瞬時反轉的情況
// 而且按下的過程, 由于兩塊電極有一定的抖動, 這段時間電平不穩定,
// 是以應該寫程式消除電極抖動産生的影響
//
// 我們開始先判斷電極p0.15是不是按下了, 如果按下了, 就延時一定時間再判斷p0.15是不是按下了[p0.15 == 0]
// 如果兩次檢測都p0.15 == 0我們才認為是一個有效的按下事件
if((io0pin & key) == 0) // 如果io0pin的p0.15位引腳為0, 說明按下了p0.15
{
break; // 停止等的閃爍
}
}
// 隻有當使用者松開以後, led燈才應該亮
while((io0pin & key) == 0); // 等待按鍵放開
}
*名稱:main()
*功能:讀取按鍵,控制led閃爍
int main(void)
{
pinsel0 = 0x00000000; // 設定所有引腳連接配接gpi0[功能選擇]
pinsel1 = 0x00000000; //
io0dir |= ledcon; // 設定led控制口為輸出,其它i/o為輸入[将p0.9置1, p0.9用于輸出]
while( 1 )
io0set |= ledcon; // 将p0.9引腳設定為輸出高電平 = 1[led燈暗]
waitkey( );
// 将p0.9引腳設定為輸出低電平 = 0[led燈亮]
io0clr = ledcon;
}
轉載:http://blog.csdn.net/gatieme/article/details/21593485