51单片机驱动OLED

发布者:星辰小鹿最新更新时间:2020-08-14 来源: 51hei关键字:51单片机  驱动OLED  点数 手机看文章 扫描二维码
随时随地手机看文章

51单片机源程序如下:

#include

#include "function.h"

#include "word_lib.h"


#define X_WIDTH 128        //显示屏每行的显示点数

#define Y_WIDTH 64         //显示屏每列的显示点数


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

          以下为设置控制OLED的端口,D0、D1、RST、DC依次对应OLED的CK、DI、RST、DC

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

sbit  OLED_D0 = P1^0;  

sbit  OLED_D1 = P1^1;

sbit  OLED_RST= P1^2;

sbit  OLED_DC = P1^3;


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

          函数名称:  void OLED_WrCmd(unsigned char cmd)

          函数功能: OLED显示屏下指令操作

          调用函数:  无       

          入口参数:  cmd

          出口参数:  无

          返回值:    无

          其他:      可以不理解,直接拿过来用

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

void OLED_WrCmd(unsigned char cmd)

{

    unsigned char i=8;

    OLED_DC=0;;;;

    OLED_D0=0;;;;

    while(i--)

    {

        if(cmd&0x80)

        {

            OLED_D1=1;

        }       

        else

        {

            OLED_D1=0;;;;

        }                                 

            OLED_D0=1;;;;                                                          

        ;;;;;;


        OLED_D0=0;;   

        cmd<<=1;;   

    }        

       

}


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

    函数名称:  void OLED_Fill(unsigned char bmp_dat)

    函数功能: 让OLED清屏或者全屏亮,取决于参数

    调用函数:  OLED_WrCmd(0xb0+y); OLED_WrDat(bmp_dat);

    入口参数:  bmp_dat//一般为0x00或者0xff

    出口参数:  无

    返回值:    无

    其他:      可用此函数进行清屏操作,如OLED_Fill(0),可以清除所有的显示

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

void OLED_Fill(unsigned char bmp_dat)

{

    unsigned char y,x;

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

    {

        OLED_WrCmd(0xb0+y);

        OLED_WrCmd(0x01);

        OLED_WrCmd(0x10);

        for(x=0;x        OLED_WrDat(bmp_dat);

    }

}


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

          函数名称:  void OLED_Init(void)   

          函数功能: OLED显示屏初始化

          调用函数:  OLED_WrCmd(unsigned char cmd),写命令CD_Fill(0x00);  //初始清屏  OLED_Set_Pos(0,0);写地址        

          入口参数:  无

          出口参数:  无

          返回值:    无

          其他:      可以不理解,直接拿过来用

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

void OLED_Init(void)        

{  

    OLED_D0=1;

    //OLED_CS=1;        //预制SLK和SS为高电平         

    OLED_RST=0;

    ;;;;;;;

    OLED_RST=1;

   

    //从上电到下面开始初始化要有足够的时间,即等待RC复位完毕   


    OLED_WrCmd(0xae);//--turn off oled panel

    OLED_WrCmd(0x00);//---set low column address

    OLED_WrCmd(0x10);//---set high column address

    OLED_WrCmd(0x40);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)

    OLED_WrCmd(0x81);//--set contrast control register

    OLED_WrCmd(0xcf); // Set SEG Output Current Brightness

    OLED_WrCmd(0xa1);//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常

    OLED_WrCmd(0xc8);//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常

    OLED_WrCmd(0xa6);//--set normal display

    OLED_WrCmd(0xa8);//--set multiplex ratio(1 to 64)

    OLED_WrCmd(0x3f);//--1/64 duty

    OLED_WrCmd(0xd3);//-set display offset        Shift Mapping RAM Counter (0x00~0x3F)

    OLED_WrCmd(0x00);//-not offset

    OLED_WrCmd(0xd5);//--set display clock divide ratio/oscillator frequency

    OLED_WrCmd(0x80);//--set divide ratio, Set Clock as 100 Frames/Sec

    OLED_WrCmd(0xd9);//--set pre-charge period

    OLED_WrCmd(0xf1);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock

    OLED_WrCmd(0xda);//--set com pins hardware configuration

    OLED_WrCmd(0x12);

    OLED_WrCmd(0xdb);//--set vcomh

    OLED_WrCmd(0x40);//Set VCOM Deselect Level

    OLED_WrCmd(0x20);//-Set Page Addressing Mode (0x00/0x01/0x02)

    OLED_WrCmd(0x02);//

    OLED_WrCmd(0x8d);//--set Charge Pump enable/disable

    OLED_WrCmd(0x14);//--set(0x10) disable

    OLED_WrCmd(0xa4);// Disable Entire Display On (0xa4/0xa5)

    OLED_WrCmd(0xa6);// Disable Inverse Display On (0xa6/a7)

    OLED_WrCmd(0xaf);//--turn on oled panel   

    OLED_Fill(0x00);  //初始清屏

    OLED_Set_Pos(0,0);        

}


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

          函数名称:  void OLED_WrDat(unsigned char dat)

          函数功能: 写下点,每次写8个,从上到下竖着写,亮是1,灭是0

          调用函数:  无

          入口参数:  dat//一般为0x**,8位,即8个点,亮或灭

          出口参数:  无

          返回值:    无

          其他:      

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

void OLED_WrDat(unsigned char dat)

{

    unsigned char i=8;

    OLED_DC=1;;;;         

    OLED_D0=0;;;;          

    ;;;;   

    while(i--)

    {

        if(dat&0x80)

        {

            OLED_D1=1;

        } //1.1

        else

        {

            OLED_D1=0;

        }

        OLED_D0=1;

        ;;;;;;

        //;;            

        OLED_D0=0;;;;   

        dat<<=1;   

    }

}


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

          函数名称:  void OLED_Set_Pos(unsigned char x, unsigned char y)

          函数功能: 确定点亮显示屏的起始位置

          调用函数:  OLED_WrCmd

          入口参数:  x、y分别为起始位置的横纵坐标

          出口参数:  无

          返回值:    无

          其他:      

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

void OLED_Set_Pos(unsigned char x, unsigned char y)

{

    OLED_WrCmd(0xb0+y);

    OLED_WrCmd(((x&0xf0)>>4)|0x10);

    OLED_WrCmd((x&0x0f)|0x01);

}


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

    函数名称: void Show_En_small(unsigned charx,unsigned char y,unsigned char En[])

    函数功能: 写数字或字母,但建议用此函数写字母或冒号等符号,调用例子见main函数,

                   后面有专门写数字的函数。

    调用函数: OLED_WrDat ();     OLED_Set_Pos();

    入口参数: x、y确定横纵坐标,En[]确定显示内容

    出口参数: 无

    返回值:   无

    其他:

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


void Show_En_small (unsigned char x,unsigned char y,unsigned char En[])

{

    unsigned char e=0,i=0,j=0;

   

    while (En[j] != '')

    {

        e = En[j] - 32;

        if(x>120)

            {x=0;y++;}

        OLED_Set_Pos(x,y);

        for (i=0; i<6; i++)

                {

            OLED_WrDat(EnSmallWord[e*6+i]);

        }

                x+=6;

        j++;

    }

}

……………………


关键字:51单片机  驱动OLED  点数 引用地址:51单片机驱动OLED

上一篇:51单片机智能调光台灯电路原理图+程序设计
下一篇:单片机控制16x16点阵显示姓名

推荐阅读最新更新时间:2024-11-12 20:52

AT89S51与AT89C2051单片机引脚介绍
AT89C2051是精简版的51单片机,精简掉了P0口和P2口,只有20引脚,但其内部集成了一个很实用的模拟比较器,特别适合开发精简的51应用系统,毕竟很多时候我们开发简单的产品时用不了全部32个I/O口,用AT89C2051更合适,芯片体积更小,而且AT89C2051的工作电压最低为2.7V,因此可以用来开发两节5号电池供电的便携式产品。   本文以ATMEL公司生产的51系列家族的AT89S51和AT89C2051两种单片机来讲解,两种单片机是目前最常用的单片机,其中AT89S51为标准51单片机,当然其功能比早期的51单片机更强大,支持ISP在系统编程技术,内置硬件看门狗。。。        一、AT89S51单片机引脚介绍
[单片机]
AT89S51与AT89C20<font color='red'>51单片机</font>引脚介绍
基于tx-1c 51单片机中断使用及数码管显示的使用方法
初学51单片机,中断快把我弄晕了,终于明白点了,怕忘了,贴在这里需要时方便自己找 锁存器电路 LED显示器连接电路 数码表编制方式:共8位从低4位到高4位,显示送高电平,如数字2二进制是0101 1011即16进制为:0x5B C语言程序代码如下: 1 #include REG52.H 2 #define uint unsigned int 3 #define uchar unsigned char 4 5 sbit dula = P2^6; //段选 6 sbit wela = P2^7; //位选 7 uchar time,num; //定时器0计数次数,数码管显示字符 8 9 vo
[单片机]
基于tx-1c <font color='red'>51单片机</font>中断使用及数码管显示的使用方法
基于51单片机的电子密码锁设计-- 1602显示
一.硬件方案 本系统由STC89C52单片机、44矩阵键盘,蜂鸣器,复位电路和晶振电路、继电器等组成,44键盘主要用于密码的输入和修改,蜂鸣器报警,复位电路和晶振电路与STC89C52单片机组成单片机最小系统。它具有设置、修改6位用户密码、输错报警、密码错误报警等功能。 主要由51单片机+最小系统+LCD1602液晶显示模块+蜂鸣器模块+LED指示灯模块+继电器驱动模块+矩阵键盘模块+AT24C02芯片模块;如图: 二.设计功能 (1)采用AT24C02芯片可以实现存储的密码掉电保存。密码为1-16位,开锁时可以随意输入虚假密码掩人耳目可以随意更改,更改时要输入两遍确认; (2)采用矩阵按键输入、1602液晶显示、继电器模
[单片机]
基于<font color='red'>51单片机</font>的电子密码锁设计-- 1602显示
单总线AT89C51单片机多机通讯系统设计
提出了用单总线完成单片机通讯的方法。结合系统既传输数字信号又传输模拟信号的特点,提出用消侧音电路解决模拟信号的方案,并给出了详细的技术解决方案。 传统的多机通讯系统一般需要四条线完成: 1.电源线;2.地线;3.发送信号线;4.接收信号线。然而,对于主机和分机距离较远、分机台数较多的系统,采用四线制的经费投入较大,安装起来也颇困难。基于这一问题,本文结合为某医院研制的既有模拟信号(语音)又有数字信号的传输呼叫系统,提出用单总线实现多机通讯,并给出了一个完整的技术方案。 1 单总线制多机通讯系统的总线设计方案 本设计实现的多机呼叫系统的主要功能是:分机呼叫主机,利用单片微机向主机发送数字呼叫信息,主机响应后,显示出呼叫
[单片机]
89C51单片机中文简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称 单片机 。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器 的单片机。单片机的 可 擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多 功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机 为很多嵌入式控制系统提供了一种灵活性
[单片机]
89C<font color='red'>51单片机</font>中文简介
基于51单片机DS1302四位数码管可调时钟
#include reg52.h #define uchar unsigned char #define uint unsigned int sbit sda=P1^0; //ds1302的数据线 sbit clk=P1^1; //ds1302的时钟线 sbit rst=P1^2; //ds1302的复位线 sbit k1=P1^5; //设置/确定 sbit k2=P1^6; //加 sbit k3=P1^7; //切换 uchar code duan_code ={ 0xc0,0xf9,0xa4,0xb0,0
[单片机]
基于<font color='red'>51单片机</font>DS1302四位数码管可调时钟
51单片机硬件定时器设定的初值问题
网上查了很多解释关于51单片机硬件定时设定的文章,发现说的不是特别透彻,可能大家觉得一些类似基本感念的问题就不用澄清了,所以对于我这样的入门小白理解起来有些障碍,这里我把自己的理解解释的细致多一些,希望能给同道中人一些帮助。 说到定时前需要澄清几个概念:震荡周期,状态周期,机器周期,指令周期。(学习什么知识概念必须掌握清楚,否则就“糊”了!) 震荡周期:(来自百度百科)在单片机系统中,定时器需要借助单片机内部提供的脉冲进行定时,此时,定时的依据是CPU提供的周期性振荡,振荡一次所需的时间称为振荡周期。单片机系统也可以通过外部晶体振荡器(也被称为晶振)提供振荡进行工作。 对于震荡周期的理解:计算机系统中通常需要同时处理多
[单片机]
基于51单片机的数字秒表的设计
近年来随着科学技术的发展,单片机的应用正在不断走下面还深入。本文简单阐述了基于单片机的数字秒表的的设计。本设计的主要特点是计时精度达到0.01秒,是各种体育竞赛的必要设备之一。 本设计的数字秒表采用AT89S52单片机为主要器件,利用其定时器的原理,结合显示电路、LED数码管以及外部外部中断电路来设计计时器。将软硬件结合起来,使得系统能实现0~99.99秒的计时,计时精度位0.01秒。硬件系统利用proteus仿真,在仿真中就能观察到系统的实际运行情. 一 硬件设计 1、1 总体方案的设计 数字秒表具有显示直观、读取方便、精度高等优点,在计时中广泛应用。本设计中用单片机和数码管组成数字秒,
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved