标题:
UG-2864HSWEG0或ssd1306与stm32源程序+Proteus仿真
[打印本页]
作者:
mengxinyu
时间:
2020-6-18 02:48
标题:
UG-2864HSWEG0或ssd1306与stm32源程序+Proteus仿真
我在做这个仿真的时候也遇到了一定问题,现附上proteus仿真模拟图和源代码供大家参考。大家在用这块屏幕取字模的时候一定要注意是行列式还是列行试。注意在打印数组的时候要注意他的页与行的变换。加油
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.png
(21.54 KB, 下载次数: 77)
下载附件
2020-6-18 04:50 上传
单片机源程序如下:
#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;
}*/
复制代码
所有资料51hei提供下载:
oled.7z
(182.27 KB, 下载次数: 71)
2020-6-18 04:51 上传
点击文件名下载附件
下载积分: 黑币 -5
仿真图.rar
(22.9 KB, 下载次数: 66)
2020-6-18 02:46 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
caiji1
时间:
2020-7-9 21:24
这个IIC驱动吗还是SPI
作者:
linjun1
时间:
2020-7-10 08:11
proteus里用I2C老是驱动不成功,用SPI才能使用。
作者:
qindada
时间:
2020-7-10 09:33
我也遇到了I2C的问题,怎么解决呢
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1