3000|6

27

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

关于12864描点问题 希望大家能给与解答 [复制链接]

最近在做关于光照强度的小系统,需要在12864上显示此时光照强度变化的波形,也因为以前一直注意的是模块方面,所以去弄12864的波形显示,就有些尴尬了。听大家说如果要画波形,就先学会画点。所以才开始学12864的画点  ,但遇到了问题如果我想在12864上显示一个点,那么屏幕上就会出现8个连续的点,如果我显示两个连续的,那么屏幕上便会出现连续点,但坐标却不是我设定的位置。
这是描点部分的代码:  希望大家能帮忙解决一下

/***********************void lcd_senddata(串行数据发送 )***********************/       

void lcd_senddata (unsigned char lcddata) //写数据
{
  uchar dat_H,dat_L;
  dat_H=lcddata&0xf0;                 //取高四位
  dat_L=(lcddata<<4)&0xf0;      //取低四位

  lcdsend(0xfa);                  //发送起始信号 //-1按时序第一个字节送 1111 1 RW=0  RS1  0 ,所以第一个字节为FAH

  lcdsend(dat_H);                //发送高四位

  lcdsend(dat_L);                //发送低四位

}


/******************************lcd_sendcom(串行指令发送)******************************/       

void lcd_sendcom (unsigned char lcdcom)
{
  unsigned char com_H,com_L;
                             //分高低字节发送,先送高字节XXXX+0000,再送低字节XXXX+0000
  com_H=lcdcom&0xf0;             //先取数据的高四位
  com_L=(lcdcom<<4)&0xf0;    //取低四位

  lcdsend(0xf8);             //发送起始信号  -1按时序第一个字节送 1111 1 RW=0  RS=0  0 ,所以第一个字节为F8H

  lcdsend(com_H);             //发送高四位

  lcdsend(com_L);            //发送低四位

}
/**********************void Clear_GDRAM(清除GDRAM内部数据) ********************/       
void Clear_GDRAM()
{
uchar x,y;
for(y = 0;y<64;y++)     //y轴方向一共64行
{
for(x = 0;x<16;x++)     //每行数据16位
{
lcd_sendcom(0x34);      //扩展指令集 关闭绘图
lcd_sendcom(y+0x80);    //y轴方向
lcd_sendcom(x+0x80);    //x轴方向
lcd_senddata(0x00);     //送入清屏数据
}
}
lcd_sendcom(0x36);
lcd_sendcom(0x30);
}

/****************************** 12864 串行 数据读取 ******************************/       
uchar lcd_readdata ()
{
uchar i ;
uchar value;
CS_H;
SID_READ;
for(i = 8;i>0;i--)
{
  value<<=1;
SCLK_H;
delay_us(40);
SCLK_L;
delay_us(40);
if(P2IN&BIT1)
value|=1;
}
SID_WRITE;
return value;
}


/****************************** 12864 液晶显示 结束 ******************************/       

/****************************** 12864 液晶绘图描点 ******************************/       

void Draw_Point(uchar X,uchar Y)
{

X_Byte = X / 16 ;   //确定在哪一个字节  总共8个字节
X_Bit  = X % 16 ;   //确定在字节的哪一位  每个字节16位

Y_Scr  = Y / 32;    //确定显示在上(下)屏幕  0:上 1:下
Y_Line = Y % 32;    //确定在屏幕的哪一行

lcd_sendcom(DRAW_OFF);        //关闭绘图功能
lcd_sendcom(EXTEND);        //开启扩展指令集
lcd_sendcom(0x80+Y_Line);           //先确定行的位置
lcd_sendcom(0x80+X_Byte+8*Y_Scr); //其次对显示部分以及大概坐标确定

lcd_readdata ();
temp1 = lcd_readdata () ;
temp2 = lcd_readdata () ;
temp1&=0xf0;
temp2=temp2>>4;
temp2&=0x0f;
lcd_sendcom(0x80+Y_Line);           //先确定行的位置
lcd_sendcom(0x80+X_Byte+8*Y_Scr); //其次对显示部分以及大概坐标确定


if(X_Bit<8)         //如果位数小于8位        
{
lcd_senddata(temp1|(0x01<<(7-X_Bit)));//高位点亮并恢复之前的状态
lcd_senddata(temp2);         //将之前低位的状态送入进去
}
else
{
lcd_senddata(temp1);         //将之前高位的状态送入进去
lcd_senddata(temp2|(0x01<<(15-X_Bit)));//低位点亮并恢复之前的状态
}
lcd_sendcom(DRAW_ON);      //开启绘图模式
lcd_sendcom(BASIC);      //开启 由扩展转换为基本 指令集
}

void main( void )
{
WDTCTL = WDTPW + WDTHOLD;
DCOCTL = 0;
DCOCTL = CALDCO_8MHZ;
BCSCTL1= CALBC1_8MHZ;
P2DIR |= BIT0+BIT1+BIT2;
show_init();//显示初始化
Clear_GDRAM();//清楚GDRAM
Draw_Point(0,0) ;//显示一个点
}


这是显示一个点时候,出现问题的图片 出现了连续的8个点
file:///C:\Users\Mr.Pan\Documents\Tencent Files\582838441\Image\C2C\B7F9AD621E6D6DE9950AA3AF0CB49BCD.jpg

最新回复

你把所有程序添加附件  详情 回复 发表于 2014-8-22 21:56
 
点赞 关注

回复
举报

27

帖子

1

TA的资源

一粒金砂(中级)

沙发
 
使用的是串行IO传输
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
问题解决了吗?我也有类似问题,画点是出现乱的,
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

4
 
这个显示屏是并行传输的吧

点评

并行就不会出现这样的事了  详情 回复 发表于 2014-8-4 21:38
 
 
 

回复

27

帖子

1

TA的资源

一粒金砂(中级)

5
 
Josh 发表于 2014-8-4 17:46
这个显示屏是并行传输的吧

并行就不会出现这样的事了
 
 
 

回复

333

帖子

0

TA的资源

一粒金砂(高级)

6
 
在“12864 串行 数据读取”中,“if(P2IN&BIT1)”表示当P2.1输入1时?你P2.1接液晶什么端口?
 
 
 

回复

333

帖子

0

TA的资源

一粒金砂(高级)

7
 
你把所有程序添加附件
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表