欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
基于430F149系列的4*4按鍵12864顯示
[打印本頁]
作者:
金魚小鼠
時間:
2016-6-1 15:30
標題:
基于430F149系列的4*4按鍵12864顯示
這是基于MSP430F149系列的4*4按鍵控制12864液晶顯示IR程序
0.png
(90.71 KB, 下載次數: 207)
下載附件
2016-6-1 19:46 上傳
完整程序下載:
獨立按鍵.zip
(315.56 KB, 下載次數: 33)
2016-6-1 15:28 上傳
點擊文件名下載附件
12864顯示
下載積分: 黑幣 -5
部分程序預覽:
/***************************
2016/4/26 獨立按鍵中斷
**************************/
#include<MSP430x14x.h>
#include "key.h"
#include "Config.h"
//選用端口定義
#define KEYDIR P1DIR
#define KEYIES P1IES
#define KEYIE P1IE
#define KEYIN P1IN
#define KEYIFG P1IFG
//定義鍵盤管教
#define KEY0 BIT4
#define KEY1 BIT5
#define KEY2 BIT6
#define KEY3 BIT7
#define KEY_MOD (KEY0+KEY1+KEY2+KEY3)
unsigned char KeyZhi=KEY_NONE; //經過確認的按鍵值
unsigned char KeyCnt; //某次連續按鍵的次數
unsigned char KeyDown=KEY_NONE; //被按下的鍵
#define KEY_TIME 50 //連續按鍵經過此時間,按鍵次數加1
unsigned char KeyTime; //記錄連續按鍵的時間
int flag=0;
/*********************************************
初始化
*********************************************/
void InitKey()
{
KEYDIR=KEYDIR & (~(KEY0+KEY1+KEY2+KEY3)); //設置端口為輸入
KEYIES=KEYIES | (KEY0+KEY1+KEY2+KEY3); //設置下降沿中斷
KEYIE=KEYIE | (KEY0+KEY1+KEY2+KEY3); //打開端口中斷
KeyCnt=0; //按鍵次數清零
LED8DIR = 0xff; //設置IO口方向為輸出
LED8 = 0xFF; //初始設置為00
}
/******************************************
打開或關閉鍵盤中斷
*********************************************/
void GoKey(unsigned char sw)
{
if(sw==0)
KEYIE=KEYIE &(~ (KEY0+KEY1+KEY2+KEY3));
else
KEYIE=KEYIE | (KEY0+KEY1+KEY2+KEY3);
}
/*****************************************
獲得鍵值和連續按下的次數,并清除記錄和按鍵次數
key_cnt;返回某一處按鍵被連續按下的次數
返回值:按下的有效的鍵的鍵值
******************************************/
unsigned char GetKeyZhi(unsigned char *key_cnt)
{
unsigned char q0;
q0=KeyZhi;
KeyZhi=KEY_NONE;
*key_cnt=KeyCnt;
KeyCnt=0;
return q0;
}
/*****************************************
端口中斷函數
多中斷中斷源:P1IFG.0~P1IFG.7只用到P1.4,P1.5,P1.6,P1.7
進入中斷后應該先判斷中斷源,退出中斷時應該先清除中斷標志,否則將再次觸發中斷
******************************************/
#pragma vector=PORT1_VECTOR
__interrupt void Prot1()
{
unsigned char q0;
if((KEYIFG&KEY0)==KEY0)
{
/*LED8 |= 1<<0; //如果要顯示閃爍別的燈,改0為其他就可以(0~7)
delay_ms(500);
LED8 &= ~(1<<0);
delay_ms(500);*/
flag=1;
KEYIFG=KEYIFG&(~KEY0); //清除中斷標志
//KeyDown=KEY_P14;
//q0=1;
}
else if((KEYIFG&KEY1)==KEY1)
{
/*LED8 |= 1<<1; //如果要顯示閃爍別的燈,改0為其他就可以(0~7)
delay_ms(500);
LED8 &= ~(1<<1);
delay_ms(500);*/
flag=2;
KEYIFG=KEYIFG&(~KEY1); //清除中斷標志
/*KeyDown=KEY_P15;
q0=1;*/
}
else if((KEYIFG&KEY2)==KEY2)
{
/*LED8 |= 1<<2; //如果要顯示閃爍別的燈,改0為其他就可以(0~7)
delay_ms(500);
LED8 &= ~(1<<2);
delay_ms(500);*/
flag=3;
KEYIFG=KEYIFG&(~KEY2); //清除中斷標志
/*KeyDown=KEY_P16;
q0=1;*/
}
else if((KEYIFG&KEY3)==KEY3)
{
/*LED8 |= 1<<3; //如果要顯示閃爍別的燈,改0為其他就可以(0~7)
delay_ms(500);
LED8 &= ~(1<<3);
delay_ms(500);*/
flag=4;
KEYIFG=KEYIFG&(~KEY3); //清除中斷標志
/*KeyDown=KEY_P17;
q0=1;*/
}
if(q0==1)
{
GoKey(0);
KeyTime=0;
KeyCnt=0;
//GotimeDFA();
}
}
/********************************************
系統初始化
******************************************/
void InitSys()
{
unsigned int iq0;
//使用XT2振蕩器
BCSCTL1=BCSCTL1&(~XT2OFF);
do
{
IFG1=IFG1&(~OFIFG);
for(iq0=0xff;iq0>0;iq0--);
}
while((IFG1&OFIFG)!=0);
BCSCTL2=SELM_2+SELS;
InitKey();
_EINT();
}
/***********************************************
主函數
***********************************************/
void main(void)
{
unsigned char key[2];
WDTCTL=WDTPW+WDTHOLD;
InitSys();
start:
key[0]=GetKeyZhi(&key[1]); //讀按鍵和鍵值
LED8=0XF0;
if(key[0]==KEY_NONE)
{LED8=0XF0;
while(1)
{
if(flag==1)
{
LED8=0X01;flag=0;
}
if(flag==2)
{
LED8=0X02;flag=0;
}
if(flag==3)
{
LED8=0X04;flag=0;
}
if(flag==4)
{
LED8=0X08;flag=0;
}
}
}
LPM3;
goto start;
}
復制代碼
作者:
liming_nefu
時間:
2017-4-3 15:29
12864是帶字庫的還是不帶字庫的?
作者:
zjh158
時間:
2017-7-23 22:04
謝謝分享。。。。。。。。。。。。。。。。。
作者:
51電子小車
時間:
2017-7-24 13:21
說的是用的矩陣鍵盤和12864,但是確實獨立按鍵,也沒有顯示
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1