資源簡介
51單片機的按鍵控燈程序,可以作為參考

代碼片段和文件信息
/*******************************************************************************
*?????????????????
*????????????????? ???????普中科技
--------------------------------------------------------------------------------
*?實?驗?名 ?:?獨立按鍵控制LED實驗
*?實驗說明???????:?每個按鍵控制一個LED
*?連接方式???????:?見接線圖
*?注????意 ?:?
*******************************************************************************/
//--包含你要使用的頭文件--//
#include? ???//此文件中定義了51的一些特殊功能寄存器
#include?
//--定義要使用的IO口--//
#define??GPIO_KEY?P1??//獨立鍵盤用P1口
#define??GPIO_LED?P0??//led使用P0口
//--聲明全局函數--//
void?Delay10ms(unsigned?int?c);???//延時10ms
unsigned?char?Key_Scan();
/*******************************************************************************
*?函?數?名?????????:?main
*?函數功能 ???:?主函數
*?輸????入?????????:?無
*?輸????出?????????:?無
*******************************************************************************/
void?main(void)
{
unsigned?char?ledValue?keyNum;
ledValue?=?0x01;
while?(1)
{
keyNum?=?Key_Scan();??//掃描鍵盤
switch?(keyNum)
{
case(0xFE)?: ??//返回按鍵K1的數據
ledValue?=?0x01;
break;
case(0xFD)?: ??//返回按鍵K2的數據
ledValue?=?0x02;
break;
case(0xFB)?: ??//返回按鍵K3的數據
ledValue?=?0x04;
break;
case(0xF7)?: ??//返回按鍵K4的數據
ledValue?=?0x08;
break;
case(0xEF)?: ??//返回按鍵K5的數據
ledValue?=?0x10;
break;
case(0xDF)?: ??//返回按鍵K6的數據
ledValue?=?0x20;
break;
case(0xBF)?: ??//返回按鍵K7的數據
ledValue?=?0x40;
break;
case(0x7F)?: ??//返回按鍵K8的數據
ledValue?=?0x80;
break;
default:
break;
}
GPIO_LED?=?ledValue;//點亮LED燈
}
}
/*******************************************************************************
*?函?數?名?????????:?Key_Scan()
*?函數功能 ???:?掃描鍵盤
*?輸????入?????????:?無
*?輸????出?????????:?讀取到的鍵值
*******************************************************************************/
unsigned?char?Key_Scan()
{
unsigned?char?keyValue?=?0??i;?//保存鍵值
//--檢測按鍵1--//
if?(GPIO_KEY?!=?0xFF) //檢測按鍵K1是否按下
{
Delay10ms(1); //消除抖動
if?(GPIO_KEY?!=?0xFF) //再次檢測按鍵是否按下
{
keyValue?=?GPIO_KEY;
i?=?0;
while?((i<50)?&&?(GPIO_KEY?!=?0xFF)) ?//檢測按鍵是否松開
{
Delay10ms(1);
i++;
}
}
}
return?keyValue;???//將讀取到鍵值的值返回
}
/*******************************************************************************
*?函?數?名?????????:?Delay10ms
*?函數功能 ???:?延時函數,延時10ms
*?輸????入?????????:?無
*?輸????出?????????:?無
*******************************************************************************/
void?Delay10ms(unsigned?int?c)???//誤差?0us
{
????unsigned?char?a?b;
//--c已經在傳遞過來的時候已經賦值了,所以在for語句第一句就不用賦值了--//
????for?(;c>0;c--)
{
for?(b=38;b>0;b--)
{
for?(a=130;a>0;a--);
}
???????????
}???????
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3079??2015-11-12?11:09??8個按鍵控制8個LED燈\main.c
?????文件???????3498??2015-11-12?11:09??8個按鍵控制8個LED燈\pro
?????文件????????563??2015-11-12?11:09??8個按鍵控制8個LED燈\pro.hex
?????文件???????6952??2015-11-12?11:09??8個按鍵控制8個LED燈\pro.M51
?????文件?????141959??2015-11-12?11:09??8個按鍵控制8個LED燈\pro.uvopt
?????文件??????13395??2015-11-12?11:09??8個按鍵控制8個LED燈\pro.uvproj
?????文件???????6376??2015-11-12?11:09??8個按鍵控制8個LED燈\STARTUP.A51
?????目錄??????????0??2016-03-01?19:36??8個按鍵控制8個LED燈
-----------?---------??----------?-----??----
???????????????175822????????????????????8
- 上一篇:輪胎動力學模型的建立與仿真分析
- 下一篇:數據挖掘建模過程——思維導圖
評論
共有 條評論