?? main.c
字號:
/***********************************************************
實驗名稱:矩陣按鍵
程序說明:本程序測試了矩陣按鍵
實驗平臺:stc15單片機開發板v1.0版
日期:2012-05-27
QQ: 259902530
www.stcstudy.com 61mcu.taobao.com 版權所有
***********************************************************/
//矩陣按鍵測試程序, 輸出結果用串口傳輸到上位機顯示,可采用STC下載軟件自帶串口調試助手觀察
#include "STC15F2K.H"
#include "UART.H"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
char SMG[]="0123456789";
void delay_ms(uchar t); //11.0592M晶振下 延時 t ms;
uchar ScanKey(void); //返回按鍵的碼值(按下按鍵12時,返回12,否則返回0)
//只有松手后才返回碼值
void main(void)
{
uchar New,L[3];
InitUART();
while(1)
{
New= ScanKey(); //獲取新按鍵信息
if(New)
{
SendString("按鍵編碼為 : ");
L[0] = SMG[New/10];
L[1] = SMG[New%10];
L[2] = '\0';
SendString(L);
SendData('\r');
SendData('\n');
}
}
}
void delay_ms(uchar t)
{
unsigned char a,b;
while(t--)
for(b=178;b>0;b--)
for(a=14;a>0;a--);
}
uchar ScanKey(void)
{
uchar Tmp,Tmp2,KeyNum;
P3=0x0f;
if(P3!=0x0f)
{
delay_ms(8);
if(P3!=0x0f)
{
Tmp=P3;
P3 =0xF0;
_nop_();_nop_();_nop_();_nop_();
Tmp2=P3;
Tmp=Tmp+Tmp2;
while(P3!=0xF0) ;
switch(Tmp&0xF0)
{
case 0xE0:KeyNum=0;break;
case 0xD0:KeyNum=4;break;
case 0xB0:KeyNum=8;break;
case 0x70:KeyNum=12;break;
}
switch(Tmp&0x0F)
{
case 0x0E:KeyNum+=1;break;
case 0x0D:KeyNum+=2;break;
case 0x0B:KeyNum+=3;break;
case 0x07:KeyNum+=4;break;
}
P3|=0x03; //此句必須,否則影響 串口輸出
return KeyNum;
}
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -