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

📄 lcd.c

📁 MSP430系列16位超低功耗单片机实践与系统
💻 C
字号:
/******************************************************
*   文件名称:
*            lcd.c
*  文件说明:对点阵lcd的基本操作初始化、移动显示数据的位置、
*           写数据、对指定区域进行清除进行封装
******************************************************/

#include <msp430x44x.h>

/***************************************************
*  write_Command(),用于写命令到LCD,
* CS(片选)在此函数外设置
****************************************************/
void write_Command(char cmd)
{
     P2OUT &= 0xfb;             //禁止 EN
     P3DIR =  0xff;
     P2OUT &= 0xfc;             //rs=0 ,r/w=0
     P3OUT  = cmd;
     P2OUT |= 0x04;             //使能
     
     P2OUT &= 0xfb;             //禁止
     
}
/***************************************************
* 设置显示的位置,片选在函数外部设置
****************************************************/
void move_To(char x,char y)
{
     unsigned char tmp;
     tmp=(y&0x7f);
     if(tmp<64)                       //如果位置在Chip1
     {       
        P2OUT &= 0xbf;                //cs2=0
        P2OUT |= 0x08;                //cs1=1 
        write_Command(0xb8 + x);      //设置 x
        write_Command(0x40 + tmp);    //设置 y 
     }else if(tmp>63)                 //在 chip2
     { 
        P2OUT &= 0xF7;                //cs1=0     
        P2OUT |= 0x40;                //cs2=1
        write_Command(0xb8 + x);      //设置 x
        write_Command(0x40 + tmp-64); //设置 y
     }
     
}
/***************************************************
* write data
****************************************************/
void write_Data(char content)
{
     P3DIR =  0x00;             // 置位输入模式
     P2OUT |= 0x02;             // r/w=1 读状态
     P2OUT |= 0x04;             // chip 使能
     while((P3IN & 0x80)==0x80);//检测LCD是否忙
     P2OUT &= 0xfb;//disable EN
     P3DIR =  0xff;
     P2OUT &= 0xfc;             //rs=0 ,r/w=0
     P2OUT |= 0x01;             //rs=1
     P3OUT  = content;
     P2OUT |= 0x04;             //p2.2=1 使能
     P2OUT &= 0xfb;             //p2.2=0 禁止
     
}


/****************************************************
*   清除chip1或者chip2上的某一区域,选择的区域只是在
*   同一chip上,x是页地址,Y是列地址,h是多少行,w是指多少
*   列.区域可以是两个片组成的区域的任何位置
*****************************************************/
void clear_Rect(unsigned char x,unsigned char y,unsigned char h,unsigned char w)
{
     unsigned char tmpv,tmp;
     
        for(tmpv=x;tmpv<(x+h);tmpv++)
        {
           for(tmp=y;tmp<(y+w);tmp++)
           {
             move_To(tmpv,tmp);//移动
             write_Data(0x00); //在当前位置写0,即清除当前位置的显示内容
            }
        }
}
/*****************************************************
*  初始化LCD
******************************************************/
void init_LCD()
{
     P3DIR  = 0xff;           // 设置P3输出模式 
     P3OUT  = 0x00;           // 初始值为0
     P2DIR |= 0xcf;           // P2.0~P3,P2.6,p2.7 置为输出模式
     P2OUT |= 0x48 ;          // cs1,cs2 为1,reset=0
     _NOP();
     _NOP();
     _NOP();
     P2OUT |= 0x04;           // en=1
     P2OUT |= 0x80;
     write_Command(0xc0);     //
     write_Command(0x3f);     //显示开
     clear_Rect(0,0,8,64);    //清除第一块
     clear_Rect(0,64,8,64);   //清除第二块
   
}
/***************************************************/

⌨️ 快捷键说明

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