1. 写的MSP430的4×4按键输入8个数码管显示的程序,调试时发现当改变行扫描顺序,结果就不对,详情如下,求解
会不会是P1.6(也就是第三行)下拉电阻使能的问题,在for循环之前加一句P1REN|=BIT6;
P1OUT|=BIT6;(上拉电阻使能)试试。
2. 求MSP430单片机4X4矩阵键盘的中断扫描程序
//msp430F149 4*4矩阵键盘P1口中断扫描
#include<msp430x14x.h>
#define KEY_DIR P1DIR
#define KEY_OUT P1OUT
#define KEY_IN P1IN
#define KEY_IE P1IE
#define KEY_IES P1IES
#define KEY_IFG P1IFG
/***************全局变量***************/
unsigned char Key_Val; //存放键值
void CtrlKey(unsigned char sw); //控制键盘开关//sw=0关 sw=1开
/*******************************************
函数名称:Init_Keypad
功 能:初始化扫描键盘的IO端口
参 数:无
返回值 :无
********************************************/
void Init_Keypad(void)
{
KEY_DIR = 0x0f; //P1.0~P1.3设置为输出状态,P1.4~P1.7输入 状态(上拉H)
KEY_OUT=0;
KEY_IES =0xf0; //P1.4~P1.7允许中断
KEY_IE =0xf0; //P1.4~P1.7下降沿触发中断
KEY_IFG=0; //中断标志清0
Key_Val = 0;
}
/*******************************************
函数名称:Check_Key
功 能:扫描键盘的IO端口,获得键值
参 数:无
返回值 :无
********************************************/
//p14\5\6\7 接上拉电阻
/***************************************
key_Val 对应键值
列:[p14] [p15] [p16] [p17]
↓ ↓ ↓ ↓
行:
[p13]→ 1 2 3 4
[p12]→ 5 6 7 8
[p11]→ 9 10 11 12
[p10]→ 13 14 15 16
***************************************/
void Check_Key(void)
{
unsigned char row ,col,tmp1,tmp2;
unsigned char keymap[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};//设置键盘逻辑键值
与程序计算键值的映射
tmp1 = 0x08;
for(row = 0;row < 4;row++) //行扫描
{
KEY_OUT = 0x0f; //P1.4~P1.7输出全1
KEY_OUT -= tmp1; //P1.4~p1.7输出四位中有一个为0
tmp1 >>=1;
if((KEY_IN & 0xf0)<0xf0) //是否P1IN的P1.0~P1.3中有一位为0
{
tmp2 = 0x10; // tmp2用于检测出哪一位为0
for(col = 0;col < 4;col++) // 列检测
{
if((KEY_IN & tmp2) == 0x00) // 是否是该列,等于0为是
{
Key_Val = keymap[row*4 + col]; // 获取键值
return; // 退出循环
}
tmp2 <<= 1; // tmp2右移1位
}
}
}
}
/*******************************************
函数名称:delay
功 能:延时约15ms,完成消抖功能
参 数:无
返回值 :t= tmp*5*clk 根据使用时钟调整tmp值
********************************************/
void delay(void)
{
unsigned int tmp;
for(tmp = 12000;tmp > 0;tmp--);
}
/*******************************************
函数名称:Key_Event
功 能:检测按键,并获取键值
参 数:无
返回值 :无
********************************************/
void Key_Event(void)
{
unsigned char tmp;
KEY_OUT =0; // 设置P1OUT全为0,等待按键输入
tmp = KEY_IN; // 获取 p1IN
if((tmp & 0xf0) < 0xf0) //如果有键按下
{
delay(); //消除抖动
Check_Key(); // 调用check_Key(),获取键值
}
}
/*********************************************************************
控制打开或者关闭键盘中断
SW= 0:关闭; ELSE:打开
*********************************************************************/
void CtrlKey(unsigned char sw)
{
if(sw==0)
KEY_IE =0; //关闭端口中断
else
KEY_IE =0xf0; //打开端口中断
}
/*端口1按键中断*/
#pragma vector=PORT1_VECTOR
__interrupt void Port(void)
{
if((KEY_IFG&0xf0)!=0)
{
Key_Event();
if(Key_Val!=0) //键值!=0有键按下
{
CtrlKey(0); //关键盘中断
}
}
KEY_IFG=0;KEY_OUT=0; //清中断标志
}
3. 跪求msp430f5529的ds18b20的程序
可以应用于能量收集、无线传感以及自动抄表等场合,是最低工作功耗的单片机之一版。MSP430F5529开发板MSP-EXP430F5529是权MSP430F5529单片机的开发平台,由电源选择开关、RF射频接口、 microSD card插槽、MSP430F5529芯片及引出引脚、USB接口、JTAG仿真接口、齿轮电位计、电容触摸按键、LED、按钮、 EZ-FET内置仿真器、102x64点阵LCD和三坐标轴加速度计组成。该开发板将I/O引脚接出来,方便用户进行实验操作,既可用于科研开发,又适合实验教学、课程设计、毕业设计等,为广大高校师生提供了良好的实验开发环境,同时也是广大电子爱好者学习、开发MSP430系列单片机的良好平台。
4. msp430f6638单片机怎么使一个按键按下去三个灯全亮,再按下去全灭
这个和哪种型号的单片机无关,任何单片机都可以完成。
1、先设置一个IO(RD1)口用来版接收你的按键信号。
2、再通过权一个IO(RD2)口来控制你的信号灯。
3、从程序中控制,当IO(RD1)口收到第一个按键信号(高、低电平时),将IO(RD2)置位,通过电平的变化来控制灯的亮和灭。在程序中记得置标示位啊。