⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 430单片机 键盘扫描+ocm4×8c lcd显示.txt

📁 MSP430 149的4×4键盘扫描程序(中断方式)
💻 TXT
字号:
#include  <msp430x14x.h>
void Init_Sys();
void Init_Port();
void delay(unsigned long timefac);

void Lcd_Init(void);
void Lcd_WriteStr(unsigned char *str);
void Lcd_Command(unsigned char Cmd);

unsigned char GetKey();

unsigned char M;

int main( void )
{
    WDTCTL = WDTPW + WDTHOLD;
    Init_Sys();
    Init_Port();
    Lcd_Init();	
    Lcd_Command(0x01);
	delay(500);
    Lcd_Command(0x80);  //第一行
	delay(200);
	Lcd_WriteStr("  开关稳压电源");
    delay(200);
    Lcd_Command(0x90);  //第二行
	delay(200);
	Lcd_WriteStr("电压初始值: 30V");
    delay(200);
    _EINT();
    M=31;
    while(1)
    {
        ;
    }
}
void  Init_Sys()
{
	unsigned char i;
	BCSCTL1&=~XT2OFF;
	do{
		IFG1&=~OFIFG;
		for(i=0xff;i>0;i--);
	}while((IFG1&OFIFG)!=0);
	BCSCTL2|=SELM_2;
}

void Init_Port()
{
    P1SEL = 0;
    P1DIR =0xf0;
	P1OUT = 0x00;
	P1IE = 0x0f;
	P1IES = 0x0f;
	P1IFG = 0;
}
/////////////////////////////////////////////////////////////////////////////
/////////////LCD函数/////////////    ocm4X8C    RS=3.7     R/W=3.6     E=3.5
/////////////////////////////////////////////////////////////////////////////
void Lcd_Init(void)
{
	P2DIR=0xFF;			//p2为数据线,输出
	P3DIR=0xE0;			//P3.7,P3.6,P3.5控制端,输出
	Lcd_Command(0x30);  //功能设置--基本指令操作
	Lcd_Command(0x06);  //指定在资料写入或读取时,光标的移动方向
	Lcd_Command(0x0e);  //开显示,开光标,反白闪烁
}

void Lcd_Command(unsigned char Cmd)
{
	P3OUT=0x1f;
	P2OUT=Cmd;
	delay(20);
	P3OUT|=0x20;
	P3OUT&=0xdf;
}

void Lcd_WriteStr(unsigned char *str)
{
	unsigned char i=0;
	P3OUT=0x9f;
	while(str[i] != '\0'){
		P2OUT=str[i++];
        delay(20);
		P3OUT|=0x20;
		P3OUT&=0xdf;
    }
}
void delay(unsigned long timefac)
{
	while(timefac--);
}
#pragma vector=PORT1_VECTOR
__interrupt void PORT_ISR(void)
{	
	P1IE = 0x00;
	if(GetKey()==10){
		;
	}else if((GetKey()==14)&(M<36)){
	    ;
	}else if((GetKey()==15)&(M>30)){
	    ;
	}else {
		;
	}
	P1IE = 0x0f;
	P1IFG = 0;
}
unsigned char GetKey()
{
	unsigned char row,keyval,key;
	
	P1SEL = 0;
	P1DIR=0xf0;
	P1OUT=0x00;
	
	while(0x0f==(P1IN&0x0f));	
	delay(15000);
	
	P1OUT&=0x0f;
	if(0x0f!=(P1IN&0x0f)){
		P1OUT=0x70;
		row=P1IN&0x0f;
		while(row==0x0f){
			P1OUT=((P1OUT>>1)&0xf0)|0x80;
			row=P1IN&0x0f;
		}
		keyval=P1OUT|row;
		
		switch(keyval){
			case 0x77:key=1;      break;   ////1
			case 0x7b:key=2;      break;   ////2
			case 0x7d:key=3;      break;   ////3
			case 0x7e:key=4;      break;   ////4
			
			case 0xb7:key=5;      break;   ////5
			case 0xbb:key=6;      break;   ////6
			case 0xbd:key=7;      break;   ////7
			case 0xbe:key=8;      break;   ////8
			
			case 0xd7:key=9;      break;   ////9
			case 0xdb:key=0;      break;   ////0
			case 0xdd:key=10;     break;   ////a(10)
			case 0xde:key=11;     break;   ////b(11)
			
			case 0xe7:key=12;     break;   ////c(12)
			case 0xeb:key=13;     break;   ////d(13)
			case 0xed:key=14;     break;   ////e(14)
			case 0xee:key=15;     break;   ////f(15)
			default:  key=0xff;   break;
		}		
	}else{
		key=0xff;
	}
	P1OUT=0x00;
	return(key);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -