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

📄 lcd12864.c

📁 MSP430_LCD128×64_C_H_Test_Good.rar 使用MSP430单片机编写的液晶模块LCD128×64点阵的驱动程序 测试过好用
💻 C
字号:
/*******************************************************************/
//              12864液晶模块驱动程序 (for MSP430f14x)
//
// 		            2005年4月
//
//            MCLK=1.13MHz时测试通过,如使用更高频率时钟
//                参照时序图,在适当位置添加延时
/*******************************************************************/

#include "LCD12864.h"

/*******************************************************************/
//          读取标志位,判断控制器是否为忙状态
/*******************************************************************/
void LCD_Busy()
{
    char BF = 0;
    LCD_RS_L;
    LCD_RW_H;
    P4DIR = 0x0; 
    do
    {
    	LCD_EN_H;
        BF = P4IN;
        LCD_EN_L;
    } while(BF & 0x80);
    P4DIR = 0xff;
}
/*******************************************************************/
//          写入命令
/*******************************************************************/
void LCD_WriteCom(char dis_com)
{
    LCD_Busy();
    LCD_RS_L;
    LCD_RW_L;
    LCD_EN_H;
    LCDDAT = dis_com;
    LCD_EN_L;
}
/*******************************************************************/
//          写入一字节数据
/*******************************************************************/
void LCD_WriteDat(char dis_dat)
{
    LCD_Busy();
    LCD_RS_H;
    LCD_RW_L;
    LCD_EN_H;
    LCDDAT = dis_dat;
    LCD_EN_L;
}
/*******************************************************************/
//          设置显示位置    X(1~8),Y(1~4)
/*******************************************************************/
void LCD_SetAddr(char dis_addr_x,char dis_addr_y)
{
    switch(dis_addr_y)
    {
        case 1:LCD_WriteCom(0x7f + dis_addr_x);
        break;
        case 2:LCD_WriteCom(0x8f + dis_addr_x);
        break;
        case 3:LCD_WriteCom(0x87 + dis_addr_x);
        break;
        case 4:LCD_WriteCom(0x97 + dis_addr_x);
    }
}
/*******************************************************************/
//          在指定位置显示字符
/*******************************************************************/
void LCD_WriteDBC(char dis_addr_x,char dis_addr_y,char dis_dat)
{
    LCD_SetAddr(dis_addr_x,dis_addr_y);
    LCD_WriteDat(dis_dat);
}
/*******************************************************************/
//          在指定位置显示字符串
/*******************************************************************/
void LCD_WriteStr(char dis_addr_x,char dis_addr_y,char* str)
{ 
    char LCD_temp; 
    LCD_SetAddr(dis_addr_x,dis_addr_y);
    LCD_temp=*str;
    while(LCD_temp != 0x00) 
    { 
        LCD_WriteDat(LCD_temp);
        LCD_temp=*(++str);
    }  
}
/*******************************************************************/
//          显示一个整形数字
/*******************************************************************/
#define DISPLAY    if(flag | LCD_temp)                  \
                    {                                   \
                        LCD_WriteDat(0x30 + LCD_temp);  \
                        flag = 1;                       \
                    }
void LCD_WriteNum(char dis_addr_x,char dis_addr_y,int dis_num)
{
    char LCD_temp = 0,flag = 0;
    LCD_SetAddr(dis_addr_x,dis_addr_y);
    if(dis_num < 0)
    {
        LCD_WriteDat(0x2d);
        dis_num = - dis_num;
    }
    LCD_temp = dis_num/10000;
    DISPLAY
    dis_num -= LCD_temp*10000;
    LCD_temp = dis_num/1000;
    DISPLAY
    dis_num -= LCD_temp*1000;
    LCD_temp = dis_num/100;
    DISPLAY
    dis_num -= LCD_temp*100;
    LCD_temp = dis_num/10;
    DISPLAY
    dis_num -= LCD_temp*10;
    LCD_temp = dis_num;
    DISPLAY
    if(!flag) LCD_WriteDat(0x30);   
}
#undef DISPLAY
/*******************************************************************/
//          绘制一幅图片
/*******************************************************************/
void LCD_DrawPic(char *gImage)
{
    char X = 0x80,Y = 0x80;
    char i,j;
    for(i=0;i<64;i++) 
    { 
        for(j=0;j<16;j++) 
        { 
            LCD_WriteCom(0x34);
            LCD_WriteCom(Y);
            LCD_WriteCom(X);
            LCD_WriteDat(*(gImage+i*16+j));      //  low 8 bits
            LCD_WriteDat(*(gImage+i*16+j+1));    //  high 8 bits
            LCD_WriteCom(0x36);
            X++;
            j++;
        } 
        Y++; 
        if(Y>0x9f) 
            Y=0x80; 
        X=0x80+((i+1)/32)*8; 
    } 
    LCD_WriteCom(0x30);
}
/*******************************************************************/
//          初始化设置
/*******************************************************************/
void LCD_Init()
{
    P3DIR = 0xff;           //  control port
    P4DIR = 0xff;           //  data port
    LCD_WriteCom(0x30);     //  8 bits interface,basic instrument
    LCD_WriteCom(0x0c);     //  display,cursor on
    LCD_WriteCom(0x01);     //  clear DDRAM
    LCD_WriteCom(0x02);     //  cursor return
    LCD_WriteCom(0x06);
}
/*******************************************************************/

⌨️ 快捷键说明

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