8348|21

29

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

修改12864串口驱动程序 [复制链接]

主函数main.c
#include <msp430g2553.h>
#include"LCD12864P.h"

void main()
{
WDTCTL = WDTPW + WDTHOLD;
Ini_Lcd();
lcd_pos(1,0);
Disp_HZ("液晶12864",5);
lcd_pos(3,4);
Disp_HZ("欢迎使用",4);
lcd_pos(2,3);
Disp_SZ(0);
Disp_SZ(3);
while(1);
}

LCD12864P.c
#include<msp430g2553.h>
#define BIT(x) (1 << (x))
#define uint unsigned int
#define uchar unsigned char
uchar LCD_table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};//0123456789

void Send(uchar type,uchar transdata);

#define cyCS 0 //P1.0,片选信号
#define cySID 1 //P1.1,串行数据
#define cyCLK 2 //P1.2,同步时钟
#define cyPORT P1OUT
#define cyDDR P1DIR

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

void delay_nms(uint n)
{
uint i = 0;
for(i = n;i > 0;i--)
delay_1ms();
}

void Ini_Lcd(void)
{
cyDDR |= BIT(cyCLK) + BIT(cySID) + BIT(cyCS); //相应的位端口设置为输出
delay_nms(600); //延时等待液晶完成复位
Send(0,0x30); /*功能设置:一次送8位数据,基本指令集*/
delay_nms(10);
Send(0,0x02); /*DDRAM地址归位*/
delay_nms(5);
Send(0,0x0c); /*显示设定:开显示,不显示光标,不做当前显示位反白闪动*/
delay_nms(5);
Send(0,0x01); /*清屏,将DDRAM的位址计数器调整为“00H”*/
delay_nms(500);
Send(0,0x06); /*功能设置,点设定:显示字符/光标从左到右移位,DDRAM地址加1*/
delay_nms(10);
}

void Send(uchar type,uchar transdata)//0-写控制命令,1-写数据
{
uchar firstbyte = 0xf8;
uchar temp;
uchar i,j = 3;

if(type) firstbyte |= 0x02;

cyPORT |= BIT(cyCS);
cyPORT &= ~BIT(cyCLK);
while(j > 0)
{
if(j == 3) temp = firstbyte;
else if(j == 2) temp = transdata&0xf0;
else temp = (transdata << 4) & 0xf0;

for(i = 8;i > 0;i--)
{
if(temp & 0x80) cyPORT |= BIT(cySID);
else cyPORT &= ~BIT(cySID);
cyPORT |= BIT(cyCLK);
temp <<= 1;
cyPORT &= ~BIT(cyCLK);
}
//三个字节之间一定要有足够的延时,否则易出现时序问题
if(j == 3) delay_nms(1);
else delay_nms(1);

j--;
}

cyPORT &= ~BIT(cySID);
cyPORT &= ~BIT(cyCS);
}

void lcd_pos(uchar x,uchar y)//定位
{
uchar pos;
switch(x)
{
case 1:pos=0x80;break;
case 2:pos=0x90;break;
case 3:pos=0x88;break;
case 4:pos=0x98;break;
default:pos=0x80;
}
pos += y;
Send(0,pos);
}

void Disp_HZ(const uchar * pt,uchar num)//显示汉字
{
uchar i;
for(i = 0;i < (num*2);i++)
Send(1,*(pt++));
}

void Disp_SZ(uchar shuzi)//显示一个数字
{
Send(1,LCD_table[shuzi]);
}

LCD12864P.h
#ifndef LCD12864_H_
#define LCD12864_H_
#define uint unsigned int
#define uchar unsigned char
extern uchar LCD_table[];//0123456789
extern void delay_1ms();
extern void delay_nms(uint n);
extern void Ini_Lcd(void);
extern void Send(uchar type,uchar transdata);//0-写控制命令,1-写数据
extern void lcd_pos(uchar x,uchar y);//定位
extern void Disp_HZ(const uchar * pt,uchar num);//显示汉字
extern void Disp_SZ(uchar shuzi);//显示一个数字
#endif /* LCD12864_H_ */

最新回复

我在CCS 里 编译你的程序,下载到板子上,用示波器测试了下 引脚 都没有输出阿,没波形。何解?  详情 回复 发表于 2012-7-19 13:21

点评

请问 楼主 LCD12864 用的是什么型号? 是3.3V的吗  详情 回复 发表于 2012-7-17 08:46
 
点赞 关注

回复
举报

50

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

主时钟问题

请教一下,你的这个串行口初始的时候没有设定主时钟,是直接用的DCO 1MHZ的晶振吗?

点评

没有这个是我拿到板子写的第二个程序,我今天才开始看时钟配置  详情 回复 发表于 2012-7-16 10:48
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 nlls1990 的帖子

没有这个是我拿到板子写的第二个程序,我今天才开始看时钟配置

点评

那你的应该是初始化的DCO 1MHZ,你不知道主时钟,怎么写的延时?  详情 回复 发表于 2012-7-16 10:56
 
 
 

回复

50

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 板凳 李晓航Elijah 的帖子

那你的应该是初始化的DCO 1MHZ,你不知道主时钟,怎么写的延时?

点评

呵呵,就那样写的。。。  详情 回复 发表于 2012-7-16 11:07
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 4楼 nlls1990 的帖子

呵呵,就那样写的。。。

点评

佩服佩服,所以现在我在改串行输出时时序问题总是有很大的影响:puzzle:  详情 回复 发表于 2012-7-16 11:46
 
 
 

回复

50

帖子

0

TA的资源

一粒金砂(中级)

6
 

回复 5楼 李晓航Elijah 的帖子

佩服佩服,所以现在我在改串行输出时时序问题总是有很大的影响

点评

呵呵,等你改好了贴上来吧  详情 回复 发表于 2012-7-16 18:01
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 6楼 nlls1990 的帖子

呵呵,等你改好了贴上来吧
 
 
 

回复

1万

帖子

16

TA的资源

版主

8
 

写得不错,顶

 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 楼主 李晓航Elijah 的帖子

请问 楼主 LCD12864 用的是什么型号? 是3.3V的吗
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

10
 
YM12864R P-1电压5V

点评

是不是 有串口功能 带字库就可以  详情 回复 发表于 2012-7-17 10:23
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

11
 

回复 10楼 李晓航Elijah 的帖子

是不是 有串口功能 带字库就可以

点评

带字库就行了  详情 回复 发表于 2012-7-17 10:38
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

12
 

回复 11楼 风在心中 的帖子

带字库就行了

点评

楼主 你复位引脚怎么接的? 还有就是调节偏压的那个是直接接VCC还是接多少K的电位器? 谢谢  详情 回复 发表于 2012-7-18 08:53
 
 
 

回复

7219

帖子

192

TA的资源

五彩晶圆(高级)

13
 
学习一下  一直喜欢用并口的 看看这个
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

14
 
很牛啊。
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

15
 

回复 12楼 李晓航Elijah 的帖子

楼主  你复位引脚怎么接的? 还有就是调节偏压的那个是直接接VCC还是接多少K的电位器? 谢谢

点评

接103的电位器  详情 回复 发表于 2012-7-18 15:43
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

16
 

回复 15楼 风在心中 的帖子

接103的电位器
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

17
 

LCD12864的复位引脚呢? 悬空吗

点评

就三根控制线,VCC和GND,其他都不要接的  详情 回复 发表于 2012-7-19 08:52
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

18
 

回复 17楼 风在心中 的帖子

就三根控制线,VCC和GND,其他都不要接的

点评

我在CCS 里 编译你的程序,下载到板子上,用示波器测试了下 引脚 都没有输出阿,没波形。何解?  详情 回复 发表于 2012-7-19 13:21
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

19
 
请问 楼主用的是 IAR 还是 CCS调试的?

点评

我用CCS的  详情 回复 发表于 2012-7-19 16:58
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

20
 

回复 18楼 李晓航Elijah 的帖子

我在CCS 里 编译你的程序,下载到板子上,用示波器测试了下 引脚 都没有输出阿,没波形。何解?

点评

我在测试定时器产生方波程序的时候,示波器也会出现没有信号的情况,后来它又正常了,所以我也不知道这是什么问题。我的程序修改别人程序写的,单纯的显示模块,如果加入其它程序块我不能保证能够正常显示  详情 回复 发表于 2012-7-19 17:01
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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