下面那个程序是正点原子的例程,例程里面有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. 【Cocos2d开发】Cocos2d下安卓环境的搭建
  2. 疯狂android讲义(kotlin版) 源码 pan_每周一书《疯狂Python讲义》分享
  3. english email writing techniques demo
  4. 电脑计算器_CPA考生注意!2020考场只允许带这种计算器
  5. Tomcat中server.xml文件内各节点详解
  6. Ubuntu16.04 Oracle JDK8和Open JDK8的安装与配置
  7. 富文本编辑vue-quill-editor文件上传
  8. SQLite3扩展C API
  9. 【初赛】「程序填空」题答v1.0
  10. Python可视化库
  11. 在腾讯云开通短信验证服务并完成群发消息测试
  12. 基于matlab的语音采集及处理
  13. 主板后置音频接口图解_全程图解:手把手教你主板各种插针接口与机箱的接法_通信数码...
  14. Android使用局域网打印机生成打印任务
  15. 证明集合的包含关系和相等的常用的方法
  16. 通过antd-charts可视化对比科比和詹姆斯谁更强
  17. 一种获取NLP语料的基本方法
  18. CNCC2020_胡振江_从芯片定制到语言定制:程序设计语言的系统化定制及其支撑环境
  19. react antd modal学习
  20. PrintStream和PrintWriter

热门文章

  1. python flasgger bearer验证
  2. check the manual that corresponds to your MySQL server version for the right syntax to use near异常原因
  3. VIM PIV插件的bug,编辑PHP大文件偶尔会丢失语法高亮
  4. MyEclipse开发Struts1实例
  5. 软件工程学生考试系统
  6. mac如何卸载python2.7_mac python环境的安装与卸载
  7. iOS关于时间的处理
  8. Ambari 自定义服务集成 | quicklinks 快速链接不显示的排查方案
  9. 2021-2027中国内部威胁管理(ITM)软件市场现状及未来发展趋势
  10. 与其他数据库相比,MySQL的特点