小车测速并通过OLED显示
拿测速并通过串口发送的代码进行修改
1.增加OLED的文件
增加IIC.c,OLED.c,OLEDASCII.h,相应头文件也加载进来,直接在OLED显示字符串(用厂商代码)的程序中拷贝这些文件进来,然后整合
2.在main函数中进行调用
main函数中就调用OLED初始化函数,然后清屏,显示一个自己想显示的字符串,然后在循环中调用厂商函数显示速度即可
extern unsigned int ResultSpeed;
extern unsigned char signal; //发送标志,当定时器2将其改为1时串口发送数据
char recspeed[24];
void main()
{
Timer0Init();
Timer2Init();
Int0_Init();
UartInit();
OLED_Init(); //OLED初始化
OLED_Clear(); //先清屏
OLED_P8x16Str(1,0,"******BMW******"); //显示一个字符串
while(1)
{
//定时器2那边如果将标志位改为1,则进行数组格式组装并发送
if(signal == 1)
{
//sprintf将ResultSpeed按格式组建好后放到数组中去
sprintf(recspeed,"speed:%d cm/s ",ResultSpeed);
Uart_SendString(recspeed); //通过串口发送速度
OLED_P8x16Str(3,3,recspeed); //通过OLED显示速度
signal = 0;
}
}
}
3.程序文件如下:
main.c:主函数,定时器0、定时器2、外部中断、串口、OLED的初始化函数调用,然后调用清屏函数清一下屏,while循环内根据标志位发送速度到串口,同时也调用函数在OLED上显示速度
Motor.c:小车前进、后退、左转、右转和停止的函数
Delay.c:延时函数
Timer0.c:定时器0初始化函数,中断处理函数中是前进的PWM调速
Timer2.c:定时器2初始化函数,中断处理函数是定时1秒对外部中断的变量进行处理后清零
Init0.c:外部中断0初始化函数,下降沿中断处理函数让变量不断+1
IIC.c:IIC协议的起始信号,停止信号,发送一个字节函数和接收应答
OLED.c:OLED写命令函数,写数据函数,清屏函数,初始化函数,显示文字、字母或数字函数,设置坐标和显示8*16点阵的函数
OLEDASCII.h:含有一个8*16的ASCII码的点阵数组
Uart.c:串口发送函数,串口中断处理函数,接收串口指令让小车启动,包括快速、中速、慢速模式选择