OpenEdv-开源电子网

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

新手的烦恼,12864显示程序

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-7-7
在线时间
8 小时
发表于 2016-7-7 22:21:00 | 显示全部楼层 |阅读模式
新人搞12864的程序,采用串行方式,一直调都显示不出来,求帮帮忙啊~~  

#define RW_H   GPIOB->BSRR=GPIO_Pin_4 ;    //SID
#define RW_L   GPIOB->BRR=GPIO_Pin_4 ;        
#define EN_H   GPIOC->BSRR=GPIO_Pin_12 ;//SCLK
#define EN_L   GPIOC->BRR=GPIO_Pin_12 ;  
#define RS_H   GPIOB->BSRR=GPIO_Pin_6 ;//CS
#define RS_L   GPIOB->BRR=GPIO_Pin_6 ;  
GPIO_InitTypeDef  GPIOStru;  
void IOInitOut(void)         //I/O的配置
{
   GPIO_InitTypeDef  GPIO_InitStructure;
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
    GPIOStru.GPIO_Mode = GPIO_Mode_Out_PP
    GPIOStru.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_6;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;   
    GPIOStru.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIOStru.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);        
}
void Lcd_Init(void)  //初始化程序
{
Write_Char(0,0x30);
delay_ms(5);
Write_Char(0,0x02);
delay_ms(5);
Write_Char(0,0x0c);
delay_ms(5);
Write_Char(0,0x01);
delay_ms(5);
Write_Char(0,0x06);
delay_ms(5);
Write_Char(0,0x1C);
}
void LCD_Set_XY(u8 x,u8 y)   //位置的显示
{
u8 address;
switch(x)
{   
  case 1:
   address=0x80+y;
  break;
  case 2:
   address=0x90+y;
  break;
  case 3:
   address=0x88+y;
  break;
  case 4:
   address=0x98+y;
  break;
  default:
   address=0x80+y;
  break;
}  
Write_Char(0, address);
}
void DisStr(u8 hang ,u8 lie, u8 *s)    //显示的数组
{
LCD_Set_XY( hang , lie );
    while(*s != '\0')
    {
      Write_Char( 1, *s );
        s++;
        delay_ms(5);
    }
}
void Write_Char(u8 start, u8 ddata)  //选择写命令还是写数据
{
unsigned char i;
u8 start_data,Hdata,Ldata;
RS_H;
if(start==0)
{
   for(i=0;i<5;i++)
{   EN_L; //sclk
    EN_H;
    RW_H ;//SID
}
for(i=0;i<3;i++)
{
  EN_L; //sclk
  EN_H;
  RW_L ;
}
    Hdata=ddata&0xf0;       //取高4位
   Ldata=(ddata<<4)&0xf0; //取低4位
   delay_ms(2);
   Send_Byte(Hdata);     //发送高8位
   delay_ms(2);
   Send_Byte(Ldata);      //发送低8位
   delay_ms(2);
}         
else
{
  for(i=0;i<5;i++)
{   EN_L; //sclk
    EN_H;
    RW_H ;//SID
}
   EN_L; //sclk
    EN_H;
    RW_L ;

     EN_L ; //sclk
    EN_H ;
    RW_H ;

     EN_L; //sclk
    EN_H;
    RW_L;
Hdata=ddata&0xf0;      
Ldata=(ddata<<4)&0xf0;
delay_ms(10);
Send_Byte(Hdata);     
delay_ms(5);
Send_Byte(Ldata);     
delay_ms(5);
}
}   
void Send_Byte(unsigned char bbyte)
{  
u8 i,k,w;
k=2;
RS_H ;
while(k--)
{
for(i=0;i<4;i++)
{
  w=bbyte&0x80;
if(w==0x80)
{
EN_L; //sclk
EN_H;
RW_H;
  }
else
EN_L; //sclk
EN_H;
RW_L ;
bbyte <<= 1;
}
for(i=0;i<4;i++)
{
EN_L ; //sclk
EN_H ;
RW_L ;
}
RS_L ;


unsigned char  table []="adf3dgv";
int main(void)
{
delay_ms(8);   
Lcd_Init();
DisStr(1 ,1, table) ;
while(1);
}

12864的时序图

12864的时序图
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-7-7
在线时间
8 小时
 楼主| 发表于 2016-7-7 22:44:51 | 显示全部楼层
求各位大侠帮帮忙啊。。。
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-7-7
在线时间
8 小时
 楼主| 发表于 2016-7-7 22:45:08 | 显示全部楼层
求各位大侠帮帮忙啊。。。
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-7-7
在线时间
8 小时
 楼主| 发表于 2016-7-7 22:45:31 | 显示全部楼层
求各位大侠HELP ME。。。
回复 支持 反对

使用道具 举报

5

主题

150

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1181
金钱
1181
注册时间
2015-12-28
在线时间
132 小时
发表于 2016-7-8 13:40:14 | 显示全部楼层
这是我按照12864手册上提供的51驱动程序移植过来的,
能用,不过我用的时候就显示可温湿度啥的,如果不全,你可以看看手册再改改。 给你看看我的手册和.c  .h文件吧。
  希望帮到你。

12864.rar

456.11 KB, 下载次数: 783

越努力,越优秀;越独立,越自由
回复 支持 反对

使用道具 举报

6

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2016-6-29
在线时间
58 小时
发表于 2016-7-8 14:46:33 | 显示全部楼层
我觉得首先你要看你线接对没。。。还有屏幕是5v的还是3.3v的
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-7-7
在线时间
8 小时
 楼主| 发表于 2016-7-8 16:15:35 | 显示全部楼层
song15032 发表于 2016-7-8 13:40
这是我按照12864手册上提供的51驱动程序移植过来的,
能用,不过我用的时候就显示可温湿度啥的,如果不全 ...

非常感谢你的分享
回复 支持 反对

使用道具 举报

5

主题

150

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1181
金钱
1181
注册时间
2015-12-28
在线时间
132 小时
发表于 2016-7-11 08:19:45 | 显示全部楼层
KaiL 发表于 2016-7-8 16:15
非常感谢你的分享

洒洒水啦。。。。
越努力,越优秀;越独立,越自由
回复 支持 反对

使用道具 举报

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
发表于 2016-7-11 08:54:31 | 显示全部楼层
驱动里面最好加上总线忙的检测,再加个超时看看通信正不正常。
如果通信没问题就多看看硬件吧。尤其是液晶对比度的引脚,电压高了就白屏,电压低了就啥都没有。
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-7-7
在线时间
8 小时
 楼主| 发表于 2016-7-11 11:41:21 | 显示全部楼层
xianshasaman 发表于 2016-7-11 08:54
驱动里面最好加上总线忙的检测,再加个超时看看通信正不正常。
如果通信没问题就多看看硬件吧。尤其是液晶 ...

现在屏幕出现两条白杠,是意味着电压过高了,不能显示吗?我接的是5V电压
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 10:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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