//实现4个独立按键的功能,对应的体现在数码管上
#include "MSP430X14X.H"
//宏定义
typedef unsigned char uchar;
typedef unsigned int uint;
//定义独立按键的输入量
#define keyin (P1IN & 0x0F)
//数码管的编码表
uchar scandata[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//调用的函数声明
void Inital_Port(void);
void delay_ms(uint i);
int main( void )
{
uchar temp,keyval = 0;
// Stop watchdog
timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
//对引脚进行初始化
Inital_Port();
while(1)
{
if(keyin != 0x0f) //如果有键被按下
{
//delay_ms(20); //延时消抖
if(keyin != 0x0f) //再次检测按键状态
{
temp=keyin;
while(keyin != 0x0f); //等待按键被放开
switch(temp) //转换键值
{
case 0x0e:
keyval = 1;break;
case 0x0d:
keyval = 2;break;
case 0x0b:
keyval = 3;break;
case 0x07:
keyval = 4;break;
default:
keyval = 0;break;
}
P5OUT = scandata[keyval]; //用一位数码管显示
P3OUT &= ~BIT4; //P3.4连接的LED闪烁一下
delay_ms(20);delay_ms(20);
P3OUT |= BIT4;
}
}
}
return 0;
}
/*******************************
延时函数
********************************/
void delay_ms(uint i)
{
uint j;
for(j=1000;j>0;j--)
{
for(;i>0;i--)
{;}
}
}
/***********************************
端口初始化函数
**********************************/
void Inital_Port(void)
{
/*下面六行程序关闭所有的IO口*/
P1DIR = 0XFF;
P1OUT = 0XFF;
P2DIR = 0XFF;
P2OUT = 0XFF;
P3DIR = 0XFF;
P3OUT = 0XFF;
P4DIR = 0XFF;
P4OUT = 0XFF;
P5DIR = 0XFF;
P5OUT = 0XFF;
P6DIR = 0XFF;
P6OUT = 0XFF;
P1DIR = BIT7; //设置P1.0~P.6为输入状态,P.7为输出
P1OUT = 0;
P3DIR |= BIT4; //设置P3.4为输出状态
P3OUT |= BIT4; //P3.4输出1,控制LED D9
P4DIR = 0xff;
P5DIR = 0xff;
P5OUT = 0xc0; //P4控制数码管段
P4OUT = 0x00; //P5控制数码管位
}
这是我对独立键盘的程序,原本没有什么新意,只是普通的延时消抖,可是在430
单片机上运行时,竟然可以不用延时消抖,甚至数秒级的消抖,我实在不解,请高手指点
你的问题 没有说清楚...........
另外 你写程序的风格不提倡! 还有,430有很多外部中断。。。按键的话,最好使用中断........
一周热门 更多>