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

📄 main.c

📁 MSP430子程序集
💻 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 + -