📄 main.c
字号:
// 单片机MSP430F149 XT2=8MHZ
#include "msp430x14x.h"
#define LCD_DATA_DIR_OUT P4DIR|=0XFF//把控制掖晶的IO口设置为输出
#define LCD_DATA_DIR_IN P4DIR&=0X00//把控制掖晶的IO口设置为输出
#define LCD_DATA_IN P4IN//读入P5口的数据
#define LCD_OUT P4OUT
#define LCD_RS_L P3OUT&=~BIT1// ;定义数据与指令线,LCD的第四脚
#define LCD_RS_H P3OUT|=BIT1
#define LCD_RW_L P3OUT&=~BIT2// ;定义读写线,lcd的第五脚
#define LCD_RW_H P3OUT|=BIT2
#define LCD_E_L P3OUT&=~BIT3//;定义使能控制线 ,lcd的第6脚
#define LCD_E_H P3OUT|=BIT3
#define x1 0x80//液晶第一行的开始地址
#define x2 0x88//液晶第二行的开始地址
#define y 0x80
void delay_us(unsigned char i);//2.5微妙延时程序
void delay_352us(unsigned int i);//延时325us的函数声名
void LCD_init();//12864出使设置函数
void LCD_CHECK_BUSY();//12864忙标判断
void LCD_WRC(unsigned char i);//向12864写命令函数声明
void io_init();//IO口出使设置
void LCD_WRTD(unsigned int i);//向12864写数据的函数的声明
void DISPLAY_image();//显示图片函数声明
void int_clk();
void DISPLAY_char(unsigned char adder,unsigned char *ta,unsigned char star );//显示汉字或字符函数
unsigned char tab1[]={
"欢迎忠兴淘宝店, "
"MSP430单片机开发"
"板QQ: 792758921 "
"欢迎再次光临 "
};
const unsigned char tab32[]={//图像的上半页//宽度x高度=128x32 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x1C,0x70,0x00,0x00,0x00,0x00,0x03,
0x80,0x00,0x23,0x86,0x00,0x00,0x00,0x00,
0x07,0xFC,0xF0,0x00,0x01,0xFF,0x80,0x03,
0x80,0x00,0xF3,0x87,0x00,0x00,0x00,0x00,
0x07,0xFE,0xE0,0x03,0xF9,0xFF,0x80,0x03,
0x80,0x00,0x71,0xCE,0x00,0x00,0x00,0x00,
0x00,0x61,0xFF,0xC3,0xF9,0xDB,0x80,0x03,
0x80,0x00,0x79,0xCE,0x00,0x00,0x00,0x00,
0x0F,0xFF,0xFF,0x83,0x19,0xC3,0x80,0x03,
0x80,0x00,0x30,0x1C,0x00,0x00,0x00,0x00,
0x0F,0xFF,0xB9,0x83,0x99,0xC3,0x80,0x03,
0x80,0x03,0xFF,0xFF,0xE0,0x00,0x00,0x00,
0x01,0xE8,0x3B,0x83,0x99,0xDB,0x83,0xFF,
0xFF,0xC3,0xFF,0xFF,0xE0,0x00,0x00,0x00,
0x03,0xFC,0x73,0x83,0x19,0xFF,0x83,0xFF,
0xFF,0xC3,0x80,0x00,0xE0,0x00,0x00,0x00,
0x07,0xEE,0xE3,0x83,0xF9,0xFF,0x83,0xFF,
0xFF,0xC3,0x80,0x00,0xE0,0x00,0x00,0x00,
0x0F,0x67,0x8F,0x83,0xF9,0xC3,0x80,0x03,
0x80,0x03,0xFF,0xFE,0xE0,0x00,0x00,0x00,
0x0E,0x6F,0x8F,0x03,0x19,0xC3,0x80,0x03,
0x80,0x00,0x7F,0xFE,0x00,0x00,0x00,0x00,
0x00,0x3F,0xE0,0x03,0x99,0xC3,0x80,0x07,
0xC0,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,
0x00,0xF8,0xFE,0x03,0x19,0xFF,0x80,0x07,
0xC0,0x00,0x01,0xF0,0x00,0x00,0x00,0x00,
0x0F,0xF7,0x3F,0xC3,0xF9,0xFF,0x80,0x06,
0xE0,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x0F,0xC7,0x2F,0xC3,0xF9,0xC3,0x80,0x0E,
0x70,0x03,0xFF,0xFF,0xE0,0x00,0x00,0x00,
0x06,0x73,0x38,0x83,0xFB,0x83,0x80,0x1C,
0x78,0x03,0xFF,0xFF,0xE0,0x00,0x00,0x00,
0x00,0x3F,0xF0,0x03,0x1B,0x83,0x80,0x3C,
0x3C,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x7F,0xE0,0x03,0x83,0x83,0x80,0x78,
0x1E,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x03,0xFB,0x78,0x03,0x87,0x83,0x81,0xF0,
0x0F,0x80,0x01,0xC0,0x00,0x00,0x00,0x00,
0x03,0xE3,0x3E,0x00,0x07,0x0F,0x07,0xE0,
0x07,0xC0,0x07,0xC0,0x00,0x00,0x00,0x00,
0x01,0x9F,0x0E,0x00,0x0F,0x0F,0x07,0x80,
0x03,0x80,0x07,0xC0,0x00,0x00,0x00,0x00,
0x00,0x0F,0x00,0x00,0x06,0x00,0x03,0x00,
0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x03,0x01,0x86,0x0C,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0F,0xE1,0xB6,0x04,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0F,0xE1,0xB6,0xFF,
0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0F,0xE3,0xFE,0x04,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
unsigned char tab5[]={
//*-- 调入了一幅图像:/*-- 宽度x高度=128x64 --*/
0x00,0x00,0x00,0x00,0x08,0x23,0xFE,0x3F,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0F,0xE3,0xFE,0x24,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x3F,0xF7,0xB6,0x24,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x07,0xC1,0xB6,0x24,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x1D,0x73,0xB6,0x27,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x1B,0x33,0x36,0x04,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};//****************
int main( void )
{
WDTCTL = WDTPW + WDTHOLD;
io_init();//IO口设置
int_clk();//时钟设置
LCD_init();//LCD出使化
while(1)
{
DISPLAY_char(0x80,tab1,0);//显示第一行第一个汉字
DISPLAY_char(0x81,tab1,1);//显示第一行第二个汉字
DISPLAY_char(0x82,tab1,2);
DISPLAY_char(0x83,tab1,3);
DISPLAY_char(0x84,tab1,4);
DISPLAY_char(0x85,tab1,5);//显示第一行第6个汉字
DISPLAY_char(0x86,tab1,6);//显示第一行第7个汉字
DISPLAY_char(0x87,tab1,7);
delay_352us(1000);
delay_352us(1000);
delay_352us(1000);
DISPLAY_char(0x90,tab1,8);//显示第二行第一个汉字
DISPLAY_char(0x91,tab1,9);//显示第二行第二个汉字
DISPLAY_char(0x92,tab1,10);
DISPLAY_char(0x93,tab1,11);
DISPLAY_char(0x94,tab1,12);
DISPLAY_char(0x95,tab1,13);//显示第二行第6个汉字
DISPLAY_char(0x96,tab1,14);//显示第二行第7个汉字
DISPLAY_char(0x97,tab1,15);
delay_352us(1000);
delay_352us(1000);
delay_352us(1000);
DISPLAY_char(0x88,tab1,16);//显示第二行第一个汉字
DISPLAY_char(0x89,tab1,17);//显示第二行第二个汉字
DISPLAY_char(0x8a,tab1,18);
DISPLAY_char(0x8b,tab1,19);
DISPLAY_char(0x8c,tab1,20);
DISPLAY_char(0x8d,tab1,21);//显示第二行第6个汉字
DISPLAY_char(0x8e,tab1,22);//显示第二行第7个汉字
DISPLAY_char(0x8f,tab1,23);
delay_352us(1000);
delay_352us(1000);
delay_352us(1000);
DISPLAY_char(0x98,tab1,24);//显示第二行第一个汉字
DISPLAY_char(0x99,tab1,25);//显示第二行第二个汉字
DISPLAY_char(0x9a,tab1,26);
DISPLAY_char(0x9b,tab1,27);
DISPLAY_char(0x9c,tab1,28);
DISPLAY_char(0x9d,tab1,29);//显示第二行第6个汉字
DISPLAY_char(0x9e,tab1,30);//显示第二行第7个汉字
DISPLAY_char(0x9f,tab1,31);
delay_352us(1000);
delay_352us(1000);
delay_352us(1000);
LCD_WRC(0X01);//清除屏幕
DISPLAY_image();//显示图片
delay_352us(1000);
delay_352us(1000);
delay_352us(1000);
delay_352us(1000);
delay_352us(1000);
delay_352us(1000);
LCD_WRC(0X30);
LCD_WRC(0X01);//清除屏幕
}
}
//IO口出使化函数
void io_init()
{
P3DIR|=0x0e;
}
void DISPLAY_char(unsigned char adder,unsigned char *ta,unsigned char star)
{unsigned char j=0;
LCD_WRC(0x30); //一般功能
LCD_WRC(adder); //显示起始位置,x坐标是自加的,注意显示地址
for(j=0;j<2;j++)
{
LCD_WRTD(ta[star*2+j]);
}
}
//时钟出使化函数
void int_clk()
{
unsigned char i;
BCSCTL1&=~XT2OFF;
BCSCTL2|=SELM1+SELS;
do
{
IFG1&=~OFIFG;
for(i=0;i<100;i++)
_NOP();
}while((IFG1&OFIFG));
IFG1&=~OFIFG;
}
//图片显示函数
void DISPLAY_image()
{unsigned char i,j;
for(j=0;j<32;j++)//显示图片的上半部分
{
for(i=0;i<8;i++)
{
LCD_WRC(0x34); //选择扩充指令集关闭图形显示
LCD_WRC(y+j);
LCD_WRC(x1+i);
LCD_WRC(0x30);
LCD_WRTD(tab32[j*16+i*2]);
LCD_WRTD(tab32[j*16+i*2+1]);
}
}
for(j=32;j<64;j++)//显示图片的下半页
{
for(i=0;i<8;i++)
{
LCD_WRC(0x34); //绘图功能
LCD_WRC(y+j-32);
LCD_WRC(x2+i);
LCD_WRC(0x30);
LCD_WRTD(tab5[(j-32)*16+i*2]);
LCD_WRTD(tab5[(j-32)*16+i*2+1]);
}
}
LCD_WRC(0x36); //绘图显示
}
void LCD_WRTD(unsigned int i)//;写数据子程序
{ LCD_CHECK_BUSY();//判断忙标,以确保上一指令/数据模块已经接收处理完
LCD_DATA_DIR_OUT;
LCD_RS_H;//RS=1选择数据寄存器
LCD_RW_L;//RW=0选择写操作
LCD_E_H;
LCD_OUT=i;
delay_us(100);
LCD_E_L;
}
void LCD_init()//;液晶初始设置子程序
{ delay_352us(1100);//;延时383ms
LCD_WRC(0X30);//30---基本指令操作
LCD_WRC(0X01);//指令#01H为:清除屏幕文字,把地址指针指向00H单元
LCD_WRC(0X06);//指定在资料写入或读取时,设定游标的移动方向及指定显示的移位
LCD_WRC(0X0C);//显示状态设置
}
void LCD_WRC(unsigned char i)//;向12864写命令的子程序
{ LCD_CHECK_BUSY();//;判断忙标,以确保上一指令/数据模块已经接收处理完
LCD_DATA_DIR_OUT;//把IO口设置为输出
LCD_RS_L;//RS=0选择指令寄存器
LCD_RW_L;//RW=0选择写操作
LCD_E_H;//E=1,12864使能
LCD_OUT=i;//;往液晶数据口送数据
delay_us(100);
LCD_E_L;
}
void LCD_CHECK_BUSY()//;判断忙标子程序
{//CHK_BUSY:PUSH ACC
LCD_DATA_DIR_IN;// mov LCD12864_DATA,#0FFH;把数据口置1,准备读入数据
LCD_RS_L;// ;读忙状态子程序
LCD_RW_H;//
LCD_E_H;//
delay_us(1);
busy1:
if(LCD_DATA_IN & 0X80) goto busy1;
LCD_E_L;
}
void delay_352us(unsigned int i)//352us延时程序
{
unsigned char j;
while(i--)
{
for(j=0;j<255;j++)
{
_NOP();
_NOP();
_NOP();
_NOP();
}
}
}
void delay_us(unsigned char i)//delay 2.5us at 8M
{
unsigned char ii;
for(ii =i;ii > 0;ii--)
{
_NOP();_NOP();_NOP();_NOP();
_NOP();_NOP();_NOP();_NOP();
_NOP();_NOP();_NOP();_NOP();
_NOP();_NOP();_NOP();_NOP();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -