用51单片机的LCD屏显示小车每行驶一圈后,圈数加一并显示小车行驶过程中的速度,设计代码并解释每一行代码的含义
时间: 2024-02-10 17:10:43 浏览: 26
好的,我会尽力回答你的问题。以下是基于51单片机的LCD屏显示小车每行驶一圈后,圈数加一并显示小车行驶过程中的速度的代码:
```c
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit EN=P2^5;
sbit RS=P2^6;
sbit RW=P2^7;
uchar speed=0; //小车速度
uint count=0; //行驶圈数
void delay(uint i)
{
while(i--);
}
void write_com(uchar com)
{
RW=0;
RS=0;
P0=com;
EN=0;
_nop_();
EN=1;
delay(10);
}
void write_data(uchar dat)
{
RW=0;
RS=1;
P0=dat;
EN=0;
_nop_();
EN=1;
delay(10);
}
void init()
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void main()
{
init();
while(1)
{
if(P1==0xfe) //检测到小车每行驶一圈
{
count++; //圈数加一
write_com(0x80); //光标移到第一行第一列
write_data('C');
write_data('o');
write_data('u');
write_data('n');
write_data('t');
write_data(':');
write_data(count/100+'0'); //显示百位数
write_data(count%100/10+'0'); //显示十位数
write_data(count%10+'0'); //显示个位数
write_com(0xc0); //光标移到第二行第一列
write_data('S');
write_data('p');
write_data('e');
write_data('e');
write_data('d');
write_data(':');
write_data(speed/10+'0'); //显示十位数
write_data(speed%10+'0'); //显示个位数
}
else if(P1==0xfd) //检测到小车行驶速度变化
{
if(speed<255) speed++; //速度加一
}
else if(P1==0xfb) //检测到小车行驶速度变化
{
if(speed>0) speed--; //速度减一
}
}
}
```
代码的主要流程如下:
1. 定义了一个速度变量 `speed` 和一个圈数变量 `count`,并初始化为0。
2. 定义了一些常量和变量,包括了LCD屏幕的控制引脚和一些延时函数。
3. 定义了一些函数,包括了初始化函数 `init()`、写入命令函数 `write_com()` 和写入数据函数 `write_data()`。
4. 在 `main()` 函数中,先调用 `init()` 函数初始化LCD屏幕。
5. 进入一个无限循环,不断地检测小车是否行驶了一圈或者速度发生了变化。
6. 如果检测到小车行驶了一圈,圈数加一并在LCD屏幕上显示圈数和速度。
7. 如果检测到小车行驶速度变化,速度加一或减一。
具体来说,当检测到小车行驶了一圈时,程序会先把圈数加一,然后用 `write_com()` 和 `write_data()` 函数在LCD屏幕上显示圈数和速度。其中,`write_com()` 函数用来写入LCD屏幕的命令,`write_data()` 函数用来写入LCD屏幕的数据。在这个程序中,我们使用的是8位数据总线和4位控制总线的方式,所以需要在写入数据或命令之前设置控制引脚的状态。具体来说,我们需要把 `RW` 引脚设置为0,表示写入模式;`RS` 引脚设置为0或1,分别表示写入命令或写入数据;然后把要写入的数据或命令写入 `P0` 引脚,最后通过设置 `EN` 引脚的高电平脉冲来完成写入操作。由于LCD屏幕的响应时间较慢,我们需要在每次写入之后进行一定的延时,以确保写入操作已经完成。
当检测到小车行驶速度发生变化时,程序会根据输入的信号来判断是加速还是减速,并相应地修改速度变量。在这个程序中,我们使用了 P1 引脚来检测小车的信号输入,其中 P1.0 表示小车行驶的信号,P1.1 表示加速信号,P1.2 表示减速信号。如果检测到 P1.0 的信号,说明小车已经行驶了一圈,程序会执行上述的显示操作;如果检测到 P1.1 的信号,说明小车需要加速,程序会把速度加一;如果检测到 P1.2 的信号,说明小车需要减速,程序会把速度减一。
总之,这个程序的主要功能就是通过LCD屏幕实时显示小车的行驶圈数和速度,让用户可以随时了解小车的行驶情况。