请问有人能帮忙修改代码吗,基于51单片机的超声波测距,原来连接的硬件是LCD,现在需要把LCD换成oled,请问有人能帮忙更改吗,其他功能已全,只需要oled的连接和显示部分的代码,以及在仿真图上更改一下oled的连接,酬金可追加!急
原有LCD部分代码
```c
//LCD管脚声明
sbit LCDRS = P2^7;
sbit LCDEN= P2^6;
//初始画时显示的内容
uchar code Init1[]="Temperature: C";
uchar code Init2[]="Distance: 000CM";
//初始画时显示的内容
uchar code Init3[]=" Max------ CM";
uchar code Init4[]=" Min------ CM";
//LCD延时
void LCDdelay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=10;y>0;y--);
}
//写命令
void write_com(uchar com)
{
LCDRS=0;
P0=com;
LCDdelay(5);
LCDEN=1;
LCDdelay(5);
LCDEN=0;
}
//写数据
void write_data(uchar date)
{
LCDRS=1;
P0=date;
LCDdelay(5);
LCDEN=1;
LCDdelay(5);
LCDEN=0;
}
//1602初始化
void Init1602()
{
uchar i=0;
write_com(0x38);//屏幕初始化
write_com(0x0C);//打开显示 无光标 无光标闪烁
write_com(0x06);//当读或写一个字符是指针后一一位
write_com(0x01);//清屏
write_com(0x80);//设置位置
for(i=0;i<16;i++)
{
write_data(Init1[i]);
}
write_com(0x80+14);//设置位置
write_data(0xdf);
write_com(0x80+0x40);//设置位置
for(i=0;i<16;i++)
{
write_data(Init2[i]);
}
}
//温度 距离显示
void Display_1602(uchar W,uint L)
{
//温度值显示
write_com(0x80+12);
write_data('0'+W/10);
write_data('0'+W%10);
//长度值显示
if(flag1s==1)
{
write_com(0x80+0x40+0x0a);
write_data(' ');
write_data('0'+L/100);
write_data('0'+L/10%10);
write_data('0'+L%10);
}
else if(flag1s==0)
{
write_com(0x80+0x40+0x0a);
write_data('-');
write_data('-');
write_data('-');
write_data('-');
}
}
//1602初始化最大化最小化调整界面
void Init_MaxMin()
{
uchar i=0;
write_com(0x38);//屏幕初始化
write_com(0x0f);//打开显示 无光标 无光标闪烁
write_com(0x06);//当读或写一个字符是指针后一一位
write_com(0x01);//清屏
write_com(0x80);//设置位置
for(i=0;i<16;i++)
{
write_data(Init3[i]);
}
write_com(0x80+0x40);//设置位置
for(i=0;i<16;i++)
{
write_data(Init4[i]);
}
write_com(0x8b);//设置位置
write_data('0'+Max/100);
write_data('0'+Max/10%10);
write_data('0'+Max%10);
write_com(0x80+0x40+0x0b);//设置位置
write_data('0'+Min/100);
write_data('0'+Min/10%10);
write_data('0'+Min%10);
write_com(0x8d);//设置位置
}
main.c
//头函数
#include <reg52.h>
#include <intrins.h>
//宏定义
#define uchar unsigned char
#define uint unsigned int
#define ULint unsigned long int
//温度零上与零下的标志位
char flag=0;
//超声波
char flags=0;
//超声波距离
char flag1s=0;
//计算定时间
uint time=0;
//计算距离
ULint L_=0;
//温度
uint t_=0;
//显示模式 0正常 1最大值调整 2最小值调整
uchar mode=0;
uint Max;
uint Min;
//按键标志
uchar k=0;
//数值有误
uchar FW=0;
#include "eeprom52.h"
#include "BJ_Key.h" //报警按键
#include "display.h" //显示头函数
#include "ultrasonic_wave.h"//超声波头函数
#include "DS18B20.h" //温度传感器头函数
//函数声明
void delayms(uint ms);
//主函数
void main()
{
Init_ultrasonic_wave();
//屏幕初始化
Init1602();
//温度初始化
tmpchange();
t_=tmp();
tmpchange();
t_=tmp();
tmpchange();
t_=tmp();
init_eeprom();
//循环显示
while(1)
{
Key();
//正常显示
if(mode==0)
{
StartModule();//启动超声波
while(!RX); //当RX为零时等待
TR0=1; //开启计数
while(RX); //当RX为1计数并等待
TR0=0; //关闭计数
delayms(20); //20MS
tmpchange(); //温度转换
t_=tmp(); //度温度
Conut(t_/10); //计算距离
if(L_>Max||L_<Min)
{
Feng_Start();
}
else
{
if(FW!=1)
Feng_Stop();
}
Display_1602(t_/10,L_);
}
//调整显示
else if(mode!=0)
{
//最大最小值
Init_MaxMin();
while(mode!=0)
{
Key();
if(k==1&&mode==1)
{
Init_MaxMin();
write_com(0x8d);//设置位置
}
else if(k==1&&mode==2)
{
Init_MaxMin();
write_com(0x8d+0x40);//设置位置
}
k=0;
}
//界面初始化
Init1602();
}
}
}
void delayms(uint ms)
{
uchar i=100,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
//T0中断用来计数器溢出,超过测距范围
void CJ_T0() interrupt 1
{
flags=1; //中断溢出标志
}