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

📄 main.c

📁 320240液晶的程序 430f149调试通过
💻 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 + -