搜索
bottom↓
回复: 1

【LaunchPad】12864并行驱动程序

[复制链接]

出0入0汤圆

发表于 2012-7-15 14:50:07 | 显示全部楼层 |阅读模式

已知BUG:显示”液晶12864驱动程序“乱码,就是中文和西文必须分开显示
代码:
主函数main.c
#include <msp430g2553.h>
#include "lcd12864.h"
void main()
{
        WDTCTL = WDTPW + WDTHOLD;
        P1DIR|=0xff;
        P2DIR|=0xff;

        lcdreset();                                          //初始化LCD12864屏
        clrscreen();

        write_com(0x80);                                        //位置控制
        printstring("液晶12864");

        write_com(0x90);                                        //位置控制
        write_swcom(0x8a);//写单个数控制字
        write_swdat(0x35);
        write_swdat(0x36);

        write_com(0x95);                                        //位置控制
        write_swdat(0x38);

        write_com(0x88);                                         //位置控制
        printstring("液晶12864");
        while(1);
}

12864.c
#include <msp430g2553.h>                                                //包含库文件

#define uint unsigned int
#define uchar unsigned char
uchar LCD_table1[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};//0123456789

//sbit LCD_RS = P2.0;
//sbit LCD_RW = P2.1;
//sbit LCD_EN = P2.2;
//sbit LCD_PSB= P2.3;
//sbit LCD_RST= P2.4;

#define LCD_DataIn P1DIR=0x00;//数据口方向设置为输入
#define LCD_DataOut P1DIR=0xff;//数据口方向为输出
#define LCD2MCU_Data  P1IN
#define MCU2LCD_Data  P1OUT

#define LCD_RS_L P2OUT&=0xfe;
#define LCD_RS_H P2OUT|=0x01;
#define LCD_RW_L P2OUT&=0xfd;
#define LCD_RW_H P2OUT|=0x02;
#define LCD_EN_L P2OUT&=0xfb;
#define LCD_EN_H P2OUT|=0x04;
#define LCD_PSB_L P2OUT&=0xf7;
#define LCD_PSB_H P2OUT|=0x08;
#define LCD_RST_L P2OUT&=0xef;
#define LCD_RST_H P2OUT|=0x10;

void delay_1ms()
{
        uint i;
        for(i=0;i<1140;i++);
}

void delay_nms(uint n)
{
        uint j;
        for(j=0;j<n;j++)
                delay_1ms();
}
/*------------------检查忙位-----------------------------*/
void chk_busy()
{
        uchar lcdtemp=0;

        LCD_RS_L;
        LCD_RW_H;
        LCD_DataIn;
        do
        {
                LCD_EN_H;
                _NOP();
                lcdtemp = LCD2MCU_Data;
                LCD_EN_L;
        }
        while(lcdtemp&0x80);
        LCD_DataOut;
}

/*------------------写命令到LCD------------------------------*/
void write_com(uchar cmdcode)
{
        chk_busy();
    LCD_RW_L;
    MCU2LCD_Data = cmdcode;
    LCD_EN_H;
    _NOP();
    LCD_EN_L;
}

/*-------------------写数据到LCD----------------------------*/
void write_data(uchar Dispdata)
{
        chk_busy();
    LCD_RS_H;
    LCD_RW_L;

    MCU2LCD_Data = Dispdata;
    LCD_EN_H;
    _NOP();
    LCD_EN_L;
}

/*------------------初始化LCD屏--------------------------*/
void lcdreset()
{
        LCD_RST_L;
        delay_nms(60);
        LCD_RST_H;
        delay_nms(1);
        LCD_PSB_H;

        delay_nms(600);
        write_com(0x30);
        delay_nms(10);               //选择基本指令集
        write_com(0x02);    //地址归位
        delay_nms(5);
        write_com(0x0c);    //开显示(无游标、不反白)
        delay_nms(10);
        write_com(0x01);    //清除显示,并且设定地址指针为00H
        delay_nms(500);
        write_com(0x06);    //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
        delay_nms(10);
}

/*------------------显示字符串--------------------------*/
void printstring(uchar *s)
{
        while(*s>0)
        {
                write_data(*s);
                s++;
                delay_nms(5);
        }
}

/*------------------清屏命令--------------------------*/
void clrscreen()
{
        write_com(0x01);
        delay_nms(10);
}


void write_swcom(uchar com)
{
        LCD_RS_L;
        LCD_RW_L;
        delay_nms(1);
        MCU2LCD_Data=com;
        LCD_EN_L;
        delay_nms(1);
}

void write_swdat(uchar dat)
{
        chk_busy();
        LCD_RS_H;
        LCD_RW_L;
        delay_nms(1);
        MCU2LCD_Data=dat;
        LCD_EN_H;
        delay_nms(1);
        LCD_EN_L;
        delay_nms(1);
}

12864.h
#ifndef LCD12864_H_
#define LCD12864_H_
#define uint unsigned int
#define uchar unsigned char

extern void delay_1ms();
extern void delay_nms(uint n);
extern void chk_busy();
extern void write_com(uchar cmdcode);
extern void write_data(uchar Dispdata);
extern void lcdreset();
extern void printstring(uchar *s);
extern void clrscreen();
extern void write_swcom(uchar com);
extern void write_swdat(uchar dat);


#endif /* LCD12864_H_ */

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-7-26 15:36:49 | 显示全部楼层
不错,省的改,谢谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-3 07:54

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表