5653|15

29

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

12864并行驱动程序 [复制链接]

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


BCSCTL1 = CALBC1_8MHZ; // 多谐2楼指导
DCOCTL = CALDCO_8MHZ;


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_ */

[ 本帖最后由 李晓航Elijah 于 2012-7-15 16:43 编辑 ]

最新回复

我们马上要比赛 用430做东西 倒是候帮点忙啊 大神  详情 回复 发表于 2012-8-1 09:19
 
点赞 关注

回复
举报

11

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

改频率,无乱码

BCSCTL1 = CALBC1_8MHZ;    // Set range
DCOCTL = CALDCO_8MHZ;

点评

有效果  详情 回复 发表于 2012-7-15 16:42
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 x0310 的帖子

有效果
 
 
 

回复

50

帖子

0

TA的资源

一粒金砂(中级)

4
 

12864的电压问题

我的12864的电压在5.0V后就会出现乱码,但是在4.8V就会正常,但是4.8V的字比较暗,怎么解决???

点评

请补充。看门狗关掉了吗  详情 回复 发表于 2012-7-16 10:49
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 4楼 nlls1990 的帖子

请补充。看门狗关掉了吗

点评

出来了,谢谢啦:Sweat: 我把线重新连了一下,就可以了  详情 回复 发表于 2012-7-16 10:54
 
 
 

回复

50

帖子

0

TA的资源

一粒金砂(中级)

6
 

回复 5楼 李晓航Elijah 的帖子

出来了,谢谢啦
我把线重新连了一下,就可以了
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

7
 

新手,跪求连接图?

新手,跪求连接图?

点评

//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;  详情 回复 发表于 2012-7-17 07:57
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

8
 

回复 7楼 画质饺子 的帖子

//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;
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

9
 
谢谢楼主
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

10
 

求指教

亲爱的搂住请问P1的几个接口是接在哪里的?

点评

P1就接到液晶上的数据线,DB0-DB7  详情 回复 发表于 2012-8-1 09:03
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(初级)

11
 
不错哦
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

12
 

拜师

楼主 很强大求拜师 加QQ 要比赛了 希望楼主指导

点评

不不不,我430只摸了两天,只改了12864的两段程序。430适合做仪器仪表我就没搞下去了,我做控制的  详情 回复 发表于 2012-8-1 09:01
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

13
 

回复 12楼 刘述武199074 的帖子

不不不,我430只摸了两天,只改了12864的两段程序。430适合做仪器仪表我就没搞下去了,我做控制的

点评

我们马上要比赛 用430做东西 倒是候帮点忙啊 大神  详情 回复 发表于 2012-8-1 09:19
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

14
 

回复 10楼 阿器福 的帖子

P1就接到液晶上的数据线,DB0-DB7
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

15
 

回复 13楼 李晓航Elijah 的帖子

我们马上要比赛 用430做东西 倒是候帮点忙啊 大神

点评

鞭长莫及  详情 回复 发表于 2012-8-1 09:39
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

16
 

回复 15楼 刘述武199074 的帖子

鞭长莫及
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表