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

📄 lcd_dispaly.c

📁 LCD点阵12864 C语言
💻 C
字号:
#include <msp430x44x.h>
#include <zimo.c>
// MSP430F449 LCD DISplay
//               MSP430F449
//             -----------------
//         /|\|              XIN|-  
//          | |                 |
//          --|RST          XOUT|-   ________
//            |                 |   |        |
//            |             P2.0|-->|   l    |
//            |               . | . |        |
//            |             P2.3| . |   C    |
//            |             P2.6| . |        |
//            |             P2.7| . |   D    |
//            |             P3.0| . |        |
//            |               . | . |        |
//            |             P3.7|-->|________|        
//            |                 |

// 变量定义
unsigned int command;                   //命令字
unsigned int write_buff;                //写命令缓冲
unsigned int width_count;               //字符宽度计数器
unsigned int width_char;                //每个字符宽度
unsigned int p_count;                   //页计数器
unsigned int y_count;                   //列计数器
unsigned int i,j;                       //计数器变量
unsigned int begin_letter, begin_col;   //分别代表所需显示的第一个字母位置,显示开始的列 

//子程序定义
void port_ini(void);                    //端口初始化子程序
void write_command(void);               //写命令字子程序
void clear_lcd(void);                   //清屏子程序
void disp_content(void);                     //显示所需内容子程序
void display_char(void);                //显示子程序
void write_char(void);                  //写单个字符子程序 
void write_strings(void);               //写字符串子程序

//端口定义
unsigned char    P2_0_RS=0x01;          // RS PIN
unsigned char    P2_1_RW=0x02;          // R/W PIN
unsigned char    P2_2_EN=0x04;          // EN PIN
unsigned char    P2_3_CS1=0x08;         // CS1 PIN
unsigned char    P2_6_CS2=0x40;         // CS2 PIN
unsigned char    P2_7_RST=0x80;         // RST PIN
unsigned char    P3_0_DB0=0x01;         // DB0 PIN
unsigned char    P3_1_DB1=0x02;         // DB1 PIN
unsigned char    P3_2_DB2=0x04;         // DB2 PIN
unsigned char    P3_3_DB3=0x08;         // DB3 PIN
unsigned char    P3_4_DB4=0x10;         // DB4 PIN
unsigned char    P3_5_DB5=0x20;         // DB5 PIN
unsigned char    P3_6_DB6=0x40;         // DB6 PIN
unsigned char    P3_7_DB7=0x80;         // DB7 PIN

//  初始化 ,包括端口,写命令字 
void Ini(void)
{
 port_ini();                             //端口初始化
 _NOP();
 _NOP();
 command=0xc0;                          // 设定屏幕显示的起始行为0
 write_command();
 command=0x3f;                          // 设定屏幕开 
 write_command();
 clear_lcd();                           // 清屏
 command=0x40;                          // 设定列地址为0
 write_command();
 command=0xb8;                          // 设定第0页显示
 write_command();     
}

// 主程序 显示disp_content
void main(void)
 {
      WDTCTL=WDTPW+WDTHOLD;             //关闭看门狗,单步调试时必须
      Ini();                            //调用初始化程序
  loop:
      disp_content();                        //调用显示Welcome的子程序
      goto loop;                        //循环跳转
}

// 显示disp_content子程序
void disp_content(void)
{
  
   width_char=16;
  
next_time:
    begin_col=2;                        //显示从第0列开始 
   for(begin_letter=32;begin_letter!=38;begin_letter++)                //如果还没有显示完,继续!
   {
     p_count=0;                          //显示从第0页开始 
     y_count=begin_col;               
     display_char();
     begin_letter++;
     begin_col=begin_col+18;           //每个字符间隔为18列
    }
   p_count=1;
   begin_col=2;
   for(begin_letter=33;begin_letter!=39;begin_letter++)
   {
     y_count=begin_col;               
     display_char();
     begin_letter++;
     begin_col=begin_col+18;           //每个字符间隔为18列
   }
     // begin_col++;
      goto next_time;
}

// 端口初始化
void port_ini(void)
{
   P3DIR=0xff;                        //P3口为输出口
   P3OUT=0xff;
   P2DIR=0xff;                        //P2口为输出口
   P2OUT=P2OUT|P2_3_CS1|P2_6_CS2;     //CS1,CS2都选通
   P2OUT=P2OUT|P2_7_RST;              //液晶复位
   P2OUT=P2OUT&~P2_7_RST;
   _NOP();
   _NOP();
   P2OUT=P2OUT|P2_2_EN;              
   _NOP();
   _NOP();
  P2OUT=P2OUT&~P2_2_EN;               //产生下降沿,使能液晶
   _NOP();
   _NOP();
  P2OUT=P2OUT|P2_7_RST;               //液晶正常
   _NOP();
   _NOP(); 
}
 
// 写控制命令字程序
void write_command(void)
 {
    P3DIR=0xff;                       //P3口为输出口
    P2OUT=P2OUT|P2_3_CS1|P2_6_CS2;
    P2OUT=P2OUT&~P2_0_RS&~P2_1_RW;    //指令输入,写控制字
    P3OUT=command;
    P2OUT=P2OUT|P2_2_EN;
    P2OUT=P2OUT&~P2_2_EN;             //P2.2从高变低,使能液晶显示  
}

// LCD 清屏子程序
void clear_lcd(void)
{
      p_count=0;                      //页计数器设为0
      y_count=0;                      //列计数器设为0       
 next_clear_lcd:
      command=0xb8;      
      command=command+p_count;        //设定第p_count页显示
      write_command();
 write_first:
      command=0x40;                   //设定列地址为0
      command=command+y_count;        //列地址加上列计数器
      write_command();
      write_buff=0;                   //写缓冲为0 
      write_char();
      y_count++;                      //列计算器加1
      if(y_count!=64)                 //如果列数不到64,继续清屏
           goto write_first;
      y_count=0;                      //列计数器重新设为0
      p_count++;                      //页计数器加1
     if(p_count!=8)                   //如果页数不到8,继续每页清屏
         goto next_clear_lcd;
}

// 显示字符子程序 入口变量为y_count,p_count, begin_letter,width_char
void display_char(void)
{
     width_count=0;                  //所要显示字符的第0列
     command=0xb8;                   //第0页
     command=p_count+command;        //页数加上页计数器
     write_command();
 next_char:
     if(width_count==width_char)  
         goto display_char_end;
     if(y_count<64)                 //如果前64列还没有显示完,继续在前64列显示
         goto disp_0_page;
     command=0x40;                   //转到后64列
     command=command+y_count-64;
     write_command();
     P2OUT=P2OUT&~P2_3_CS1;
     P2OUT=P2OUT|P2_6_CS2;           //选通后64列
         goto  take_data;
disp_0_page:                         //前64列  
      command=0x40;
      command=command+y_count;        //第0列加上列计算器
      write_command();     
      P2OUT=P2OUT|P2_3_CS1;          //选通前64列
      P2OUT=P2OUT&~P2_6_CS2;
take_data:   
     write_buff=code_char[begin_letter][width_count];  
     write_char();
     y_count++;
     width_count++;
     goto next_char;
display_char_end:
     _NOP();
 }
 
//写单个字符子程序  入口变量write_buff
void write_char(void)
{
  P2OUT=P2OUT|P2_0_RS;                 //数据输入
  P2OUT=P2OUT&~P2_1_RW;                //写入
  P3OUT=write_buff;                    //写缓冲写入P3口
  P2OUT=P2OUT|P2_2_EN;       
  P2OUT=P2OUT&~P2_2_EN;                //液晶显示使能
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -