OpenEdv-开源电子网

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

OLED显示求助大侠 有截图

[复制链接]

83

主题

349

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2012-8-10
在线时间
13 小时
发表于 2013-3-31 17:32:31 | 显示全部楼层 |阅读模式
 小弟刚接触OLED,自己写了个显示字符的小程序练练手,显示一个字符'A',但是老是调不好,说明书看了又看,郁闷。。。。求助大侠啊
部分程序贴出:
待显示字符A分开了
主函数
#include<stm32f10x_lib.h>
#include"delay.h"
#include"sys.h"
#include"oled.h"

int main(void)
{



 Stm32_Clock_Init(9);
 delay_init(72);

 OLED_GPIO_Init();
 OLED_Set_Init();
 while(1)
 {
  write_zifu_1608(0,0,'A');
  OLED_Refresh_Gram();
  delay_ms(600);
  OLED_Clear();
 }           
}

OLED显示函数
#include"oled.h"
#include"fount.h"
u8 OLED_GRAM[128][8];

//清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!  
void OLED_Clear(void) 

 u8 i,n; 
 for(i=0;i<8;i++)
 for(n=0;n<128;n++)
 OLED_GRAM[n]=0X00; 
 OLED_Refresh_Gram();//更新显示
}
void OLED_Refresh_Gram(void)
{
 u8 i,n;
 for(i=0;i<8;i++)
 {
  OLED_WR_Byte (0xb0+i,OLED_CMD);    //设置页地址(0~7)
  OLED_WR_Byte (0x00,OLED_CMD);      //设置显示位置—列低地址
  OLED_WR_Byte (0x10,OLED_CMD);      //设置显示位置—列高地址  
  for(n=0;n<128;n++)
  {
   OLED_WR_Byte(OLED_GRAM[n],OLED_DATA);
  }     
 }
}

 

void OLED_GPIO_Init(void)
{
 RCC->APB2ENR|=1<<3;  //使能PORTB的时钟,数据位0-7 
 RCC->APB2ENR|=1<<4;     //使能PORTC的时钟,控制端口


  JTAG_Set(SWD_ENABLE);
 GPIOB->CRL=0X33333333;
 GPIOB->ODR|=0XFFFF;             
 
  GPIOC->CRH&=0XFFFFFF00;
 GPIOC->CRL&=0X00FFFFFF;
  GPIOC->CRH|=0X00000033;
 GPIOC->CRL|=0X33000000;
 GPIOC->ODR|=0X03C0;
}


void OLED_Set_Init(void)
{
 
 OLED_WR_Byte(0xAE,OLED_CMD); //关闭显示
 OLED_WR_Byte(0xD5,OLED_CMD); //设置时钟分频因子,震荡频率
 OLED_WR_Byte(0x80,OLED_CMD);   //[3:0],分频因子;[7:4],震荡频率
 OLED_WR_Byte(0xA8,OLED_CMD); //设置驱动路数
 OLED_WR_Byte(0X3F,OLED_CMD); //默认0X3F(1/64)
 OLED_WR_Byte(0xD3,OLED_CMD); //设置显示偏移
 OLED_WR_Byte(0X00,OLED_CMD); //默认为0

 OLED_WR_Byte(0x40,OLED_CMD); //设置显示开始行 [5:0],行数.
                
 OLED_WR_Byte(0x8D,OLED_CMD); //电荷泵设置
 OLED_WR_Byte(0x14,OLED_CMD); //bit2,开启/关闭
 OLED_WR_Byte(0x20,OLED_CMD); //设置内存地址模式
 OLED_WR_Byte(0x02,OLED_CMD); //[1:0],00,列地址模式;01,行地址模式;10,页地址模式;默认10;
 OLED_WR_Byte(0xA1,OLED_CMD); //段重定义设置,bit0:0,0->0;1,0->127;
 OLED_WR_Byte(0xC0,OLED_CMD); //设置COM扫描方向;bit3:0,普通模式;1,重定义模式 COM[N-1]->COM0;N:驱动路数
 OLED_WR_Byte(0xDA,OLED_CMD); //设置COM硬件引脚配置
 OLED_WR_Byte(0x12,OLED_CMD); //[5:4]配置
  
 OLED_WR_Byte(0x81,OLED_CMD); //对比度设置
 OLED_WR_Byte(0xEF,OLED_CMD); //1~255;默认0X7F (亮度设置,越大越亮)
 OLED_WR_Byte(0xD9,OLED_CMD); //设置预充电周期
 OLED_WR_Byte(0xf1,OLED_CMD); //[3:0],PHASE 1;[7:4],PHASE 2;
 OLED_WR_Byte(0xDB,OLED_CMD); //设置VCOMH 电压倍率
 OLED_WR_Byte(0x30,OLED_CMD); //[6:4] 000,0.65*vcc;001,0.77*vcc;011,0.83*vcc;

 OLED_WR_Byte(0xA4,OLED_CMD); //全局显示开启;bit0:1,开启;0,关闭;(白屏/黑屏)
 OLED_WR_Byte(0xA6,OLED_CMD); //设置显示方式;bit0:1,反相显示;0,正常显示             
 OLED_WR_Byte(0xAF,OLED_CMD); //开启显示 
 OLED_Clear();

}


void OLED_WR_Byte(u8 dat,u8 cmd)

 DATAOUT(dat); 
 OLED_DC=cmd;    
 OLED_CS=0;
 OLED_WR=0;
 OLED_WR=1;
 OLED_CS=1;
    OLED_DC=1;
}


void write_zifu_1608(u8 x,u8 y,u8 chr)
{
 u8 i;
 chr=chr-' ';
 for(i=0;i<16;i=i+2)
 {
  OLED_GRAM[x+i][y]|=asc2_1608[chr]
  OLED_GRAM[x+i][y-1]|=asc2_1608[chr][i+1];
 }
}

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

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
12137
金钱
12137
注册时间
2013-3-8
在线时间
1289 小时
发表于 2013-3-31 18:23:03 | 显示全部楼层
回复【楼主位】电子狼:
---------------------------------
从图上看,明显是显示函数有问题呀,初始定位有问题吧,用JTAG单步调试一下就可以找到问题!
回复 支持 反对

使用道具 举报

83

主题

349

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2012-8-10
在线时间
13 小时
 楼主| 发表于 2013-3-31 19:10:31 | 显示全部楼层
回复【2楼】augustedward:
---------------------------------
我调试了一下,函数还没进while循环呢就开始有字符的显示了。郁闷。。。。
回复 支持 反对

使用道具 举报

83

主题

349

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2012-8-10
在线时间
13 小时
 楼主| 发表于 2013-3-31 19:31:54 | 显示全部楼层
我调试了一下,程序在OLED_Set_Init()里面还没执行到OLED_Clear时就显示出分离的字符了,接着再执行时一会是,最下面的半截又没了
回复 支持 反对

使用道具 举报

83

主题

349

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2012-8-10
在线时间
13 小时
 楼主| 发表于 2013-3-31 20:02:15 | 显示全部楼层
擦,换个字符,问题又来了,换成“M”后,最上面还是A的下半截,最下面才是M的下半截。。。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-31 21:41:00 | 显示全部楼层
先确认你的画点函数没有问题!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-22 07:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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