下面那个程序是正点原子的例程,例程里面有SPI和并口两种驱动方式,我现在只要并口的驱动方式,所以把关于SPI的都删了,但好像移植有错误,请各位大神帮我看看哪里出错了!还有一个问题是正点原子的oled例程跟usart有关系吗,为什么删掉usart_Init(9600)会不显示

#include "stm32f10x.h"

#include "stm32f10x_gpio.h"

#include "stdlib.h"

#include "OLED.h"

#include "delay.h"

#include "ziku.h"

//OLED的显存

//存放格式如下.

//[0]0 1 2 3 ... 127

//[1]0 1 2 3 ... 127

//[2]0 1 2 3 ... 127

//[3]0 1 2 3 ... 127

//[4]0 1 2 3 ... 127

//[5]0 1 2 3 ... 127

//[6]0 1 2 3 ... 127

//[7]0 1 2 3 ... 127

u8 OLED_GRAM[128][8];

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

* 向SSD1306写入一个字节。        *

* dat:要写入的数据/命令         *

* cmd:数据/命令标志 0,表示命令;1,表示数据;    *

* RS相当于DC           *

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

void OLED_WR_Byte(u8 dat,u8 cmd)

{

DATAOUT(dat);

OLED_RS=cmd;

OLED_CS=0;

OLED_WR=0;

OLED_WR=1;

OLED_CS=1;

OLED_RS=1;

}

//更新显存到LCD

//#define OLED_CMD  0 //写命令

//#define OLED_DATA 1 //写数据

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);

}

}

/*** 开启OLED显示 ***/

void OLED_Display_On(void)

{

OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC命令;设置电荷汞

OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ON  ;开启电荷汞

OLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON ;开启显示

}

/***关闭OLED显示 ***/

void OLED_Display_Off(void)

{

OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC命令;设置电荷汞

OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFF ;开启电荷汞

OLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF ;关闭显示

}

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

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();//更新显示

}

//画点

//x:0~127

//y:0~63

//t:1 填充 0,清空

//u8 OLED_GRAM[128][8];

void OLED_DrawPoint(u8 x,u8 y,u8 t)

{

u8 pos,bx,temp=0;

if(x>127||y>63)return; //超出范围了.

pos=7-y/8;

bx=y%8;

temp=1<

if(t)OLED_GRAM[x][pos]|=temp;  //填充

else OLED_GRAM[x][pos]&=~temp; //清空

}

//x1,y1,x2,y2 填充区域的对角坐标?

//确保x1<=x2;y1<=y2 0<=x1<=127 0<=y1<=63

//dot:0,清空;1,填充

void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot)

{

u8 x,y;

for(x=x1;x<=x2;x++)

{

for(y=y1;y<=y2;y++)

OLED_DrawPoint(x,y,dot);

}

OLED_Refresh_Gram();//更新显示

}

//在指定位置显示一个字符,包括部分字符

//x,y :起点坐标

//x:0~127

//y:0~63

//mode:0,反白显示;1,正常显示

//size:选择字体 16/12

void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)

{

u8 temp,t,t1;

u8 y0=y;

chr=chr-' ';//得到偏移后的值

for(t=0;t

{

if(size==12)temp=asc2_1206[chr][t];  //调用1206字体

else temp=asc2_1608[chr][t];   //调用1608字体

for(t1=0;t1<8;t1++)

{

if(temp&0x80) OLED_DrawPoint(x,y,mode);

else OLED_DrawPoint(x,y,!mode);

temp<<=1;

y++;

if((y-y0)==size)

{

y=y0;

x++;

break;

}

}

}

}

//m^n函数

u32 mypow(u8 m,u8 n)

{

u32 result=1;

while(n--) result*=m;

return result;

}

//显示2个数字

//x,y :起点坐标

//len :数字的位数

//size:字体大小

//mode:模式 0,填充模式;1,叠加模式

//num:数值(0~4294967295);

void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size)

{

u8 t,temp;

u8 enshow=0;

for(t=0;t

{

temp=(num/mypow(10,len-t-1))%10;

if(enshow==0&&t

{

if(temp==0)

{

OLED_ShowChar(x+(size/2)*t,y,' ',size,1);

continue;

}else enshow=1;

}

OLED_ShowChar(x+(size/2)*t,y,temp+'0',size,1);

}

}

//显示字符串

//x,y:起点坐标

//*p:字符串起始地址

//用16字体

void OLED_ShowString(u8 x,u8 y,const u8 *p)

{

#define MAX_CHAR_POSX 122

#define MAX_CHAR_POSY 58

while(*p!='\0')

{

if(x>MAX_CHAR_POSX){x=0;y+=16;}

if(y>MAX_CHAR_POSY){y=x=0;OLED_Clear();}

OLED_ShowChar(x,y,*p,16,1);

x+=8;

p++;

}

}

//初始化SSD1306

void OLED_Init(void)

{

GPIO_InitTypeDef  GPIO_InitStructure;

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE );

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); //JTAG-DP 失能 + SW-DP使能

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_Write(GPIOB,0XFFFF);

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);

GPIO_SetBits(GPIOC, GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9);//如果每一位决定一个GPIO_Pin,则可以通过或的形式来初始化多个IO

OLED_WR_Byte(0xAE,OLED_CMD); //关闭显示

OLED_WR_Byte(0xD5,OLED_CMD); //设置时钟分频因子,震荡频率

OLED_WR_Byte(80,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();

}

linux下oled显示设计,OLED显示问题相关推荐

  1. [原创]手把手教你Linux下的多线程设计--Linux下多线程编程详解(一)

    本文可任意转载,但必须注明作者和出处. [原创]手把手教你Linux下的多线程设计(一)                                       --Linux下多线程编程详解 原 ...

  2. Linux下matlab中文乱码,linux下安装的matlab无法显示中文,怎么办?求详细解答!谢谢!...

    首先要明白在linux下Matlab的图形界面是用java做的,所以matlab无法显示中文,实际上是你的linux系统中的java系统的中文字体配置没有做好. 下面提供两个方法. 方法一: 打开ma ...

  3. Linux 下摄像头视频采集与显示

    说明: 1.本文所提及的摄像头不是zc0301p,使用的API不是V4L,显示所使用的上位机不是QT,特此说明. 2.UVC只是一个驱动,如果它能成功驱动摄像头,会在/dev目录下出现video(或v ...

  4. linux 开源电子软件,linux下开源电子设计软件

    1. 电路模拟器 Qucs http://www.oschina.net/p/qucs 2. 微控制器模拟器 PICsim http://www.oschina.net/p/picsim 3. 电气原 ...

  5. Linux 下 ls -l 命令执行显示结果的每一列含义 图解 (附带ls命令详解)

    参考来源:https://www.runoob.com/linux/linux-comm-ls.html 用ls -l命令查看某一个目录会得到一个7个字段的列表. 第1行:总计(total) Tota ...

  6. linux下python脚本print中文显示不正确_pythoncgi脚本不会在linux上打印希伯来语

    我无法让pythoncgi将希伯来语字符打印到linux上的html网页上.这是一个演示问题的脚本:#!/usr/bin/python3 print('Content-Type: text/html; ...

  7. linux下打开png图片不显示,r – 无法显示png

    我在VM(Red Hat Enterprise Linux Server 6.4版)上运行R-shiny(R版本3.0.1(2013-05-16)).一切正常,即服务器启动,应用程序运行等--只要我不 ...

  8. Linux下的SQL查询只显示结果,SQL查询语句精华文章(转)

    一. 简单查询 简单的Transact-SQL查询只包括选择列表.FROM子句和WHERE子句.它们分别说明所查询列.查询的表或视图. 以及搜索条件等. 例如,下面的语句查询testtable表中姓名 ...

  9. linux下python脚本print中文显示不正确_在终端上运行python脚本,没有打印或显示-为什么?...

    通过艰苦的学习Python,第25课. 我尝试执行脚本,结果如下:myComp:lphw becca$ python l25 myComp:lphw becca$ 终端中不打印或显示任何内容. 这是密 ...

最新文章

  1. Java两则故障分析和常见连接超时时间
  2. 客户端负载均衡?? 服务端负载均衡??
  3. 【ES11(2020)】可选链操作符和空值合并运算符
  4. 智能一代云平台(三十):逆向工程生成mybatis
  5. C# RSA和Java RSA互通
  6. idea阅读器插件开发实现
  7. DeNA/上海纵游通过使用AWS大量缩短新款游戏和服务的上线时间
  8. 7-3 构造散列表(PTA程序设计)
  9. 485通信c语言讲解,51单片机485通讯讲解 通俗易懂
  10. GIS基础软件技术体系发展及展望
  11. 神州三号开发板stm32 f103ze jlink连接失败拜求高手指点
  12. Unity 获取视频缩略图
  13. 一张表格分成两页打印_word一页内容怎么分成两页打印
  14. python身份证号判断_Python实现身份证号码解析
  15. 无法启动程序因为计算机中丢失msvcr100,Win7系统计算机中Msvcr100.dll丢失的解决办法(两种方法)...
  16. Leetcode #1 Two Sum
  17. 如何将微商相册上的所有图片和小视频快速下载和保存
  18. Spring的bean的注创建、依赖注入、自动装配
  19. 从零开始学R(三)——基本计算
  20. Android获取汉字首字母工具类

热门文章

  1. 集合后台排序(java)——按照汉字中文拼音
  2. 【OpenGL相关】用高版本visual studio打开老版本的OpenGL工程文件可能会遇到的问题
  3. 高通平台SSC架构-sensor学习
  4. 基于 Openzeppelin 的可升级合约解决方案的注意事项
  5. 00后表示真干不过,部门新来的00后测试员已把我卷崩溃,想离职了...
  6. php中表格第一行不动,word表格行高拉不动怎么办
  7. 卡西欧电子计算机怎么换电池,卡西欧电池怎么换
  8. c语言 floyd优化,Floyd(弗洛伊德)算法(C语言)
  9. 如何反击职场PUA?
  10. 用java实现一个汽车租赁系统