OpenEdv-开源电子网

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

mini板stm32驱动ks0108的12864,没效果

[复制链接]

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2014-2-24
在线时间
2 小时
发表于 2014-2-26 10:04:22 | 显示全部楼层 |阅读模式
我用mini板的stm32来制作ks0108的驱动程序,结果完全没有效果。连一个点都没有显示。请问我的程序哪里出错了。
附上程序。
#include"12864.h"


void lcd_rcc(void)
{
RCC->APB2ENR|=1<<3;
GPIOB->CRL&=0x00000000;
GPIOB->CRL|=0xBBBBBBBB;
GPIOB->CRH&=0xFFF00000;
GPIOB->CRH|=0x000BBBBB;
// GPIOB->ODR|=0x000FFFFF;
}
void db7_rcc(void)
{
GPIOB->CRH&=0xFFFFF0FF;
GPIOB->CRH|=0x00000400;

}
//等待lcd忙标志结束。 
void Checkbusy(void)
{
db7_rcc();
do{
EN=0;RS=0;RW=1;
DB0=1;DB1=1;DB2=1;DB3=1;DB4=1;DB5=1;DB6=1;
EN=1;delay_ms(1);EN=0;
}
while(IDB7);
GPIOB->CRH&=0xFFFFF0FF;
GPIOB->CRH|=0x00000B00;

}
//写指令
void Wcmd(uchar cmd)
{
   Checkbusy();
   RS=0;  
   RW=0; 
/*   DB0=cmd%2;
DB1=cmd/2%2;
DB2=cmd/4%2;
DB3=cmd/8%2;
DB4=cmd/16%2;
DB5=cmd/32%2;
DB6=cmd/64%2;
DB7=cmd/128%2; */
cmd=cmd<<3;
GPIOB->ODR|=cmd; 
   EN=1;
   delay_ms(1);
   EN=0;
}

//页设置
void Setpage(uchar page)
{
  page=0xb8|page;
  Wcmd(page);
}

//列设置
void Setx(uchar x)   
{
  x=0xc0|x; //1100 0000
  Wcmd(x); 
}

//行设置
void Sety(uchar y)
{
  y=y&0x3f; //0=<column<=63
  y= 0x40|y; //01xx xxxx
  Wcmd(y);
}
//显示开/关:0关闭显示,1打开显示;
void SetOnOff(uchar onoff)   
{
onoff=0x3e|onoff; //0011 111x,onoff
     Wcmd(onoff);
}

//写数据
void Writedata(uchar dat)
{
   Checkbusy();
   RS=1; 
   RW=0; 
  /* DB0=dat%2;
DB1=dat/2%2;
DB2=dat/4%2;
DB3=dat/8%2;
DB4=dat/16%2;
DB5=dat/32%2;
DB6=dat/64%2;
DB7=dat/128%2; */
dat=dat<<3;
GPIOB->ODR|=dat;
   EN=1;
   delay_ms(1);
   EN=0;
}

//选择屏幕
void SelectScreen(uchar screen)  
{  
   switch(screen)
   { case 0: cs1=0;
             delay_ms(1); 
             cs2=0; 
             delay_ms(1); 
             break; 
     case 1: cs1=0;
             delay_ms(1); 
             cs2=1;
             delay_ms(1); 
             break;
case 2: cs1=1;
             delay_ms(1); 
             cs2=0;
             delay_ms(1); 
             break;
   }
}

void ClearScreen(uchar screen)  
{
     uchar i,j;
     SelectScreen(screen);
     
for(i=0;i<8;i++)
{
       Setpage(i);
Sety(0);
              for(j=0;j<64;j++)  
 {
                  Writedata(0x00); 
              }
     }
 
}

void InitLCD()  

Checkbusy();
lcd_rcc();
SelectScreen(0);
SetOnOff(0); 

SelectScreen(0);
SetOnOff(1); 

SelectScreen(0);
ClearScreen(0);

Setx(0); 

}
void Display(uchar ss,uchar page,uchar y,uchar number,uchar *Hzk)
{
int i;
SelectScreen(ss);
y=y&0x3f;

Setpage(page);
Sety(y); 
for(i=0;i<16;i++) 
{
Writedata(Hzk[i+32*number]); 
}

Setpage(page+1);  
Sety(y);  
    for(i=0;i<16;i++)  
{
Writedata(Hzk[i+32*number+16]); //i+32*number+16
}






正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-2-26 10:09:16 | 显示全部楼层
回复【楼主位】being423:
---------------------------------
读写数据的时候记得要改变IO方向喔
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1815
金钱
1815
注册时间
2011-10-9
在线时间
230 小时
发表于 2014-2-26 10:59:05 | 显示全部楼层
搜索下 论坛有现成的 例程  驱动 12864的
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-2-26 12:37:35 | 显示全部楼层
你要12864串口驱动方式的我有,并口的我没有
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-2-26 15:04:53 | 显示全部楼层
看寄存器的代码不习惯啊。KS0108的代码很多,从51到STM32的都有,LZ仔细找找
回复 支持 反对

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2014-2-24
在线时间
2 小时
 楼主| 发表于 2014-2-26 16:43:46 | 显示全部楼层
回复【2楼】Badu_Space:
---------------------------------
已经改变了,db7_RCC就是改变DB7的方向的
回复 支持 反对

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2014-2-24
在线时间
2 小时
 楼主| 发表于 2014-2-26 16:44:30 | 显示全部楼层
回复【4楼】Badu_Space:
---------------------------------
那恐怕没用,我要的是并口的。
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-2-26 16:54:30 | 显示全部楼层
回复【7楼】being423:
---------------------------------
那你折磨一下吧
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2014-2-24
在线时间
2 小时
 楼主| 发表于 2014-2-27 17:21:02 | 显示全部楼层
经过测试,发现EN从0变1,或者从1变0时,会变成2V左右的电平,这是什么情况啊。EN使用的是PA5。
回复 支持 反对

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2014-2-24
在线时间
2 小时
 楼主| 发表于 2014-2-27 17:21:23 | 显示全部楼层
回复【8楼】Badu_Space:
---------------------------------
经过测试,发现EN从0变1,或者从1变0时,会变成2V左右的电平,这是什么情况啊。EN使用的是PA5。
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-2-27 17:23:40 | 显示全部楼层
回复【10楼】being423:
---------------------------------
你的屏是接多少V的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2014-2-24
在线时间
2 小时
 楼主| 发表于 2014-2-28 14:05:59 | 显示全部楼层
回复【11楼】Badu_Space:
---------------------------------
那个问题已经解决了,谢谢你。
回复 支持 反对

使用道具 举报

0

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2013-3-3
在线时间
10 小时
发表于 2015-6-19 18:40:26 | 显示全部楼层
有程序吗?我现在正在找这个呢
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 03:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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