基于单片机oled源代码及仿真软件IIC

一、系统方案
1、单片机采用51单片机作为主控器。
2、显示采用OLED显示。
3、按键切换显示内容。
在这里插入图片描述

二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化
void timer0_init()
{
TMOD = 0x01; //16-bit
TL0 = TL0_X; TH0 = TH0_X; //定时器初值
EA = 1; ET0 = 1; //启用T0中断
TR0 = 1; //启动定时器
}
2、液晶显示程序
void showSchoolName()
{
unsigned char i;
OLED_CLS();//清屏
//显示校名
for(i=0;i<8;i++) { OLED_P16x16Ch(i16,1,i); }
//显示校训
for(i=0;i<4;i++)
{ OLED_P16x16Ch(i
16+16,4,i+8);}
//显示校训
for(i=0;i<4;i++)
{ OLED_P16x16Ch(i16+48,6,i+12); }
}
void showWelcome()
{
unsigned char i;
OLED_CLS();//清屏
for(i=0;i<7;i++) //显示欢迎三班同学
{
OLED_P16x16Ch(i
16+8,3,i+16);
}
OLED_P8x16Str(12,5,“Welcome you!”);
}
void showAD()
{
unsigned char i;
OLED_CLS();
for(i=0;i<4;i++) //显示“欢迎关注”
{
OLED_P16x16Ch(i*16+32,2,i+23);
}

for(i=0;i<6;i++) //显示 “轻松学单片机”
   {
   		OLED_P16x16Ch(i*16+16,5,i+27);
   }

}
3、按键程序
void keyScan()
{
if(KEY_S1 ==0)
{
delay(10); //软件延时去抖
if(KEY_S1 == 0)
{
showAD(); //S1按下,显示订阅号
}

}

}
4、核心算法程序
void main()
{
OLED_Init(); //OLED初始化
timer0_init();//定时器T0初始化
update_flag = 1; //刷新OLED
while(1)
{
keyScan();//按键扫描
if(update_flag ==0) continue;
switch (mode)
{
case 0: showSchoolName(); break;
case 1: showWelcome(); break;
case 2: showAD();break;
}
update_flag = 0;
}
}
四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
51单片机iic协议oled代码可以通过以下步骤实现: 1. 首先,我们需要包含51单片机的头文件和对应的引脚定义,以便于程序中使用。 ```c #include <reg52.h> sbit SCL=P2^1; // 定义SCL引脚 sbit SDA=P2^0; // 定义SDA引脚 ``` 2. 然后,我们需要定义iic协议中的起始条件、停止条件和数据传输函数。 ```c void iic_start() // IIC起始条件 { SDA=1; SCL=1; Delay5us(); SDA=0; Delay5us(); SCL=0; } void iic_stop() // IIC停止条件 { SDA=0; Delay5us(); SCL=1; Delay5us(); SDA=1; } void iic_writebyte(unsigned char dat) // 写一个字节 { unsigned char i; for(i=0;i<8;i++) { SDA=(bit)(dat&0x80); dat<<=1; SCL=1; Delay5us(); // 调整延时时间,保证IIC操作正常 SCL=0; } SDA=1; SCL=1; Delay5us(); SCL=0; } ``` 3. 最后,我们可以示范如何使用iic协议与oled屏幕进行通信,并将需要显示的内容写入oled屏幕的数据寄存器。 ```c void oled_write_cmd(unsigned char cmd) // 向OLED写控制命令 { iic_start(); iic_writebyte(0x78); // OLED I2C Write address iic_writebyte(0x00); // Control byte: Co = 0, D/C# (bit0 write command) iic_writebyte(cmd); // Write command iic_stop(); } void oled_write_data(unsigned char dat) // 向OLED写数据 { iic_start(); iic_writebyte(0x78); // OLED I2C Write address iic_writebyte(0x40); // Control byte: Co = 0, D/C# (bit0 write data) iic_writebyte(dat); // Write data iic_stop(); } ``` 通过以上代码,我们可以实现51单片机基于iic协议控制oled屏幕的显示,从而实现各种图形和文本的显示效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bbxyliyang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值