找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3566|回复: 3
收起左侧

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

[复制链接]
ID:771565 发表于 2020-6-18 02:48 | 显示全部楼层 |阅读模式
我在做这个仿真的时候也遇到了一定问题,现附上proteus仿真模拟图和源代码供大家参考。大家在用这块屏幕取字模的时候一定要注意是行列式还是列行试。注意在打印数组的时候要注意他的页与行的变换。加油

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.png

单片机源程序如下:
  1. #include "sys.h"
  2. #include "usart.h"
  3. #include "delay.h"
  4. //unsigned char a[10]="mengxinyu";
  5. unsigned char a[]={//孟
  6.         /*        0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m
  7.           0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e
  8.                
  9. 省略


  10. 0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x00,0x00,/*"?",2*/
  11. };
  12. void LCD_Init(void)        
  13. {
  14.   /*GPIO_InitTypeDef  GPIO_InitStruct;
  15.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  16.   
  17.   GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_6;
  18.   GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  19.   GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  20.         GPIO_Init(GPIOB, &GPIO_InitStruct);
  21.         
  22.         GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_7;
  23.         GPIO_Init(GPIOB, &GPIO_InitStruct);
  24.         
  25.         GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_8;
  26.         GPIO_Init(GPIOB, &GPIO_InitStruct);
  27.         
  28.         GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_9;
  29.         GPIO_Init(GPIOB, &GPIO_InitStruct);

  30.         
  31.         GPIO_WriteBit(GPIOB,GPIO_Pin_6,0) ;
  32.         GPIO_WriteBit(GPIOB,GPIO_Pin_7,0) ;
  33.         GPIO_WriteBit(GPIOB,GPIO_Pin_8,0) ;
  34.         GPIO_WriteBit(GPIOB,GPIO_Pin_9,0) ;*/
  35.         RCC->APB2ENR|=1<<3;     //使能PORTB时钟
  36.       GPIOB->CRL&=0X00000000;
  37.           GPIOB->CRL|=0X33FFFFFF;
  38.           GPIOB->CRH&=0X00000000;
  39.           GPIOB->CRH|=0XFFFFFF33;         
  40.       GPIOB->ODR|=0XFFFFFFFF;
  41.                         
  42. }
  43. void comdate(int h,unsigned char data)//0命令 1数据
  44. {
  45.         int i;
  46.         if(h==0)
  47.                 PBout(6)=0;
  48.         else
  49.                 PBout(6)=1;
  50.         PBout(9)=0;
  51.         for(i=0;i<8;i++)
  52.         {
  53.                 if(data&0x80)
  54.                 PBout(8)=1;
  55.     else
  56.         PBout(8)=0;
  57.     PBout(9)=1;            
  58.     PBout(9)=0;   
  59.     data<<=1;
  60.         }
  61. }
  62. void chushihua(void)
  63. {
  64.                         comdate(0,0xae);//close 屏
  65.       comdate(0,0x00);//write low address
  66.       comdate(0,0x10);//write high address
  67.                         comdate(0,0xaf);//开屏
  68.         
  69.                         /*        comdate(0,0x2E);        
  70.         comdate(0,0x26);        // 26/27 light right
  71.         comdate(0,0x00);        
  72.         comdate(0,0x00);        
  73.         comdate(0,0x07);        
  74.         comdate(0,0x07);        
  75.         comdate(0,0x00);        
  76.         comdate(0,0xFF);        
  77.         comdate(0,0x2F);*/
  78. }
  79. void LCD_Set_Pos(unsigned char x, unsigned char y)
  80. {
  81.   comdate(0,0xb0+y);
  82.   comdate(0,((x&0xf0)>>4)|0x10);
  83.   comdate(0,(x&0x0f)|0x01);
  84. }
  85. void xianshi(unsigned char x,unsigned char y)
  86. {
  87.         int i,j;
  88.         int q;
  89.         /*for(i=0;i<64;i++)
  90.         {
  91.                 comdate(1,a[i]);
  92.                 //for(i=0;i<8;i++);
  93.                 if(i>0&&i%16==0)
  94.                 {
  95.                         y=y+1;
  96.                         x+=8;
  97.                 }
  98.         }*/
  99.         for(i=0;i<2;i++)
  100.         {
  101.         for(j=0;j<32;j++)
  102.         {
  103.                 LCD_Set_Pos(j,i);
  104.                 comdate(1,a[q++]);
  105.         }
  106. }
  107. }
  108. void xianshi1(unsigned char x,unsigned char y)
  109. {
  110.         int i,j;
  111.         int q;
  112.         for(i=0;i<2;i++)
  113.         {
  114.         for(j=0;j<32;j++)
  115.         {
  116.                 LCD_Set_Pos(j,i+2);
  117.                 comdate(1,b[q++]);
  118.         }
  119. }
  120.         }
  121. void xianshi2(unsigned char x,unsigned char y)
  122. {
  123.         int i,j;
  124.         int q;
  125.         for(i=0;i<2;i++)
  126.         {
  127.         for(j=0;j<32;j++)
  128.         {
  129.                 LCD_Set_Pos(j,i+4);
  130.                 comdate(1,c[q++]);
  131.         }
  132. }
  133.         }
  134. void xianshi3(unsigned char x,unsigned char y)
  135. {
  136.         int i,j;
  137.         int q;
  138.         for(i=0;i<8;i++)
  139.         {
  140.         for(j=0;j<128;j++)
  141.         {
  142.                 LCD_Set_Pos(j,i);
  143.                 comdate(1,0x00);
  144.         }
  145. }
  146.         }
  147. int main()
  148. {
  149.         int i;
  150.         LCD_Init();
  151.         chushihua();
  152.                 xianshi(0,0);//参数毫无意义
  153.         xianshi1(0,2);
  154.         xianshi2(3,3);
  155.         
  156.         //xianshi3(1,0);
  157.         //xianshi(1,0);
  158.         //xianshi1(1,0);
  159.          /*comdate(0,0x00);
  160.         xianshi3(1,0);
  161.         //for(i=0;i<100000;i++);
  162.         xianshi1(1,0);
  163.         comdate(0,0x00);
  164.         xianshi3(1,0);
  165.         //for(i=0;i<100000;i++);
  166.         xianshi2(1,0);
  167.         //xianshi2(9,0);*/
  168.         while(1);
  169. }
  170. /*for(j=0;j<10;j++)
  171.         {
  172.                 for(i=0;i<8;i++)
  173.     comdate(1,a[i]);
  174.           // comdate(1,43);
  175.           LCD_Set_Pos(x,y+1);   
  176.           for(i=0;i<8;i++)   
  177.                         comdate(1,a[i+8]);  
  178.           x+=8;
  179.         }*/
复制代码

所有资料51hei提供下载:
oled.7z (182.27 KB, 下载次数: 67)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:784999 发表于 2020-7-9 21:24 | 显示全部楼层
这个IIC驱动吗还是SPI
回复

使用道具 举报

ID:798633 发表于 2020-7-10 08:11 | 显示全部楼层
proteus里用I2C老是驱动不成功,用SPI才能使用。
回复

使用道具 举报

ID:718821 发表于 2020-7-10 09:33 | 显示全部楼层
我也遇到了I2C的问题,怎么解决呢
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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