📄 msp430f149的4乘4键盘中断+液晶显示程序.txt
字号:
nRes = 11;
}
nP13 = P1IN & BIT3;
if (nP13 == 0)
{
nRes = 12;
//P5OUT=0x00;
}
//P1.5输出低电平
P1OUT = ~(BIT5);
Delay(50);
nP10 = P1IN & BIT0;
if (nP10 == 0)
{
nRes = 5;
}
nP11 = P1IN & BIT1;
if (nP11 == 0)
{
nRes = 6;
}
nP12 = P1IN & BIT2;
if (nP12 == 0)
{
nRes = 7;
}
nP13 = P1IN & BIT3;
if (nP13 == 0)
{
nRes = 8;
//P5OUT=0x00;
}
//P1.4输出低电平
P1OUT = ~(BIT4);
nP10 = P1IN & BIT0;
if (nP10 == 0)
{
nRes = 1;
}
nP11 = P1IN & BIT1;
if (nP11 == 0)
{
nRes = 2;
}
nP12 = P1IN & BIT2;
if (nP12 == 0)
{
nRes = 3;
}
nP13 = P1IN & BIT3;
if (nP13 == 0)
{
nRes = 4;
}
P1OUT = 0x00;//恢复以前值。
//读取各个管脚的状态
for(;;)
{
if((P1IN&0x0F)==0x0F )
{
break;//等待松开按键
}
}
return nRes;
}
*/
/**************************************************************************/
// 处理来自端口 1 的中断
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR(void)
{
int key_value;
Delay(30000);
key_value=KeyProcess();
switch(key_value)
{
case 1:
// Write_Command(0x01);//清屏,将空格字符ASCII码20H写入到所有的DDRAM单元
Clear_Second_Line();
Delay(5000);
Write_Command(0x06);//设置进入方式,DDRAM自增,整个显示右移
Delay(500);
Write_Command(0xC0); //设置DDRAM的初始地址
Write_Data('8');
break;
case 2:
//Write_Command(0x01);//清屏,将空格字符ASCII码20H写入到所有的DDRAM单元
Clear_Second_Line();
Delay(5000);
Write_Command(0x06);//设置进入方式,DDRAM自增,整个显示右移
Delay(500);
Write_Command(0xC0); //设置DDRAM的初始地址
Write_Data('4');
break;
case 3:
// Write_Command(0x01);//清屏,将空格字符ASCII码20H写入到所有的DDRAM单元
Clear_Second_Line();
Delay(5000);
Write_Command(0x06);//设置进入方式,DDRAM自增,整个显示右移
Delay(500);
Write_Command(0xC0); //设置DDRAM的初始地址
Write_Data('0');
break;
case 4:
Write_Command(0x01);//清屏,将空格字符ASCII码20H写入到所有的DDRAM单元
Delay(5000);
Write_Command(0x06);//设置进入方式,DDRAM自增,整个显示右移
Delay(500);
Write_Command(0x80);//设置DDRAM的初始地址
for(unsigned int i=0;b!='\0';i++) //在液晶第二行输出
{
Write_Data('b');
}
break;
case 5:
//Write_Command(0x01);//清屏,将空格字符ASCII码20H写入到所有的DDRAM单元
Clear_Second_Line();
Delay(5000);
Write_Command(0x06);//设置进入方式,DDRAM自增,整个显示右移
Delay(500);
Write_Command(0xC0); //设置DDRAM的初始地址
Write_Data('9');
break;
case 6:
//Write_Command(0x01);//清屏,将空格字符ASCII码20H写入到所有的DDRAM单元
Clear_Second_Line();
Delay(5000);
Write_Command(0x06);//设置进入方式,DDRAM自增,整个显示右移
Delay(500);
Write_Command(0xC0); //设置DDRAM的初始地址
Write_Data('5');
break;
case 7:
//Write_Command(0x01);//清屏,将空格字符ASCII码20H写入到所有的DDRAM单元
Clear_Second_Line();
Delay(5000);
Write_Command(0x06);//设置进入方式,DDRAM自增,整个显示右移
Delay(500);
Write_Command(0xC0); //设置DDRAM的初始地址
Write_Data('1');
break;
case 8:
Write_Command(0x01);//清屏,将空格字符ASCII码20H写入到所有的DDRAM单元
Delay(5000);
Write_Command(0x06);//设置进入方式,DDRAM自增,整个显示右移
Delay(500);
Write_Command(0x80);//设置DDRAM的初始地址
for(unsigned int i=0;c!='\0';i++) //在液晶第二行输出
{
Write_Data('c');
}
break;
case 9:
//Write_Command(0x01);//清屏,将空格字符ASCII码20H写入到所有的DDRAM单元
Clear_Second_Line();
Delay(5000);
Write_Command(0x06);//设置进入方式,DDRAM自增,整个显示右移
Delay(500);
Write_Command(0xC0); //设置DDRAM的初始地址
Write_Data('.');
break;
case 10:
//Write_Command(0x01);//清屏,将空格字符ASCII码20H写入到所有的DDRAM单元
Clear_Second_Line();
Delay(5000);
Write_Command(0x06);//设置进入方式,DDRAM自增,整个显示右移
Delay(500);
Write_Command(0xC0); //设置DDRAM的初始地址
Write_Data('6');
break;
case 11:
//Write_Command(0x01);//清屏,将空格字符ASCII码20H写入到所有的DDRAM单元
Clear_Second_Line();
Delay(5000);
Write_Command(0x06);//设置进入方式,DDRAM自增,整个显示右移
Delay(500);
Write_Command(0xC0); //设置DDRAM的初始地址
Write_Data('2');
break;
case 12:
Write_Command(0x01);//清屏,将空格字符ASCII码20H写入到所有的DDRAM单元
Delay(5000);
Write_Command(0x06);//设置进入方式,DDRAM自增,整个显示右移
Delay(500);
Write_Command(0x80);//设置DDRAM的初始地址
for(unsigned int i=0;d!='\0';i++) //在液晶第二行输出
{
Write_Data('d');
}
break;
case 13:
//Write_Command(0x01);//清屏,将空格字符ASCII码20H写入到所有的DDRAM单元
Clear_Second_Line();
Delay(5000);
Write_Command(0x06);//设置进入方式,DDRAM自增,整个显示右移
Delay(500);
Write_Command(0xC0); //设置DDRAM的初始地址
Write_Data('a');
break;
case 14:
//Write_Command(0x01);//清屏,将空格字符ASCII码20H写入到所有的DDRAM单元
Clear_Second_Line();
Delay(5000);
Write_Command(0x06);//设置进入方式,DDRAM自增,整个显示右移
Delay(500);
Write_Command(0xC0); //设置DDRAM的初始地址
Write_Data('7');
break;
case 15:
//Write_Command(0x01);//清屏,将空格字符ASCII码20H写入到所有的DDRAM单元
Clear_Second_Line();
Delay(5000);
Write_Command(0x06);//设置进入方式,DDRAM自增,整个显示右移
Delay(500);
Write_Command(0xC0); //设置DDRAM的初始地址
Write_Data('3');
break;
case 16:
Write_Command(0x01);//清屏,将空格字符ASCII码20H写入到所有的DDRAM单元
Delay(5000);
Write_Command(0x06);//设置进入方式,DDRAM自增,整个显示右移
Delay(500);
Write_Command(0x80); //设置DDRAM的初始地址
for(unsigned int i=0;e!='\0';i++) //在液晶第二行输出
{
Write_Data('e');
}
break;
}
/*******************************************************switch语句结束******/
if(P1IFG & BIT0)
{
P1IFG &= ~(BIT0);// 清除中断标志位
}
if(P1IFG & BIT1)
{
P1IFG &= ~(BIT1);// 清除中断标志位
}
if(P1IFG & BIT2)
{
P1IFG &= ~(BIT2);// 清除中断标志位
}
if(P1IFG & BIT3)
{
P1IFG &= ~(BIT3);// 清除中断标志位
}
}
/**************************************************************************/
void main()
{
WDTCTL=WDTPW+WDTHOLD; //禁止看门狗
Delay(50000); //延时,等待液晶电压上升,大约需要30ms
_DINT(); //禁止中断,一般在设置硬件时都要禁止中断
Init_CLK();
Init_Port();
Init_LCD();
_EINT(); //打开中断
/* for(unsigned int i=0;a!='\0';i++)
{
Write_Data('a');
}
*/
/* Write_Command(0xC0); //写入液晶第二行的手地址
for(unsigned int i=0;b!='\0';i++) //在液晶第二行输出
{
Write_Data(b);
}*/
while(1)
{};
}
/**************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -