基于51单片机的机械位移检测装置的设计程序
时间: 2023-12-19 21:07:20 浏览: 23
以下是一个基于51单片机的机械位移检测装置的设计程序示例。该程序采用电阻应变片作为传感器,通过AD转换将电桥输出的微小电压信号转换为数字信号,然后通过LCD显示器显示出来。
```C
#include <reg52.h>
#include <intrins.h>
#define LCD_data P0 //定义LCD数据口
sbit LCD_EN = P2^5; //定义LCD使能信号
sbit LCD_RS = P2^6; //定义LCD读写信号
sbit LED = P1^4; //定义LED灯
sbit AD_CS = P1^0; //定义AD转换器片选信号
sbit AD_CLK = P1^1; //定义AD转换器时钟信号
sbit AD_DIO = P1^2; //定义AD转换器数据输入输出信号
unsigned char code table[] = "Displacement: "; //定义LCD显示内容
//延时函数
void delay(unsigned int t) {
unsigned int i, j;
for (i = t; i > 0; i--) {
for (j = 110; j > 0; j--);
}
}
//向LCD写入一个字节的数据
void WriteData(unsigned char dat) {
LCD_RS = 1;
LCD_EN = 0;
_nop_();
LCD_data = dat;
_nop_();
LCD_EN = 1;
_nop_();
LCD_EN = 0;
delay(1);
}
//向LCD写入一个命令
void WriteCmd(unsigned char cmd) {
LCD_RS = 0;
LCD_EN = 0;
_nop_();
LCD_data = cmd;
_nop_();
LCD_EN = 1;
_nop_();
LCD_EN = 0;
delay(1);
}
//LCD初始化函数
void InitLCD() {
WriteCmd(0x38); //设置为8位数据总线,2行显示,5x7点阵字符
WriteCmd(0x0C); //显示器开,光标关,光标位置关
WriteCmd(0x06); //文字显示不移动,光标右移
WriteCmd(0x01); //清屏
}
//AD转换函数
unsigned int ADConvert() {
unsigned char i;
unsigned int ADData = 0;
AD_CS = 0;
AD_CLK = 0;
AD_DIO = 1;
delay(1);
AD_CLK = 1;
AD_DIO = 1;
delay(1);
AD_CLK = 0;
AD_DIO = 0;
delay(1);
AD_CLK = 1;
AD_DIO = 1;
delay(1);
AD_CLK = 0;
AD_DIO = 0;
delay(1);
AD_CLK = 1;
AD_DIO = 1;
delay(1);
AD_CLK = 0;
AD_DIO = 1;
delay(1);
AD_CLK = 1;
AD_DIO = 0;
delay(1);
for (i = 0; i < 10; i++) {
AD_CLK = 0;
delay(1);
AD_CLK = 1;
ADData <<= 1;
if (AD_DIO == 1) {
ADData++;
}
delay(1);
}
AD_CS = 1;
return ADData;
}
void main() {
unsigned int ADValue;
unsigned char i;
InitLCD(); //初始化LCD
while (1) {
ADValue = ADConvert(); //进行AD转换
LED = 1;
delay(10);
LED = 0;
delay(10);
WriteCmd(0x80); //光标移动到第1行第1列
for (i = 0; i < 14; i++) {
WriteData(table[i]); //显示“Displacement:”
}
WriteData((ADValue/1000) + '0'); //显示千位数
WriteData((ADValue%1000/100) + '0'); //显示百位数
WriteData('.'); //显示小数点
WriteData((ADValue%100/10) + '0'); //显示十位数
WriteData((ADValue%10) + '0'); //显示个位数
}
}
```
该程序首先进行LCD的初始化,然后进入一个无限循环,每次循环中进行一次AD转换,将转换结果显示在LCD上。具体的AD转换过程通过AD_CS、AD_CLK和AD_DIO三个引脚控制,将转换结果存储在ADData变量中,并通过一定的计算将其转换为位移值,最后通过LCD显示出来。同时,程序中还通过LED灯进行了简单的状态指示。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)