OpenEdv-开源电子网

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

STM32 +LCM12864R液晶 串行连接,,找不到原因为什么显示不出数据。。。急求过来人帮我看下

[复制链接]

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2014-5-9
在线时间
0 小时
发表于 2014-5-15 15:30:57 | 显示全部楼层 |阅读模式
5金钱
现在显示不出数据啊。。求指教 哪里有问题。。串行连接 SB--PC9,CS----PC7,SDA--PC6,SCLK---PC8.
程序如下
//----------------头文件声明--------------------
#include"stm32f10x_lib.h" //包含所有的头文件
#include<stdio.h>
#define UP   1
#define DOWN 0
//----------------函数声明--------------------
void RCC_Configuration(void);
void GPIO_Configuration(void);
void LCD_GPIO_Config(void);
void send_bit(u8 byte);
void write_command(u8 command);
void write_data(const u8 Data);
void write_zi( u8 *S);
void write_character(u8 address,const u8 *p);
void lcd_pos(u8 X,u8 Y);
void LCD_init(void);
void display_adc(void);
 void delay_ms(u16 dly);

const unsigned char table1[]=" ADC值:";
const unsigned char table2[]="电压值:";
u16 adc=5,adc1=9;
u8 qian,bai,shi,ge;
u8 ADC_0,ADC_1,ADC_2,ADC_3,ADC_4;
/*液晶端口定义*/
#define LCD_CS(a)        if (a) \
                                        GPIO_SetBits(GPIOC,GPIO_Pin_7);\
                                        else                \
                                        GPIO_ResetBits(GPIOC,GPIO_Pin_7)

#define LCD_SID(a)        if (a)        \
                                        GPIO_SetBits(GPIOC,GPIO_Pin_6);\
                                        else                \
                                        GPIO_ResetBits(GPIOC,GPIO_Pin_6)

#define LCD_SCLK(a)        if (a)        \
                                        GPIO_SetBits(GPIOC,GPIO_Pin_8);\
                                        else                \
                                        GPIO_ResetBits(GPIOC,GPIO_Pin_8)

#define LCD_PSB(a)        if (a)        \
                                        GPIO_SetBits(GPIOC,GPIO_Pin_9);\
                                        else                \
                                        GPIO_ResetBits(GPIOC,GPIO_Pin_9) 

#define A1 GPIOA->BSRR
#define A0 GPIOA->BRR

#define GPIOA_ODR_A  (GPIOA_BASE+0x0C)
#define GPIOA_IDR_A  (GPIOA_BASE+0x08)
#define GPIOB_ODR_A  (GPIOB_BASE+0x0C)
#define GPIOB_IDR_A  (GPIOB_BASE+0x08)
#define GPIOC_ODR_A  (GPIOC_BASE+0x0C)
#define GPIOC_IDR_A  (GPIOC_BASE+0x08)
#define GPIOD_ODR_A  (GPIOD_BASE+0x0C)
#define GPIOD_IDR_A  (GPIOD_BASE+0x08)
#define GPIOE_ODR_A  (GPIOE_BASE+0x0C)
#define GPIOE_IDR_A  (GPIOE_BASE+0x08)

#define BitBand(Addr,BitNum)    *((volatile unsigned long *)((Addr&0xF0000000)+0x2000000+((Addr&0xfffff)<<5)+(BitNum<<2)))

#define Aout(n)   BitBand(GPIOA_ODR_A,n)
#define Ain(n)    BitBand(GPIOA_IDR_A,n)
#define Bout(n)   BitBand(GPIOB_ODR_A,n)
#define Bin(n)    BitBand(GPIOB_IDR_A,n)
#define Cout(n)   BitBand(GPIOC_ODR_A,n)
#define Cin(n)    BitBand(GPIOC_IDR_A,n)
#define Dout(n)   BitBand(GPIOD_ODR_A,n)
#define PDin(n)    BitBand(GPIOD_IDR_A,n)
#define PEout(n)   BitBand(GPIOE_ODR_A,n)
#define PEin(n)    BitBand(GPIOE_IDR_A,n)
/*******************************************************************************
* Function Name: main
* Description : Main program.
* Input       : None
* Output      : None
* Return      : None
*******************************************************************************/ 
int  main(void)
{
RCC_Configuration();
GPIO_Configuration();
LCD_GPIO_Config();
LCD_init();
GPIOD->CRH = 0x44444444;
GPIOD->CRL = 0x34433344;   //2 3管脚 输出模式 最大速度50MHZ,通用推挽输出
while(1)
{
display_adc();
}
}

 
 void delay_ms(u16 dly)
 {
  u16 i,j;
  for(i=0;i<dly;i++)
  for(j=60000;j>0;j--);
 }

void RCC_Configuration(void)
{
//----------使用外部RC晶振-----------
RCC_DeInit(); //初始化为缺省值
RCC_HSEConfig(RCC_HSE_ON); //使能外部的高速时钟 
//  while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); //等待外部高速时钟使能就绪

//FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Enable Prefetch Buffer
//FLASH_SetLatency(FLASH_Latency_2); //Flash 2 wait state

RCC_HCLKConfig(RCC_SYSCLK_Div1); //HCLK = SYSCLK
RCC_PCLK2Config(RCC_HCLK_Div1); //PCLK2 =  HCLK
RCC_PCLK1Config(RCC_HCLK_Div2); //PCLK1 = HCLK/2
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 8MHZ * 9 =72MHZ
RCC_PLLCmd(ENABLE); //Enable PLLCLK

//  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Wait till PLLCLK is ready
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //Select PLL as system clock
//  while(RCC_GetSYSCLKSource()!=0x08); //Wait till PLL is used as system clock source

//---------打开相应外设时钟--------------------
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能APB2外设的GPIOA的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE); //使能APB2外设的GPIOD的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
//GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);    
}

// /*******************************************************************************
// * Function Name: GPIO_Configuration
// * Description : 初始化GPIO外设
// * Input       : None
// * Output      : None
// * Return      : None
// *******************************************************************************/ 
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  /* Configure USARTx_Tx as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* Configure USARTx_Rx as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

}
void LCD_GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        /*开启GPIO的外设时钟*/
        RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC,ENABLE);
        /*选择要用的GPIO引脚*/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void send_bit(u8 byte)
{
        u8 x;
        for(x=0;x<8;x++)
        {
                if((byte<<x)&0x80)
                {
                        LCD_SID(UP);
                }
                else
                {
                        LCD_SID(DOWN);
                }
                LCD_SCLK(DOWN);
                LCD_SCLK(UP);
        }
        delay_ms(5);
}
/********************************************************/
/********************************************************/
        /*写指令函数*/
void write_command(u8 command)
{
        LCD_CS(UP);
    send_bit(0xf8);
    send_bit((u32)command&0xf0);
        send_bit(((u32)command<<4)&0xf0);
    delay_ms(5);
        LCD_CS(DOWN);
}
/********************************************************/
/********************************************************/
  /*液晶写数据功能函数函数*/
void write_data(const u8 Data)
{
        LCD_CS(UP);
        send_bit(0xfa);
        send_bit((u32)Data&0xf0);
        send_bit(((u32)Data<<4)&0xf0);
        delay_ms(5);
        LCD_CS(DOWN);
}
/********************************************************/
/********************************************************/
  /* 显示字符串   */
void write_zi( u8 *S)
{
while(*S!='\0')
   {
   write_data(*S);
   S++;
   delay_ms(5);
   }
}
/********************************************************/
/********************************************************/
  /*在指定位置写入字符串*/
void write_character(u8 address,const u8 *p)
{
        write_command(address);
        delay_ms(5);
        while(*p!='\0')
        {
                write_data(*p);
                p++;
                delay_ms(5);
        }
}

/********************************************************/

void lcd_pos(u8 X,u8 Y)          //液晶地址设置
  {
        u8 pos;
        if(X==0)
        {X=0x80;}
        else if(X==1)
        {X=0x90;}
        else if(X==2)
        {X=0x88;}
        else if(X==3)
        {X=0x98;}
        pos=X+Y;
        write_command(pos);
  }
/********************************************************/
  /*LCD 初始化设定*/
void LCD_init(void)
{
        LCD_PSB(DOWN);
        write_command(0x30);  //设置8位数据接口模式,基本指令操作模式
        delay_ms(1);
        write_command(0x0c);  //开显示,关光标,反白关
        delay_ms(1);
        write_command(0x01);        //写入空格清屏
        delay_ms(1);
        write_command(0x06);  //游标及显示右移一位
        delay_ms(1);    
}

void display_adc(void)
{
   qian=adc/1000;
   bai=adc%1000/100;
   shi=adc%100/10;
   ge=adc%10;

   ADC_0=adc1/10000;
   ADC_1=adc1%10000/1000;
   ADC_2=adc1%1000/100;
   ADC_3=adc1%100/10;
   ADC_4=adc1%10;
   
   write_character(0x80,table1);
   delay_ms(10);

   lcd_pos(0,4);
   write_data(qian+0x30);
   write_data(bai+0x30);
   write_data(shi+0x30);
   write_data(ge+0x30);

   write_character(0x88,table2);
   delay_ms(10);

   lcd_pos(2,4);
   write_data(ADC_0+0x30);
   write_zi(".");
   write_data(ADC_1+0x30);
   write_data(ADC_2+0x30);
   write_data(ADC_3+0x30);
   write_data(ADC_4+0x30);
}

最佳答案

查看完整内容[请看2#楼]

这里4楼有例程参考代码http://www.openedv.com/posts/list/0/32961.htm?privmsg=14622&&sysid=4#188753
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-15 15:30:58 | 显示全部楼层
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-15 15:30:58 | 显示全部楼层
回复【34楼】zyj:
---------------------------------
这里4楼有我的驱动代码,你可以试下
http://www.openedv.com/posts/list/32961.htm
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2014-5-9
在线时间
0 小时
 楼主| 发表于 2014-5-15 20:42:07 | 显示全部楼层
回复【2楼】Badu_Space:
---------------------------------
谢谢你,你的文件中config.h文件没在呀
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-16 08:11:21 | 显示全部楼层
回复【3楼】zyj:
---------------------------------
那个可以去掉呀,换成你需要的就可以啦
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2014-5-9
在线时间
0 小时
 楼主| 发表于 2014-5-16 08:49:34 | 显示全部楼层
回复【4楼】Badu_Space:
---------------------------------
不清楚到底是什么原因  不管程序怎样改 液晶屏就是一点反应都没有 只有背光色。 我快崩溃了
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-16 10:54:12 | 显示全部楼层
回复【5楼】zyj:
---------------------------------
用我的驱动也不行?我的串行和并口只需要改个宏定义和IO即可
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2014-5-9
在线时间
0 小时
 楼主| 发表于 2014-5-16 12:00:39 | 显示全部楼层
回复【6楼】Badu_Space:
---------------------------------
也不行,
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2014-5-9
在线时间
0 小时
 楼主| 发表于 2014-5-16 12:14:56 | 显示全部楼层
回复【7楼】zyj:
---------------------------------
能不能看下你的整个工程啊,
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-16 12:26:03 | 显示全部楼层
回复【8楼】zyj:
---------------------------------
整个工程给我删掉了,你自己整理一下吧,不难
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-16 12:26:22 | 显示全部楼层
回复【7楼】zyj:
---------------------------------
注意通讯的频率不要太高
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2014-5-9
在线时间
0 小时
 楼主| 发表于 2014-5-16 12:32:25 | 显示全部楼层
回复【10楼】Badu_Space:
---------------------------------
系统时钟72M,电路图这样的

回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-16 13:11:05 | 显示全部楼层
回复【11楼】zyj:
---------------------------------
你的LCD能复位成功么?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2014-5-9
在线时间
0 小时
 楼主| 发表于 2014-5-16 20:50:41 | 显示全部楼层
回复【12楼】Badu_Space:
---------------------------------
什么意思?按板子的复位键 LCD是有复位的
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-17 10:52:51 | 显示全部楼层
LCD复位不成功的话后面没法干活的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2014-5-9
在线时间
0 小时
 楼主| 发表于 2014-5-19 09:26:17 | 显示全部楼层
回复【14楼】Badu_Space:
---------------------------------
按板子的复位键 LCD是有复位的,能够复位的啊
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-19 12:50:54 | 显示全部楼层
回复【15楼】zyj:
---------------------------------
你是STM32串行控制12864的吧,工程打包发上来看下
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2014-5-9
在线时间
0 小时
 楼主| 发表于 2014-5-19 16:56:45 | 显示全部楼层
12864串行 CS--PC7,SID--PC6,SCL--PC8,PSB--PC9

12864串行.rar

985 KB, 下载次数: 1226

回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2014-5-9
在线时间
0 小时
 楼主| 发表于 2014-5-19 16:57:42 | 显示全部楼层
回复【16楼】Badu_Space:
---------------------------------
包在楼下
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2014-5-19 17:09:48 | 显示全部楼层
看下焊接的是3.3v供电模式还是5V供电模式。我上次就发现这个问题了,屏幕都不亮。
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-19 18:00:38 | 显示全部楼层
回复【18楼】zyj:
---------------------------------
晚上帮你看下
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

9

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2013-9-24
在线时间
0 小时
发表于 2014-5-20 10:40:39 | 显示全部楼层
你这都说用串行模式了。。初始化的时候还初始化成8位并口。。晕。。。神仙也就不回来了
人需要沐浴阳光,也必将经历风雨
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-20 13:04:21 | 显示全部楼层
回复【18楼】zyj:
---------------------------------
你这代码没法帮你救

1、赶紧研究一下LCD12864数据手册关于串行通讯的协议、机制什么的
2、在你的12864驱动里面没有找到相关的串行启动代码
3、你这样的写法和并口通讯没什么区别
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-20 13:05:55 | 显示全部楼层
回复【18楼】zyj:
---------------------------------
推荐答案帖子连接里面我已经发了一个我的驱动上去了,仔细看看并口和串口通讯的区别,代码已经分得那么明确了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2014-5-9
在线时间
0 小时
 楼主| 发表于 2014-5-20 21:48:53 | 显示全部楼层
回复【19楼】fanghuiopenedv:
---------------------------------
5V供电  屏幕是亮的
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2014-5-9
在线时间
0 小时
 楼主| 发表于 2014-5-20 21:53:08 | 显示全部楼层
回复【21楼】LOVE_FYD:
---------------------------------
我初始化IO口只有PSB,CS,SID,CLK,没有用并口啊,,我不知道你哪里看的我初始化了并口
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2014-5-9
在线时间
0 小时
 楼主| 发表于 2014-5-20 21:57:32 | 显示全部楼层
回复【22楼】Badu_Space:
---------------------------------
GPIOC->CRL&=0XF0FFFFFF;  //RW
GPIOC->CRL|=0X03000000;//PC.0推挽输出
GPIOC->ODR|=1<<6;      //PC.0输出高 

   GPIOC->CRL&=0X0FFFFFFF;   //RS
GPIOC->CRL|=0X30000000;//PC.2推挽输出
GPIOC->ODR|=1<<7;      //PC.2输出高 
     
GPIOC->CRH&=0XFFFFFFF0;   //CLK
GPIOC->CRH|=0X00000003;//PA8 推挽输出     
    GPIOC->ODR|=1<<8;      //PA8 输出高

GPIOC->CRH&=0XFFFFFF0F;   //CLK
GPIOC->CRH|=0X00000030;//PA8 推挽输出     
    GPIOC->ODR|=1<<9;      //PA8 输出高


/****************lcd***********************/
    SB_L;
    delay_ms(2);
    write_com(0x30); //30--基本指令动作
    delay_ms(5);
    write_com(0x0c); //光标右移画面不动
    delay_ms(5);
    write_com(0x01); //清屏
    delay_ms(5); //清屏时间较长
    write_com(0x06); //显示打开,光标开,反白关
    delay_ms(5);
PSB我拉低了,我看了下和你的文件中的LCD_Init是一个道理的啊,我再试试移植下你的文件
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-21 08:15:11 | 显示全部楼层
回复【26楼】zyj:
---------------------------------
关键是你发送数据或者命令的函数都没看到呀
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2014-5-9
在线时间
0 小时
 楼主| 发表于 2014-5-21 08:26:00 | 显示全部楼层
回复【27楼】Badu_Space:
---------------------------------
/*******************************************************************/
/*                                                                 */
/* 向液晶发送数据或命令                                             */
/*                                                                 */
/*******************************************************************/
void sendbyte(uchar zdata)
{
  unsigned int i;
  for(i=0; i<8; i++)
 {
  
  if((zdata << i) & 0x80) SID_H;
            else   SID_L;

  SCLK_L;
  SCLK_H;
  }
}
/*******************************************************************/
/*                                                                 */
/*写指令数据到LCD                                                  */
/*                                                                 */
/*                                                                 */
/*******************************************************************/
void write_com(uchar cmdcode)

   
   CS_H;
   //CheckBusy();
   sendbyte(0xf8);
   sendbyte(cmdcode & 0xf0);
   sendbyte((cmdcode << 4) & 0xf0);
   delay_ms(2);
}
/*******************************************************************/
/*                                                                 */
/*写显示内容到LCD                                                  */
/*                                                                 */
/*                                                                 */
/*******************************************************************/
void write_dat(uchar Dispdata)
{  
  CS_H;
 // CheckBusy();
  sendbyte(0xfa);
  sendbyte(Dispdata & 0xf0);
  sendbyte((Dispdata << 4) & 0xf0);
  delay_ms(2);
}
不是这几个么,有的啊
回复

使用道具 举报

9

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2013-9-24
在线时间
0 小时
发表于 2014-5-21 08:30:20 | 显示全部楼层
你有没有看过手册啊?  0x30是并口还是串口啊?。。。估计没看过吧
人需要沐浴阳光,也必将经历风雨
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-21 12:36:25 | 显示全部楼层
回复【28楼】zyj:
---------------------------------
截图你的串口时序部分,另外你的发送的时钟频率太高了

你这样写是不对的,lcd接受不了那么高的频率
 for(i=0; i<8; i++) 
 { 
   
  if((zdata << i) & 0x80) SID_H; 
            else   SID_L; 

  SCLK_L; 
  SCLK_H; 
  }
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-21 12:40:48 | 显示全部楼层
回复【29楼】LOVE_FYD:
---------------------------------
这个0x30是设置寄存器数值了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

13

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-4-9
在线时间
9 小时
发表于 2014-5-21 12:44:32 | 显示全部楼层
看清楚驱动IC是0.7VDD(5V vdd那就要3.5V H电平)还是TTL电平。
大海啊,全是水; 骏马啊,四条腿。
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2014-5-9
在线时间
0 小时
 楼主| 发表于 2014-5-22 09:36:24 | 显示全部楼层
回复【29楼】LOVE_FYD:
---------------------------------
基本指令集 初始化的时候写0X30,我不知道是哪里不对了
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2014-5-9
在线时间
0 小时
 楼主| 发表于 2014-5-22 09:40:28 | 显示全部楼层
回复【30楼】Badu_Space:
---------------------------------
是不是最好加延时  
void write_byte(unsigned char A) 

unsigned char j; 
for(j=0;j<8;j++)        

if((A<<j)&0x80)SDA=1; 
else SDA=0; 
SCL=1;
somenop(); 
somenop();
somenop();
SCL=0;
somenop();
somenop();
somenop(); 


我试了这样 加了nop  也不行>
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2014-5-9
在线时间
0 小时
 楼主| 发表于 2014-5-23 12:05:25 | 显示全部楼层
回复【35楼】Badu_Space:
---------------------------------
恩。。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-8 02:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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