UG-2864HSWEG0或ssd1306与stm32源程序+Proteus仿真

发布者:Turquoise最新更新时间:2020-07-13 来源: 51hei关键字:UG-2864HSWEG0  ssd1306  stm32 手机看文章 扫描二维码
随时随地手机看文章

我在做这个仿真的时候也遇到了一定问题,现附上proteus仿真模拟图和源代码供大家参考。大家在用这块屏幕取字模的时候一定要注意是行列式还是列行试。注意在打印数组的时候要注意他的页与行的变换。加油

仿真原理图如下

单片机源程序如下:

#include "sys.h"

#include "usart.h"

#include "delay.h"

//unsigned char a[10]="mengxinyu";

unsigned char a[]={//孟

        /*        0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m

          0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e

               

省略



0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x00,0x00,/*"?",2*/

};

void LCD_Init(void)        

{

  /*GPIO_InitTypeDef  GPIO_InitStruct;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

  

  GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_6;

  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;

        GPIO_Init(GPIOB, &GPIO_InitStruct);

        

        GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_7;

        GPIO_Init(GPIOB, &GPIO_InitStruct);

        

        GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_8;

        GPIO_Init(GPIOB, &GPIO_InitStruct);

        

        GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_9;

        GPIO_Init(GPIOB, &GPIO_InitStruct);


        

        GPIO_WriteBit(GPIOB,GPIO_Pin_6,0) ;

        GPIO_WriteBit(GPIOB,GPIO_Pin_7,0) ;

        GPIO_WriteBit(GPIOB,GPIO_Pin_8,0) ;

        GPIO_WriteBit(GPIOB,GPIO_Pin_9,0) ;*/

        RCC->APB2ENR|=1<<3;     //使能PORTB时钟

      GPIOB->CRL&=0X00000000;

          GPIOB->CRL|=0X33FFFFFF;

          GPIOB->CRH&=0X00000000;

          GPIOB->CRH|=0XFFFFFF33;         

      GPIOB->ODR|=0XFFFFFFFF;

                        

}

void comdate(int h,unsigned char data)//0命令 1数据

{

        int i;

        if(h==0)

                PBout(6)=0;

        else

                PBout(6)=1;

        PBout(9)=0;

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

        {

                if(data&0x80)

                PBout(8)=1;

    else

        PBout(8)=0;

    PBout(9)=1;            

    PBout(9)=0;   

    data<<=1;

        }

}

void chushihua(void)

{

                        comdate(0,0xae);//close 屏

      comdate(0,0x00);//write low address

      comdate(0,0x10);//write high address

                        comdate(0,0xaf);//开屏

        

                        /*        comdate(0,0x2E);        

        comdate(0,0x26);        // 26/27 light right

        comdate(0,0x00);        

        comdate(0,0x00);        

        comdate(0,0x07);        

        comdate(0,0x07);        

        comdate(0,0x00);        

        comdate(0,0xFF);        

        comdate(0,0x2F);*/

}

void LCD_Set_Pos(unsigned char x, unsigned char y)

{

  comdate(0,0xb0+y);

  comdate(0,((x&0xf0)>>4)|0x10);

  comdate(0,(x&0x0f)|0x01);

}

void xianshi(unsigned char x,unsigned char y)

{

        int i,j;

        int q;

        /*for(i=0;i<64;i++)

        {

                comdate(1,a[i]);

                //for(i=0;i<8;i++);

                if(i>0&&i%16==0)

                {

                        y=y+1;

                        x+=8;

                }

        }*/

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

        {

        for(j=0;j<32;j++)

        {

                LCD_Set_Pos(j,i);

                comdate(1,a[q++]);

        }

}

}

void xianshi1(unsigned char x,unsigned char y)

{

        int i,j;

        int q;

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

        {

        for(j=0;j<32;j++)

        {

                LCD_Set_Pos(j,i+2);

                comdate(1,b[q++]);

        }

}

        }

void xianshi2(unsigned char x,unsigned char y)

{

        int i,j;

        int q;

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

        {

        for(j=0;j<32;j++)

        {

                LCD_Set_Pos(j,i+4);

                comdate(1,c[q++]);

        }

}

        }

void xianshi3(unsigned char x,unsigned char y)

{

        int i,j;

        int q;

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

        {

        for(j=0;j<128;j++)

        {

                LCD_Set_Pos(j,i);

                comdate(1,0x00);

        }

}

        }

int main()

{

        int i;

        LCD_Init();

        chushihua();

                xianshi(0,0);//参数毫无意义

        xianshi1(0,2);

        xianshi2(3,3);

        

        //xianshi3(1,0);

        //xianshi(1,0);

        //xianshi1(1,0);

         /*comdate(0,0x00);

        xianshi3(1,0);

        //for(i=0;i<100000;i++);

        xianshi1(1,0);

        comdate(0,0x00);

        xianshi3(1,0);

        //for(i=0;i<100000;i++);

        xianshi2(1,0);

        //xianshi2(9,0);*/

        while(1);

}

/*for(j=0;j<10;j++)

        {

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

    comdate(1,a[i]);

          // comdate(1,43);

          LCD_Set_Pos(x,y+1);   

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

                        comdate(1,a[i+8]);  

          x+=8;

        }*/



关键字:UG-2864HSWEG0  ssd1306  stm32 引用地址:UG-2864HSWEG0或ssd1306与stm32源程序+Proteus仿真

上一篇:stm32温湿度-超声波-LCD1602结合项目
下一篇:stm32f103r6仿真计数器程序+Proteus

推荐阅读最新更新时间:2024-11-01 23:30

STM32单片机的八种IO口模式解析
STM32八种IO口模式区别 (1)GPIO_Mode_AIN模拟输入 (2)GPIO_Mode_IN_FLOATING浮空输入 (3)GPIO_Mode_IPD下拉输入 (4)GPIO_Mode_IPU上拉输入 (5)GPIO_Mode_Out_OD开漏输出 (6)GPIO_Mode_Out_PP推挽输出 (7)GPIO_Mode_AF_OD复用开漏输出 (8)GPIO_Mode_AF_PP复用推挽输出 以下是详细讲解 (1)GPIO_Mode_AIN模拟输入 即关闭施密特触发器,将电压信号传送到片上外设模块(不接上、下拉电阻) (2)GPIO_Mode_IN_FLOATING浮空输入 浮空输入状态下,IO的电平状态是不确定
[单片机]
STM32速成笔记(13)—低功耗模式
一、STM32低功耗模式介绍 STM32提供了一些低功耗模式。默认情况下,系统复位或上电复位后,微控制器进入运行模式。在运行模式下,HCLK 为CPU提供时钟,并执行程序代码。当 CPU 不需要继续运行(例如等待外部事件) 时,可以利用多种低功耗模式来节省功耗。 STM32 提供了 3 种低功耗模式,以达到不同层次的降低功耗的目的 • 睡眠模式 (内核停止工作,外设仍在运行) • 停止模式 (所有时钟都停止) • 待机模式 ( 1.8 V 内核电源关闭) 这三种模式所需的功耗是逐级递减,也就是说待机模式功耗是最低的。 在睡眠模式中,仅关闭了内核时钟,内核停止运行,但其片上外设,CM3 核心的外设全都照常运行 。在停止模式中
[单片机]
<font color='red'>STM32</font>速成笔记(13)—低功耗模式
STM32输出PWM状态总结
输出极性(Polarity): 基于正逻辑,即高电平为1,低电平为0 1.输出极性高(Polarity_High):高电平1为有效状态(active),低电平0为无效状态(inactive) 2.输出极性低(Polarity_Low):低电平0为有效状态(active),高电平1为无效状态(inactive) PWM Mode: 分为边沿对齐和中心对齐模式 对应向上/下计数,中心对齐计数 PWM Mode 1: 向上计数:TIMx_CNT TIMx_CCR1 active ;TIMx_CNT =TIMx_CCR1 inactive 向下计数:TIMx_CNT TIMx_CCR1 inactive ;TIMx_CNT
[单片机]
STM32 无法使用IAR下载程序问题
一开始建立了工程,然后程序下载都很正常。不知道什么情况自己下载代码之后,再重新下载代码无法成功。 我按照提示找了一下FlashStm32f30x8.flash这个文件,却发现IAR的目录下没并没有。又怀疑是IAR文件丢失。 重新安装IAR,却发现问题仍然继续. ~~~~感觉像是芯片坏了~~~ 于是通过STVP工具,读取一下。 奇迹发生了,竟然可以读取程序。 嗯~~那可以排除芯片的问题。 好吧,那我重新用IAR下载应该可以吧。 于是重新下载程序, 晕~~~居然还是弹出那个错误。 难道自己的程序竟然会引起这样的错误??? !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 于是通过STVP将
[单片机]
<font color='red'>STM32</font> 无法使用IAR下载程序问题
解析 STM32 的启动过程
当前的嵌入式应用程序开发过程里,并且C语言成为了绝大部分场合的最佳选择。如此一来main函数似乎成为了理所当然的起点 因为C程序往往从main函数开始执行。但一个经常会被忽略的问题是:微控制器(单片机)上电后,是如何寻找到并执行main函数的呢?很显然微控制器无法从硬件上定位main函数的入口地址,因为使用C语言作为开发语言后,变量/函数的地址便由编译器在编译时自行分配,这样一来main函数的入口地址在微控制器的内部存储空间中不再是绝对不变的。相信读者都可以回答这个问题,答案也许大同小异,但肯定都有个关键词,叫 启动文件 ,用英文单词来描述是 Bootloader 。 无论性能高下,结构简繁,价格贵贱,每一种微控制器(处理器)都必须
[单片机]
STM32输出PWM时,PWM1和PWM2的区别
首先,本人虽然初学STM32但极力反对一种误人子弟的观点:“对于STM32这样级别的MCU,有库函数就不用去看寄存器怎么操作的了!” 好了,言归正传,最近总看到很多朋友对于PWM这个实验有很多的疑惑,看到原子也在极力的回复也挺累的(体谅一下幸苦的原子大神,(*^__^*) ),所以我打算写这么一篇文字来阐述一下我个人对STM32的PWM的理解。 首先来说,你要使用PWM模式你得先选择用那个定时器来输出PWM吧!除了TIM6、TIM7这两个普通的定时器无法输出PWM外,其余的定时器都可以输出PWM,每个通用定时器可以输出4路PWM,高级定时器TIM1、TIM8每个可输出7路PWM,这里为了方便起见,我们选择与实验相同的TIM3的
[单片机]
STM32之CAN---TTCAN模式浅析
1 前言 传统CAN 采用事件触发消息传输机制,CSMA/ CD+ AMP( Carrier-Sense Mult iple Access w ith Co llision Detect ion and Arbit ration on Message Priorit ies, 载波侦听、多路访问、冲突检测、优先级仲裁) 介质访问控制机制, 即多个消息同时发送时, 按照消息标识符的优先级顺序, 低优先级消息自动退出, 高优先级消息继续发送。这种介质访问方式提高了网络的利用率和高优先级消息的实时性, 但在重负载CAN 中, 低优先级消息经常由于总线冲突而被迫退出发送, 导致低优先级消息传输时延长, 且传输时延不可预测, 因
[单片机]
<font color='red'>STM32</font>之CAN---TTCAN模式浅析
浅析STM32 FSMC操作LCD的过程
FSMC称为灵活的静态存储器,它能够与同步或异步存储器和16位PC存储器卡连接,STM32F4的FSMC接口支持包括SRAM、NAND FLASH、NOR FLASH和PSRAM等存储器。 FSMC框图 从FSMC框图可以看到,FSMC将外部设备分为2类:NOR/PSRAM设备和NAND/PC卡设备。所有外部存储器共享地址、数据和控制信号,但有各自的片选信号。FSMC 一次只能访问一个外部器件。 NE4相连,即利用FSMC_NE4实现对LCD的片选;另外SRAM芯片的片选接口与FSMC_NE3相连,即利用FSMC_NE3实现对SRAM芯片的片选。FSMC本身就是静态存储器控制器,通过FSMC接口访问SRAM是理所当然的
[单片机]
浅析<font color='red'>STM32</font> FSMC操作LCD的过程
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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