📄 main.c
字号:
#include "msp430x14x.h"
#define uint unsigned int
#define uchar unsigned char
#define LCD_DIR P4DIR
#define LCD_IN P4IN
#define LCD_OUT P4OUT
#define LCD_A0 BIT0
#define LCD_A0_OUT P5OUT
#define LCD_A0_LO LCD_A0_OUT &= ~LCD_A0
#define LCD_A0_HI LCD_A0_OUT |= LCD_A0
#define LCD_CS BIT1
#define LCD_CS_OUT P5OUT
#define LCD_CS_LO LCD_CS_OUT &= ~LCD_CS
#define LCD_CS_HI LCD_CS_OUT |= LCD_CS
#define LCD_RD BIT2
#define LCD_RD_OUT P5OUT
#define LCD_RD_LO LCD_RD_OUT &= ~LCD_RD
#define LCD_RD_HI LCD_RD_OUT |= LCD_RD
#define LCD_WR BIT3
#define LCD_WR_OUT P5OUT
#define LCD_WR_LO LCD_WR_OUT &= ~LCD_WR
#define LCD_WR_HI LCD_WR_OUT |= LCD_WR
#define BasePart1 0x0000 //第一屏地址 0X0000 占用8K空间
#define BasePart2 0x2580 //第二屏地址 0X4000 占用8K空间
#define BasePart3 0x4b00 //第三屏地址 0X8000 占用2K空间
#define BasePart4 0x7080 //第四屏地址 0X0000 占用2K空间
#define SystemSet 0x40 //1335控制器定义
#define Scroll 0x44 //显示域设置
#define SleepIn 0x53 //休闲模式设置
#define DispOn 0x59 //显示状态设置开
#define DispOff 0x58 //
#define Ovlay 0x5b //显示合成设置
#define HdotScr 0x5a //点位移设置
#define CsrForm 0x5d //光标形状设置
#define CgramAdr 0x5c //CGRAM首地址设置
#define CsrDirR 0x4c //光标移动方向
#define CsrDirL 0x4d
#define CsrDirU 0x4e
#define CsrDirD 0x4f //光标向下移动
#define CsrW 0x46 //设置光标地址
//#define CsrR 0x47 //读出光标地址
#define mWrite 0x42 //显示数据写入
#define mRead 0x43
unsigned char ParaSysTable8[]= { 0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00};
//unsigned char ParaScrTableA[]= {0x00,0x00,0xc8,0x80,0x25,0xF0,0x00,0x4b,0x80,0x70};
unsigned char ParaScrTableA[]= {0x00,0x00,0xf0,0x00,0x28,0xF0,0x00,0x50,0x00,0x00};
void LCDCommand(unsigned int command);
void LCDData(unsigned int data);
void delay(unsigned int delay);
void LCDInit(void);
void LCDClear(void);
void LCDDrawnum(uchar x,uchar y,uchar n);
void LCDDrawhan(uchar x,uchar y,uchar n);
const uchar num[]={
0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xDB,0xE7,0xFF,0xFF,/*"0",0*/
0xFF,0xFF,0xFF,0xEF,0x8F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0x83,0xFF,0xFF,/*"1",1*/
};
const uchar han[]={
0xDF,0xFF,0xE8,0x01,0xEF,0xF7,0xFF,0xF7,0x77,0xF7,0xB4,0x37,0xAD,0xB7,0xED,0xB7,
0xDD,0xB7,0xDC,0x37,0x1D,0xB7,0xDF,0xF7,0xDF,0xF7,0xDF,0xF7,0xDF,0xD7,0xDF,0xEF,/*"河",0*/
0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBB,0xFB,0xB1,0x83,0xA7,0xFB,0x9F,0xFB,0xBF,
0xFB,0xBF,0xFB,0xBF,0xF3,0xBF,0xCB,0xBD,0x1B,0xBD,0xBB,0xBD,0xFB,0xC1,0xFF,0xFF,/*"北",1*/
};
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P4DIR=0xff;
P5DIR=0xff;
LCDInit();
LCDClear();
// while(1)
LCDDrawnum(1,0,1);
LCDDrawhan(1,128,1);
}
void delay(unsigned int delay)
{
while(delay-- );
}
/*===========写指令代码子函数==========*/
void LCDCommand(unsigned int command)
{
P4DIR=0xff;
P5DIR=0xff;
LCD_CS_LO; //选通
LCD_A0_HI; //1为写命令或读数据
LCD_WR_LO;
LCD_RD_HI; //确定读信号不起作用
LCD_OUT=command; //向1335中写入指令代码
delay(60);
LCD_WR_HI;
LCD_CS_HI;
}
/*===========写数据子函数============*/
void LCDData(unsigned int data)
{
P4DIR=0xff;
P5DIR=0xff;
LCD_CS_LO; //选通
LCD_A0_LO; //0为写数据、参数和读忙标志
LCD_WR_LO;
LCD_RD_HI; //确定读信号不起作用
LCD_OUT=data; //向1335中写入指令代码
delay(60);
LCD_WR_HI;
LCD_CS_HI;
}
void LCDInit(void)
{
unsigned char i;
LCDCommand( SystemSet ); // 系统参数设置0x40
for (i=0;i<8;i++)
{
LCDData( ParaSysTable8[i] ); //
}
LCDCommand(Scroll); //设定显示区域起始地址
for (i=0;i<10;i++)
{
LCDData( ParaScrTableA[i] );
}
LCDCommand( HdotScr ); // 写入点位移指令代码
LCDData( 0x00 ); // 写入P1参数
LCDCommand( Ovlay ); // 显示合成方式设置
LCDData( 0x04 ); // 0000 0100 显示一区图形,三区文本属性,二重"或"合成
LCDCommand( 0x59 ); // 显示状态设置 为开显示
LCDData( 0x54 ); // 显示 1~4 区开显示,光标关显示,且不闪烁
}
void LCDClear( void )
{
uint i1=32768;//32K大小RAM清零
LCDCommand( CsrDirR ); // 光标移动方向定义:自动右移
LCDCommand( CsrW ); // 光标Locate,定位
LCDData( 0x00 ); // 写入参数CSRL设置参数光标指针低8位
LCDData( 0x00 ); // 写入参数CSRH设置参数光标指针高8位
LCDCommand( mWrite ); // 数据写入指令,代码0x42
while(i1--)
{
LCDData( 0x00 ); // 写入数据0
}
}
void LCDWritenum(uchar x,uchar y)
{ LCDCommand( 0x4f );
// LCDCommand( CsrDirR ); // 光标移动方向定义:自动右移
LCDCommand( CsrW ); // 光标Locate,定位
LCDData( 0x00 ); // 写入参数CSRL设置参数光标指针低8位
LCDData( 0x00 ); // 写入参数CSRH设置参数光标指针高8位
LCDCommand( mWrite ); // 数据写入指令,代码0x42
LCDData(0xff);
LCDCommand( CsrW ); // 光标Locate,定位
LCDData( 0x01 ); // 写入参数CSRL设置参数光标指针低8位
LCDData( 0x01 ); // 写入参数CSRH设置参数光标指针高8位
LCDData(0xff);
}
void LCDDrawnum(uchar x,uchar y,uchar n)
{
uint location,i,j,m;
j=n*16;
for(m=0;m<16;m++)
{
location=y*40+x;
LCDCommand( CsrDirR ); // 光标移动方向定义:自动右移
LCDCommand( CsrW ); // 光标Locate,定位
LCDData( (uchar)(location &0xff) ); // 写入参数CSRL设置参数光标指针低8位
LCDData( (uchar)(location /256 ) ); // 写入参数CSRH设置参数光标指针高8位
LCDCommand( mWrite ); // 数据写入指令,代码0x42
LCDData( num[j++] );
// LCDData( 0x00 );
y++;
}
}
void LCDDrawhan(uchar x,uchar y,uchar n)
{
uint location,i,j,m;
j=n*32;
for(m=0;m<16;m++)
{
location=y*40+x;
LCDCommand( CsrDirR ); // 光标移动方向定义:自动右移
LCDCommand( CsrW ); // 光标Locate,定位
LCDData( (uchar)(location &0xff) ); // 写入参数CSRL设置参数光标指针低8位
LCDData( (uchar)(location /256 ) ); // 写入参数CSRH设置参数光标指针高8位
LCDCommand( mWrite ); // 数据写入指令,代码0x42
LCDData( han[j++] );
LCDData( han[j++] );
// LCDData( 0x00 );
// LCDData( 0x00 );
y++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -