📄 430单片机 键盘扫描+ocm4×8c lcd显示.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 + -