📄 main.c
字号:
/*****************************************************************************\
文件名:main.c
描述:MSP430框架程序。适用于MSP430F149,其他型号需要适当改变。
不使用的中断函数保留或者删除都可以,但保留时应确保不要打开不需要的中断。
保留中断函数,编译器将会为BSL密码填充所有的字节。
版本:1.0 2005-1-13
\*****************************************************************************/
//头文件
#include <MSP430x14x.h>
//函数声明
void InitSys();
void Delay(unsigned int times);
void sendBYTE(unsigned char dat);
void sendDAT(unsigned char dat);
void sendCMD(unsigned char dat);
void initlcm(void);
void display_app(unsigned char address, unsigned char *string);
int main( void )
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
InitSys(); //初始化
//以下填充用户代码
P3DIR=0xff;
P4DIR|=BIT1;
P4SEL=0x00;
P4OUT=0x00;
P3SEL=0x00;
P3OUT=0x00;
P4OUT|=BIT1;
initlcm();
display_app(0x90, "中国");
LPM3; //进入低功耗模式n,n:0~4。若不希望进入低功耗模式,屏蔽本句
}
/*****************************************************************************
系统初始化
******************************************************************************/
void InitSys()
{
unsigned int iq0;
//使用XT2振荡器
BCSCTL1&=~XT2OFF; //打开XT2振荡器
do
{
IFG1 &= ~OFIFG; // 清除振荡器失效标志
for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振
}
while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振
BCSCTL2 =SELM_2+SELS; //选择MCLK、SMCLK为XT2
//以下填充用户代码,对各种模块、中断、外围设备等进行初始化
//_EINT(); //打开全局中断控制,若不需要打开,可以屏蔽本句
}
void Delay(unsigned int times) //延时程序
{
unsigned int num; //定义num为寄存器变量
while (times--)
{
for (num = 0x1024; num > 0; num--);
}
}
void sendBYTE(unsigned char dat) //送显示器一个字节
{
unsigned char i;
for (i = 0; i < 8; i++)
{
P3OUT &= ~BIT7;
if ((dat &0x80) != 0)
P3OUT |= BIT6; //将1送到液晶显示屏
else
P3OUT &= ~BIT6; //将0送到液晶显示屏
P3OUT |= BIT7;
dat = dat << 1;
}
}
void sendDAT(unsigned char dat)
{
unsigned char temp;
P3OUT |= BIT5; //开选通
sendBYTE(0xfa); //传送标志11111010 RS=1,R\W=0 表示写数据
temp = dat &0xf0;
sendBYTE(temp);
temp = (dat << 4) &0xf0;
sendBYTE(temp);
P3OUT &= ~BIT5;
}
void sendCMD(unsigned char dat) //传送指令
{
unsigned char temp;
P3OUT |= BIT5;
sendBYTE(0xf8); //传送开始标志11111000 一开始就应该传送5个1并在后面传RW RS最后一位为0
temp = dat &0xf0; //先传高四位
sendBYTE(temp);
temp = (dat << 4) &0xf0; //在传底四位
sendBYTE(temp);
P3OUT &= ~BIT5;
}
void initlcm(void) //显示器的初始化
{
Delay(16);
sendCMD(0x30); //传指令00110000设定DDRAM的地址 //传指令00110000选择数据线位数和基本指令集 changed by Hansel 2008 1 8
Delay(16);
sendCMD(0x04); //传指令00000100设定点:显示字符/光标从左到右移位,地址加1
sendCMD(0x0f); //传指令00001100设显示开关 整体显示开,游标不显示,游标位置反白关
sendCMD(0x01); //传指令00000001清除DDRAM 设定DDRAM的位置为起始位置 changed by Hansel 2008 1 8
Delay(16);
sendCMD(0x02); //传指令00000010游标移到头位置
Delay(16);
}
void display_app(unsigned char address, unsigned char *string) //显示字符串,第一传送的是地址,第二个行参是要显示的字符串
{
sendCMD(address);
Delay(16);
while ((unsigned char)*string != '\0')
{
sendDAT(*string++);
sendDAT(*string++);
//Delay(16);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -