OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5684|回复: 16

st7565r串行模式下怎么读数据

[复制链接]

10

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
312
金钱
312
注册时间
2015-12-22
在线时间
47 小时
发表于 2016-1-1 07:30:29 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2016-1-1 11:13:39 | 显示全部楼层
看数据手册,如果上面没有写,那就无法读数据。一般串行模式好像都不提供读功能
回复 支持 反对

使用道具 举报

10

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
312
金钱
312
注册时间
2015-12-22
在线时间
47 小时
 楼主| 发表于 2016-1-2 09:17:02 | 显示全部楼层
是的!确实不提供在串行模式下的读数据功能!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-1-2 10:57:42 | 显示全部楼层
提问帖,不要发分享帖
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
312
金钱
312
注册时间
2015-12-22
在线时间
47 小时
 楼主| 发表于 2016-1-2 14:24:24 | 显示全部楼层
正点原子 发表于 2016-1-2 10:57
提问帖,不要发分享帖

好的!!!
回复 支持 反对

使用道具 举报

10

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
312
金钱
312
注册时间
2015-12-22
在线时间
47 小时
 楼主| 发表于 2016-1-6 19:25:58 | 显示全部楼层
不行啊!st7565r芯片就是不能实现特定点画线!有知道原因的吗?
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2016-1-6 19:32:20 | 显示全部楼层
1428562873 发表于 2016-1-6 19:25
不行啊!st7565r芯片就是不能实现特定点画线!有知道原因的吗?

看数据手册,检查指令是不是都对,肯定是你的代码有问题。
回复 支持 反对

使用道具 举报

10

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
312
金钱
312
注册时间
2015-12-22
在线时间
47 小时
 楼主| 发表于 2016-1-6 19:36:28 | 显示全部楼层
没有画线的指令啊!也没有设定特定行的命令!求大神指教!
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2016-1-6 19:56:15 | 显示全部楼层
1428562873 发表于 2016-1-6 19:36
没有画线的指令啊!也没有设定特定行的命令!求大神指教!

任何屏幕都没有划线命令吧,线不是由点构成的吗
回复 支持 反对

使用道具 举报

10

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
312
金钱
312
注册时间
2015-12-22
在线时间
47 小时
 楼主| 发表于 2016-1-6 19:58:51 | 显示全部楼层
是啊!那对st7565r芯片来说怎么确定特定坐标呢?
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2016-1-6 20:01:19 | 显示全部楼层
1428562873 发表于 2016-1-6 19:36
没有画线的指令啊!也没有设定特定行的命令!求大神指教!

QQ截图20160106200053.jpg
回复 支持 反对

使用道具 举报

10

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
312
金钱
312
注册时间
2015-12-22
在线时间
47 小时
 楼主| 发表于 2016-1-6 20:10:04 | 显示全部楼层
他可以设置页地址,也可以列地址,但是好像不能设置行地址。我想实现的是具体的某一行画一条线。
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2016-1-6 21:45:00 | 显示全部楼层
1428562873 发表于 2016-1-6 20:10
他可以设置页地址,也可以列地址,但是好像不能设置行地址。我想实现的是具体的某一行画一条线。

你这脑子唉
比如你打算在第四行画直线
第一列:00010000
第二列:00010000
第三列:00010000
              .
              .
              .
画多长,就发多少列的数据
回复 支持 反对

使用道具 举报

10

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
312
金钱
312
注册时间
2015-12-22
在线时间
47 小时
 楼主| 发表于 2016-1-7 08:41:08 | 显示全部楼层
哎!你不懂我的意思!如果只是单纯的画出一条线这个很简单,但是我的这条线上下都是要写字的。按这个方法的话这条线会覆盖掉一些字!
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2016-1-7 09:07:49 来自手机 | 显示全部楼层
本帖最后由 ricefat 于 2016-1-7 09:15 编辑
1428562873 发表于 2016-1-7 08:41
哎!你不懂我的意思!如果只是单纯的画出一条线这个很简单,但是我的这条线上下都是要写字的。按这个方法的 ...

在内存中开辟显存,跟点阵对应,需要添加像素所在的字节用按位或运算,需要抹掉的直接写入。然后把显存内容整屏刷上去
回复 支持 反对

使用道具 举报

10

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
312
金钱
312
注册时间
2015-12-22
在线时间
47 小时
 楼主| 发表于 2016-1-7 09:15:04 | 显示全部楼层
大神!说的太深奥了!能给个程序示例吗?
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2016-1-7 09:22:45 | 显示全部楼层
本帖最后由 ricefat 于 2016-1-7 09:26 编辑
1428562873 发表于 2016-1-7 09:15
大神!说的太深奥了!能给个程序示例吗?

[mw_shl_code=c,true]/*****************************************************/
/*            File name : LCD.c                                             */
/* Description : Code  for COG12864 LCD, display IC:ST7565S                 */
/* Platform    : MDK for STM32F103RBT6                   */
/* Author      : Michael Zhang - 章其波  Modified by Rice                   */
/* Email       : sudazqb@163.com                         */
/* MSN         : zhangqibo_1985@hotmail.com                                 */
/* Date        : 2007-10-21  2009-12-01                                     */
/* NOT FOR COMMERCIAL USE,     ALL RIGHT RESERVED!                          */
/*****************************************************/
/* Change Log:                                                              */
/*                   20071122: fix a bug for some 3310lcd will not work with display function */
/*                   20071021: original version                             */
/*****************************************************/

#include <stm32f10x_lib.h>
#include "lcd.h"
#include "lcd_app.h"
#include "lcd_ascii.h"
#include "delay.h"

/*SCE(片选E),RST(RST),D/C(A0),DIN(SI),SCLK(SCK)*/

/********************  IO utilities ***************************/
#define LCD_RS_H  GPIOE->ODR |= 1<<2;
#define LCD_RS_L  GPIOE->ODR &= ~(1<<2); //A0  PE2

#define LCD_E_H  GPIOE->ODR |= 1<<0;
#define LCD_E_L  GPIOE->ODR &= ~(1<<0);     //SCE  PE0

#define LCD_RST_H  GPIOE->ODR |= 1<<1;
#define LCD_RST_L  GPIOE->ODR &= ~(1<<1);  //RST  PE1

#define LCD_SCK_H  GPIOE->ODR |= 1<<4;
#define LCD_SCK_L  GPIOE->ODR &= ~(1<<4);  //SCK PE4

#define LCD_MOSI_H  GPIOE->ODR |= 1<<3;
#define LCD_MOSI_L  GPIOE->ODR &= ~(1<<3);  //SI  PE3


/*#define PORT_INI {                                \
                                       
                                        LCD_RS_H;        \
                                        LCD_E_H;        \
                                        LCD_RST_H;        \
                                        LCD_SCK_H;        \
                                        LCD_MOSI_H;        \
                                        LCD_RS_DDR |= 1<<LCD_RS_BIT;        \
                                        LCD_E_DDR |= 1<<LCD_E_BIT;        \
                                        LCD_RST_DDR |= 1<<LCD_RST_BIT;        \
                                        LCD_SCK_DDR |= 1<<LCD_SCK_BIT;        \
                                        LCD_MOSI_DDR |= 1<<LCD_MOSI_BIT;        \
                                }*/
                                
/*********** Display buffer in SRAM ************/
unsigned char disBuf[1024]; //12864有128*64个点,每8个占用1字节的数据,故一共有1024个字节




#if HW_SPI
/*********************** Hardware SPI Speed Set **************/
void lcdSpiSpeedSet(void)
{
        SPCR =  (1<<SPE) | (1<<MSTR);

#if (F_CPU>8000000)
        SPSR &= ~(1<<SPI2X);  /* 1/4 F_CPU */
#else
        SPSR |= 1<<SPI2X;     /* 1/2 F_CPU */
#endif
}
/************************ Hardware SPI Speed set End *********/
#endif
                                            
/************************ SPI write a byte *********************/
void lcdWriteByte(unsigned char val)
{
        //LCD_E_L;
        
#if HW_SPI                                /* Use Hardware SPI */
        SPDR = val;
        while(!(SPSR & (1<<SPIF)));        /* Wait transfer end */        
#else                                        /* Use common GPIO to simulate the timing*/
        unsigned char i = 8;
        while(i--)
        {
                LCD_SCK_L;
                if(val&0X80)
                {
                        LCD_MOSI_H;        /* MSB first */
                }
                else
                {
                        LCD_MOSI_L;
                }
                LCD_SCK_H;
                val <<= 1;                                /* Data shift */
        }
#endif

        //LCD_E_H;
}
/***************************************************************/

/************************ SPI write a command *********************/
void lcdWriteCmd(unsigned char val)
{
        unsigned char i = 8;
        //LCD_E_L;
        LCD_RS_L; //A0
        
#if HW_SPI                                /* Use Hardware SPI */
        SPDR = val;
        while(!(SPSR & (1<<SPIF)));        /* Wait transfer end */        
#else                                        /* Use common GPIO to simulate the timing*/
        
        while(i--)
        {
                LCD_SCK_L;
                if(val&0X80)
                {
                        LCD_MOSI_H;        /* MSB first */
                }
                else
                {
                        LCD_MOSI_L;
                }
                LCD_SCK_H;
                val <<= 1;                                /* Data shift */
        }
#endif

        LCD_RS_H;
        //LCD_E_H;
}
/***************************************************************/

/******** Clear the display buffer, external buffer in mico's SRAM ***************/
void lcdClrDisBuf(void)
{
        unsigned int n = 1024;
        unsigned char * p = disBuf;
        while(n--)*p++ = 0X00;
}

/** Update the display, actually transfer the data of the SRAM to LCD through SPI ****/
void lcdUpdateDisplay(void)
{
        //unsigned int n = 504;
        unsigned char * p = disBuf;
        unsigned int i,j;

#if HW_SPI                        /* If hardware SPI is used, adjust the SPI speed*/
        lcdSpiSpeedSet();        /* Other SPI device may share the SPI & they may change the speed */
#endif

        LCD_E_L;                /* Chip select */

/***************************************************************************/
/*** It seems that some 3310lcd do not support the following code  ****/

         //lcdWriteCmd(0x0c);
        //lcdWriteCmd(0x40 | 0);        /* Set row to 0 */
          //lcdWriteCmd(0x80 | 0);        /* Set column to 0*/
                                                        /* To make sure the data always start at codinate(0,0) */
        //while(n--)
        //        lcdWriteByte(*p++);
/***************************************************************************/

/* so we use this, set the address at each row */        
        for(i=0;i<8;i++)
        {
                lcdWriteCmd(0xB0 | i);        /* Set row to 0 */
                  lcdWriteCmd(0X10);        /* Set column to 0*/
                lcdWriteCmd(0X04); //设置column时,如果ADC设置为反向(131~0,而不是127~0),那么每行应该从第5个(0~4)开始,否则第一个字符显示不全。
                for(j=0;j<128;j++)
                {
                        lcdWriteByte(*p++);
                }
        }
        LCD_E_H;                /* chip deselect */
}

/***************** LCD initialization *****************************/
void lcdInit(void)
{
        RCC->APB2ENR|=1<<6;//PORTE时钟使能
        GPIOE->CRL&=0XFFF00000; //复位GPIOE端口状态
        GPIOE->CRL|=0X00033333; //PE4:0推挽输出
        GPIOE->ODR|=0X1F; // PE4:0输出高                                                                                 
        //PORT_INI;                /* IO port initialization*/

#if HW_SPI                        /* If hardware SPI is used, adjust the SPI speed */
        //lcdSpiSpeedSet();
        SPCR =  (1<<SPE) | (1<<MSTR)|(1<<SPR0)|(1<<SPR1);
        SPSR &= ~(1<<SPI2X);  /* 1/4 F_CPU */
#endif        

        lcdClrDisBuf();        /* clear display buffer: not the lcd internal buffer */

        delay_ms(15);        /*MAX F_CPU should below than 16MHz*/
        delay_ms(15);

        LCD_RST_L;                /* Reset LCD */
        delay_ms(2);
        delay_ms(2);
        LCD_RST_H;

        delay_ms(1);        /* Short Delay */

        LCD_E_L;                /* Enable LCD: CS = 0 */

        lcdWriteCmd(0xA3);        /* LCD Bias selection(1/65 Duty,1/7Bias) */
        lcdWriteCmd(0xA1);        /* ADC selection(SEG0->SEG128) */
        lcdWriteCmd(0xC0);        /* SHL selection(COM64->COM0) */
        lcdWriteCmd(0x26);        /* Regulator Resistor Selection*/
        delay_ms(15);
        lcdWriteCmd(0x81);        /* Electronic Volume 该命令代表开始设置对比度,下一句为设置值*/
        lcdWriteCmd(0x2A);        /* Reference Register selection  Vo=(1+Rb/Ra)(1+a)*2.1=10*/
        lcdWriteCmd(0x2C);        /* Power Control(Vc=1;Vr=0;Vf=0)  */
        delay_ms(15);
        lcdWriteCmd(0x2C|0x2A);        
        delay_ms(15);
        lcdWriteCmd(0x2C|0x2A|0x29);
        delay_ms(15);
        lcdWriteCmd(0xF8);
        lcdWriteCmd(0x01);
        lcdWriteCmd(0xA7);
        delay_ms(15);
        lcdWriteCmd(0xAF); //开显示
        lcdUpdateDisplay();        /* Update display */

        LCD_E_H;                /* Disable LCD: CS =1 */
}

/*********** Set a pixel bit with value val *************************/
void OnePixel(unsigned char x,unsigned char y,unsigned char val)
{
        unsigned char *p = &disBuf[ (unsigned int)y/8*128 + x ];//找到对应字节
        if(val)
        {
                *p |= (1<<(y%8));                //修改对应位
        }
        else
        {
                *p &= ~(1<<(y%8));
        }
}
/**********  Read the pixel value withe the given codination ************/
unsigned char ReadPixel(unsigned char x,unsigned char y)
{
        unsigned char *p = &disBuf[ (unsigned int)y/8*128 + x ];//找到对应字节
        if(*p & (1<<(y%8)))return 1;
        else return 0;
}

/* demo program*/
/*int main()
{
        unsigned char i;
        lcdInit();
        OnePixel(0,0,1);
        OnePixel(127,0,1);
        OnePixel(0,63,1);
        OnePixel(127,63,1);
        OnePixel(63,31,1);
        OnePixel(64,32,1);
        for(i=0;i<128;i++)
        {
        OnePixel(i,60,1);
        }
        LCD_print12(10,15,"ABCDE\nFIPC\nOnePixel(127,63,1);for(i=0;i<128;i++)");
        lcdUpdateDisplay();
        while(1);[/mw_shl_code]

最开始是章大神写的代码,我针对7565做了修改
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 23:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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