10058|19

54

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

求一份12864串行传输打点的程序 [复制链接]

不要写字的,只要打点就行了。

最新回复

在层主的帮助下实现了显示字符串和打点程序 部分程序需要修正 对于字符串显示中 要将display_strings中引用的数组row1~row4后面分别加上  原程序引用的是地址不会报错 但是会显示错误  详情 回复 发表于 2017-5-28 16:14
 
点赞 关注

回复
举报

141

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
不同液晶控制芯片不同,命令也不同

点评

ST7920的。  详情 回复 发表于 2012-7-18 15:02
 
 

回复

54

帖子

0

TA的资源

一粒金砂(高级)

板凳
 

回复 沙发 zwq2 的帖子

ST7920的。
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

4
 

12864串行显示及打点程序

#include
#define uchar unsigned char
#define CS1   P2OUT |= BIT0   //串行LCD宏定义
#define CS0   P2OUT &=~BIT0
#define SID1  P2OUT |= BIT1
#define SID0  P2OUT &=~BIT1
#define SCLK1 P2OUT |= BIT2
#define SCLK0 P2OUT &=~BIT2
#define RST1  P2OUT |= BIT3
#define RST0  P2OUT &=~BIT3
//#define PSB0   P2OUT |= BIT4
//#define PSB1   P2OUT &=~BIT4
//函数声明
void InitSys();
void delay_ms(unsigned int);
void display_strings(void);
void displaydot(unsigned char x0,unsigned char y0 );
void lcdinit(void);
void clrgdram(void);
void write_com(unsigned char);
void write_data(unsigned char);
void sendbyte(unsigned char);
uchar ReadByte(void);
uchar Read_dos(uchar mode);
int  flag=1;
char row1[]={"液晶显示屏12864 "};
char row2[]={"串行静态显示模式"};
char row3[]={"430LaunchpadBord"};
char row4[]={"只需四个IO口即可"};
char num[]={"0123456789"};
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
InitSys(); //初始化
//display_strings(); //写入液晶中静态显示部分数据
//delay_ms(2000);
clrgdram();
displaydot(30,50);
displaydot(30,51);
displaydot(30,52);
displaydot(30,53);
displaydot(30,54);
}
/*****************************************************************************
系统初始化
******************************************************************************/
void InitSys()
{
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
{
   while(1);                               // If calibration constants erased
                                           // do not load, trap CPU!!
}
BCSCTL1 = CALBC1_8MHZ;                    // 设定工作频率为8M
DCOCTL  = CALDCO_8MHZ;                    // Set DCO step + modulation */
P2DIR=0x1f;
lcdinit();  //LCD初始化
}
//毫秒级延时
void delay_ms(unsigned int nValue)//delay 1ms at 8M
{
unsigned int nCount;
unsigned int ii;
unsigned int jj;
nCount = 1980;
for(ii = nValue;ii > 0;ii--)
{
  for(jj = nCount;jj > 0;jj--)
  _NOP();
}
}
//液晶初始化
void lcdinit()
{
RST0;
delay_ms(10);
RST1;
delay_ms(200);
write_com(0x30);  //功能设定:基本指令集
delay_ms(5);
write_com(0x0c);  //显示状态:整体显示,游标关
delay_ms(5);
write_com(0x01);  //清空显示
delay_ms(5);
}
//读一个字节
uchar ReadByte(void)
{
uchar i,temp;
CS1;
for(i=0;i<8;i++)
   {
    temp=temp<<1;
    SCLK1;
    SCLK0;
delay_ms(5);
    if(P2IN&0x02) temp++;
   }
return temp;
}
//发送1字节数据
void sendbyte(unsigned char zdata)
{
unsigned int i;
for(i=0; i<8; i++)
{
  if((zdata << i) & 0x80)
  {
   SID1;
  }
  else
  {
   SID0;
  }
  SCLK0;
  SCLK1;
}
}
//写命令
void write_com(unsigned char cmdcode)
{
CS1;
sendbyte(0xf8);   //1 1 1 1 RS RW 0   写操作RW=0 11111000写数据 11111010写指令
sendbyte(cmdcode & 0xf0);
sendbyte((cmdcode << 4) & 0xf0);
delay_ms(1);
CS0;
}
//写数据
void write_data(unsigned char Dispdata)
{
CS1;
sendbyte(0xfa);
sendbyte(Dispdata & 0xf0);
sendbyte((Dispdata << 4) & 0xf0);
delay_ms(1);
CS0;
}
//读一字节数据或状态函数:Read_dos(unsigned char mode)
uchar Read_dos(uchar mode)
{
  uchar temp,temp1,temp2;
  sendbyte(mode);
  delay_ms(5);
  temp1=ReadByte();
  delay_ms(1);
  temp2=ReadByte();
  delay_ms(1);
  temp2>>=4;
  temp2&=0x0f;   //屏蔽高四位
  temp1&=0xf0;   //屏蔽低四位
  temp=temp1 | temp2;
  return(temp);
}
/****************************************/
void display_strings()
{
unsigned int i;
delay_ms(20);
write_com(0x80);            //第1行
for(i=0;i<16;i++)
{
   write_data(row1);
   delay_ms(1);
}
write_com(0x90);           //第2行
for(i=0;i<16;i++)
{
   write_data(row2);
   delay_ms(1);
}
write_com(0x88);           //第3行
for(i=0;i<16;i++)
{
  write_data(row3);
  delay_ms(1);
}
write_com(0x98);           //第4行
for(i=0;i<16;i++)
{
   write_data(row4);
   delay_ms(1);
}
}
//清整个GDRAM空间
void clrgdram(void)
{
   unsigned char x,y;
   for(y=0;y<64;y++)
    for(x=0;x<16;x++)
    {
    write_com(0x34);
    write_com(y+0x80);     //行地址
    write_com(x+0x80);     //列地址
    write_com(0x30);
    write_data(0x00);
    write_data(0x00);
    }
}
//***********************************************************************************
//0,0---------------------127,0
//0,63-------------------127,63坐标
//(打点)打点位置的定位
//根据Datesheet需先把数据写到GDRAM,读取当前位置的数据,
//经过或和移位后再把数据重新写入
//***********************************************************************************
void displaydot(unsigned char x0,unsigned char y0 )//在任意位置画点输入范围x0-127  y 0-63
{
  unsigned char x,y,xb,yb,GDRAM_hbit,GDRAM_lbit;   // X,Y坐标互换,即普通的X,Y坐标
    x=x0/16;                     //定义列地址的字节位,及在字节中的哪1位
    y=y0&0x1f;                   //计算在0~31当中的哪一行
    yb=y0/32;                    //0为上半屏,1为下半屏
    xb=x0&0x0f;                  //计算在该字节16bit中的哪一位
    write_com(0x34);          //打开扩展指令集
    write_com(0x36);          //打开绘图显示
    write_com(y+0x80);        //写行地址Y坐标
    write_com(x+0x80+yb*8);   //写列地址X坐标通过8*yb选定上下屏,每行8*16=128
    ReadByte();                  //当前地址读,第一次虚读
    GDRAM_hbit=ReadByte();       //读取当前显示高8位数据
    GDRAM_lbit=ReadByte();       //读取当前显示低8位数据
    write_com(y+0x80);        //写行地址
    write_com(x+0x80+yb*8);   //写列地址
    if(xb<8)                     //判断其在高8位,还是在低8位
       {
     write_data(GDRAM_hbit|(0x01<<(7-xb)));  //显示GDRAM区高8位数据
     write_data(GDRAM_lbit);                 //显示GDRAM区低8位数据
       }
    else
       {
       write_data(GDRAM_hbit);
       write_data(GDRAM_lbit|(0x01<<(15-xb)));
       }
    write_com(0x30);
}


这个程序是我今天调出来的,在msp430LaunchPad上可用,你可以试一下。

点评

编译都通不过!ccsv5.0版本!  详情 回复 发表于 2012-8-26 11:13
在编译的时候就有4个错误,因为是显示汉字的,我就把屏蔽掉了,你回头可以改下,你把地址传给写函数但是你的写函数接受的是uchar的类型,这是一点,二点,你的Read_dos(mode)这个函数没有用到,我估计这个是你的读  详情 回复 发表于 2012-7-23 02:42
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(高级)

5
 

回复 4楼 xuejian 的帖子

在编译的时候就有4个错误,因为是显示汉字的,我就把屏蔽掉了,你回头可以改下,你把地址传给写函数但是你的写函数接受的是uchar的类型,这是一点,二点,你的Read_dos(mode)这个函数没有用到,我估计这个是你的读函数,所以我帮你改了替换了在 displaydot里的readbyte()函数,并且加了mode的含义是11111110(0xfe),但是这样依旧显示不出来,所以我想问下,你那是否编译通过了,在显示屏上是否有线条了,如果有效果的话,能否再发一次你的程序给我,谢谢。顺便说下,如果能加下我的QQ:465055608,这样的话,我们可以更好的交流,谢谢。

点评

Read_dos(unsigned char mode)函数确实没有用上,可以直接删除。displaydot里的用readbyte()函数是能用的。我不知道你用的什么软件编译的,我用CCSV5编译是没有错误的,并且这个程序的确能让12864打点。  详情 回复 发表于 2012-7-23 15:05
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

6
 

回复 5楼 465055608 的帖子

Read_dos(unsigned char mode)函数确实没有用上,可以直接删除。displaydot里的用readbyte()函数是能用的。我不知道你用的什么软件编译的,我用CCSV5编译是没有错误的,并且这个程序的确能让12864打点。

点评

那这样的话,你的程序的问题更大了,读也是有时序的,你可以看下手册,我估计你是从网上移植的,但是读这个就按并行的写了,你可以试试打这样几个点, for(i=0;i  详情 回复 发表于 2012-7-23 16:31
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(高级)

7
 

回复 6楼 xuejian 的帖子

那这样的话,你的程序的问题更大了,读也是有时序的,你可以看下手册,我估计你是从网上移植的,但是读这个就按并行的写了,你可以试试打这样几个点,
for(i=0;i<5;i++)
{
      displaydot(i,0);
}
你可以自己数数,是5个点还是1个点。
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

8
 
我试了试,的确是一个点
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

9
 
有谁会横着一个点一个点打,连续挨着打几个点呢!

点评

你显示方波,三角波,正弦波都是需要这样的,如果没有这样做过,那只是你没碰到这样的问题。  详情 回复 发表于 2012-7-29 17:20
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

10
 
各位大侠  有没有调试出来  如:能在液晶显一个完整的波形    如果有的话  能不能贴出来一下,,在此感激不尽啊

点评

我也是连续打点不行,我这有个网址,他写了点,你们试试行吗,我试了不行,你们试试,行了的话分享一下http://hi.baidu.com/wolinxuebin/item/2f61c8bbc637bfd985dd794b  详情 回复 发表于 2012-7-31 23:41
兄弟,你调出来没有啊,调出来了的话,给我说一声可以不?  详情 回复 发表于 2012-7-30 20:34
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(高级)

11
 

回复 9楼 大唐正使 的帖子

你显示方波,三角波,正弦波都是需要这样的,如果没有这样做过,那只是你没碰到这样的问题。
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

12
 
串行读数据读不出啊~~~
我自己写了个,一直读不出,网上几乎没有用串行读出来的程序

点评

对啊,我就没理解怎么读数据,我的12864用的是5V电源,那读到的高电平不也是5V嘛,430的电压才3.3V 这都不一样能产生PIN相应的跳变吗?而我要是用3.3的电压接12864的话,液晶都不亮,连汉字都不出!求解释啊.....  详情 回复 发表于 2012-7-31 09:57
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

13
 

回复 10楼 zoujun 的帖子

兄弟,你调出来没有啊,调出来了的话,给我说一声可以不?
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

14
 
兄弟,出结果没,分享一下
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

15
 

回复 12楼 279827164 的帖子

对啊,我就没理解怎么读数据,我的12864用的是5V电源,那读到的高电平不也是5V嘛,430的电压才3.3V 这都不一样能产生PIN相应的跳变吗?而我要是用3.3的电压接12864的话,液晶都不亮,连汉字都不出!求解释啊.....
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

16
 

回复 10楼 zoujun 的帖子

我也是连续打点不行,我这有个网址,他写了点,你们试试行吗,我试了不行,你们试试,行了的话分享一下http://hi.baidu.com/wolinxuebin/item/2f61c8bbc637bfd985dd794b
 
 
 

回复

37

帖子

0

TA的资源

一粒金砂(中级)

17
 
串行读不出来啊……
 
个人签名谣言止于智者,聊天止于呵呵
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

18
 
串行读不出来的!绘图只能用并行!
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

19
 

回复 4楼 xuejian 的帖子

编译都通不过!ccsv5.0版本!
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

20
 
xuejian 发表于 2012-7-23 00:01
#include
#define uchar unsigned char
#define CS1   P2OUT |= BIT0   //串行LCD宏定义
#define CS0    ...

在层主的帮助下实现了显示字符串和打点程序 部分程序需要修正 对于字符串显示中 要将display_strings中引用的数组row1~row4后面分别加上  原程序引用的是地址不会报错 但是会显示错误
 
 
 

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

随便看看
查找数据手册?

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