标题:
基于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.51hei.com/bbs/)
Powered by Discuz! X3.1