基于51单片机轮胎胎压监测系统—数码管显示

基于51单片机轮胎胎压监测系统

(仿真+程序+设计报告)

功能介绍

具体功能:

1.MPX4115压力传感器胎压检测;

2.ADC0832进行模数转换后,51单片机处理控制;

3.数码管显示胎压;

4.胎压过高蜂鸣器报警;

​演示视频:

基于51单片机气压监测系统—数码管显示

//ÏßÐÔÇø¼ä±ê¶È±ä»»¹«Ê½£º    y=(115-15)/(243-13)*X+15kpa   
#include <AT89X52.h> 
#include <intrins.h>
#include <stdio.h>

#define R24C04ADD 0xA1
#define W24C04ADD 0xA0

//ADC0832µÄÒý½Å
sbit ADCS =P2^2;  //ADC0832 chip seclect
sbit ADDI =P2^4;  //ADC0832 k in
sbit ADDO =P2^4;  //ADC0832 k out
sbit ADCLK =P2^3;  //ADC0832 clock signal

sbit SDA = P2 ^ 1;	                        //Êý¾ÝÏß
sbit SCL = P2 ^ 0;	                        //ʱÖÓÏß
bit bAck;	                                  //Ó¦´ð±êÖ¾ µ±bbAck=1ÊÇΪÕýÈ·µÄÓ¦´ð

unsigned char dispbitcode[8]={0xf7,0xfb,0xfd,0xfe,0xef,0xdf,0xbf,0x7f};  //λɨÃè
unsigned char dispcode[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};  //¹²ÑôÊýÂë¹Ü×Ö¶ÎÂë
unsigned char dispbuf[4];
unsigned int temp;
unsigned char getdata; //»ñÈ¡ADCת»»»ØÀ´µÄÖµ

void delay_1ms(void)  //12mhz delay 1.01ms
{
   unsigned char x,y;   
   x=3;
   while(x--) 
  {
       y=40;
       while(y--);
    }
}
void display(void)  //ÊýÂë¹ÜÏÔʾº¯Êý
{
  char k;
  for(k=0;k<4;k++)
  {

  P1 = dispbitcode[k];
  P0 = dispcode[dispbuf[k]];
  if(k==1)	  //¼ÓÉÏÊýÂë¹ÜµÄdpСÊýµã
  	P0&=0x7f;
  delay_1ms();	  
  }
}

/************
¶ÁADC0832º¯Êý
************/

//²É¼¯²¢·µ»Ø
unsigned int Adc0832(unsigned char channel)     //ADת»»£¬·µ»Ø½á¹û
{
    unsigned char i=0;
    unsigned char j;
    unsigned int dat=0;
    unsigned char ndat=0;

    if(channel==0)channel=2;
    if(channel==1)channel=3;
    ADDI=1;
    _nop_();
    _nop_();
    ADCS=0;//À­µÍCS¶Ë
    _nop_();
    _nop_();
    ADCLK=1;//À­¸ßCLK¶Ë
    _nop_();
    _nop_();
    ADCLK=0;//À­µÍCLK¶Ë,ÐγÉϽµÑØ1
    _nop_();
    _nop_();
    ADCLK=1;//À­¸ßCLK¶Ë
    ADDI=channel&0x1;
    _nop_();
    _nop_();
    ADCLK=0;//À­µÍCLK¶Ë,ÐγÉϽµÑØ2
    _nop_();
    _nop_();
    ADCLK=1;//À­¸ßCLK¶Ë
    ADDI=(channel>>1)&0x1;
    _nop_();
    _nop_();
    ADCLK=0;//À­µÍCLK¶Ë,ÐγÉϽµÑØ3
    ADDI=1;//¿ØÖÆÃüÁî½áÊø 
    _nop_();
    _nop_();
    dat=0;
    for(i=0;i<8;i++)
    {
        dat|=ADDO;//ÊÕÊý¾Ý
        ADCLK=1;
        _nop_();
        _nop_();
        ADCLK=0;//ÐγÉÒ»´ÎʱÖÓÂö³å
        _nop_();
        _nop_();
        dat<<=1;
        if(i==7)dat|=ADDO;
    }  
    for(i=0;i<8;i++)
    {
        j=0;
        j=j|ADDO;//ÊÕÊý¾Ý
        ADCLK=1;
        _nop_();
        _nop_();
        ADCLK=0;//ÐγÉÒ»´ÎʱÖÓÂö³å
        _nop_();
        _nop_();
        j=j<<7;
        ndat=ndat|j;
        if(i<7)ndat>>=1;
    }
    ADCS=1;//À­µÍCS¶Ë
    ADCLK=0;//À­µÍCLK¶Ë
    ADDO=1;//À­¸ßÊý¾Ý¶Ë,»Øµ½³õʼ״̬
    dat<<=8;
    dat|=ndat;
    return(dat);            //return ad k
}

//Æô¶¯I2C×ÜÏߣ¬¼´·¢ËÍÆðʼÌõ¼þ
void StartI2C()
{
	SDA = 1;	                      //·¢ËÍÆðʼÌõ¼þÊý¾ÝÐźÅ
	_nop_();
	SCL = 1;
	_nop_();		                    //Æðʼ½¨Á¢Ê±¼ä´óÓÚ4.7us
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	SDA = 0;	                      //·¢ËÍÆðʼÐźÅ
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	SCL = 0;	                        //ʱÖÓ²Ù×÷
	_nop_();
	_nop_();
}
//½áÊøI2C×ÜÏߣ¬¼´·¢ËÍI2C½áÊøÌõ¼þ
void StopI2C()
{
	SDA = 0;	                        //·¢ËͽáÊøÌõ¼þµÄÊý¾ÝÐźÅ
	_nop_();		                      //·¢ËͽáÊøÌõ¼þµÄʱÖÓÐźÅ
	SCL = 1;	                        //½áÊøÌõ¼þ½¨Á¢Ê±¼ä´óÓÚ4us
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	SDA = 1;	                        //·¢ËÍI2C×ÜÏß½áÊøÃüÁî
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();	
}
//·¢ËÍÒ»¸ö×Ö½ÚµÄÊý¾Ý
void	SendByte(unsigned char c)
{
	unsigned char BitCnt;
	for(BitCnt = 0;BitCnt < 8;BitCnt++)			          //Ò»¸ö×Ö½Ú
		{
			if((c << BitCnt)& 0x80) SDA = 1;	           //ÅжϷ¢ËÍλ
			else	SDA = 0;
			_nop_();
			SCL = 1;	                      //ʱÖÓÏßΪ¸ß£¬Í¨Öª´Ó»ú¿ªÊ¼½ÓÊÕÊý¾Ý
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			SCL = 0;
		}
	_nop_();
	_nop_();
	SDA = 1;	                                        //ÊÍ·ÅÊý¾ÝÏߣ¬×¼±¸½ÓÊÜÓ¦´ðλ
	_nop_();
	_nop_();
	SCL = 1;
	_nop_();
	_nop_();
	_nop_();
	if(SDA == 1) bAck =0;
	else bAck = 1;		                                //ÅжÏÊÇ·ñÊÕµ½Ó¦´ðÐźÅ
	SCL = 0;
	_nop_();
	_nop_();
}
//½ÓÊÕÒ»¸ö×Ö½ÚµÄÊý¾Ý
unsigned char RevByte()
{
	unsigned char retc;
	unsigned char BitCnt;
	retc = 0;
	SDA = 1;
	for(BitCnt=0;BitCnt<8;BitCnt++)
	{
		_nop_();
		SCL = 0;	                                    //ÖÃʱÖÓÏßΪµÍ£¬×¼±¸½ÓÊÕ
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		SCL = 1;	                                    //ÖÃʱÖÓÏßΪ¸ßʹµÃÊý¾ÝÓÐЧ
		_nop_();
		_nop_();
		retc = retc << 1;	                            //×óÒƲ¹Áã
		if (SDA == 1)
		retc = retc + 1;                             	//µ±Êý¾ÝΪ1ÔòÊÕµ½µÄÊý¾Ý+1
		_nop_();
		_nop_();
	}
	SCL = 0;
	_nop_();
	_nop_();
	return(retc);                                   //·µ»ØÊÕµ½µÄÊý¾Ý
}


unsigned char WIICByte(unsigned char WChipAdd,unsigned char InterAdd,unsigned char WIICData)
{
	StartI2C();										      //Æô¶¯×ÜÏß
	SendByte(WChipAdd);							//·¢ËÍÆ÷¼þµØÖ·ÒÔ¼°ÃüÁî
	if (bAck==1)											  //ÊÕµ½Ó¦´ð
	{
		SendByte(InterAdd);								//·¢ËÍÄÚ²¿×ÓµØÖ·
		if (bAck ==1)
		{
			SendByte(WIICData);							//·¢ËÍÊý¾Ý
			if(bAck == 1)
			{
				StopI2C();                    //Í£Ö¹×ÜÏß
				return(0xff);
			}
			else
			{
				return(0x03);
			}			
		}
		else
		{
			return(0x02);
		}
	}
	return(0x01);
}
//¶ÁÈ¡Ö¸¶¨Æ÷¼þµÄÄÚ²¿Ö¸¶¨µØÖ·Ò»¸ö×Ö½ÚÊý¾Ý
unsigned char RIICByte(unsigned char WChipAdd,unsigned char RChipAdd,unsigned char InterDataAdd)
{
	unsigned char TempData;	
	TempData = 0;
	StartI2C();								        //Æô¶¯
	SendByte(WChipAdd);					    	//·¢ËÍÆ÷¼þµØÖ·ÒÔ¼°¶ÁÃüÁî
	if (bAck==1)								    	//ÊÕµ½Ó¦´ð
	{
		SendByte(InterDataAdd);					//·¢ËÍÄÚ²¿×ÓµØÖ·
		if (bAck ==1)
		{
			StartI2C();
			SendByte(RChipAdd);	
			if(bAck == 1)
			{
				TempData = RevByte();       //½ÓÊÕÊý¾Ý
				StopI2C();                  //Í£Ö¹I2C×ÜÏß
				return(TempData);           //·µ»ØÊý¾Ý
			}
			else
			{
				return(0x03);
			}	
		}
		else
		{
			return(0x02);
		}
	}
	else
	{
		return(0x01);
	}
}




硬件设计

使用元器件:

单片机:AC89C52;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

设计资料

01 仿真图

本设计使用proteus7.8和proteus8.9两个版本设计,向下兼容,无需担心!具体如图!

02 程序

本设计使用软件keil4和keil5两个版本编程设计,无需担心!具体如图

03 设计报告

一千字设计报告,具体如下!

04 设计资料

        资料获取请关注同名公众号,全部资料包括仿真源文件 、程序(含注释)、设计报告、仿真视频等。具体内容如下,全网最全! !

资料获取请观看前面演示视频!

点赞分享一起学习成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/529165.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ST Motor Control Workbench生成工程报错PDSC version is not supported解决办法

文章目录 前言一、报错相关信息二、解决办法 前言 使用 ST Motor Control Workbench 5.4.4 FOC 电机开发工具和 stm32cubemx 6.1.1 生成的工程报错&#xff0c;记录一下解决的办法。 一、报错相关信息 报错信息如下&#xff1a; 2024-04-09 18:35:28,527 ERROR [LineInfo_to…

【Linux】虚拟化技术docker搭建SuitoCRM系统及汉化

CRM系统 CRM&#xff08;Customer Relationship Management&#xff0c;客户关系管理&#xff09;系统是一种用于管理和优化企业与客户关系的软件工具。在商业竞争激烈的现代社会中&#xff0c;CRM系统已成为许多企业提高销售、增强客户满意度和实现持续增长的重要工具。本文将…

FME学习之旅---day21

我们付出一些成本&#xff0c;时间的或者其他&#xff0c;最终总能收获一些什么。 教程&#xff1a;AutoCAD 变换 相关的文章 为您的 DWG 赋予一些样式&#xff1a;使用 DWGStyler、模板文件、块等 FME数据检查器在显示行的方式上受到限制。它只能显示线条颜色&#xff0c;而…

一文讲清如何用BI进行商品分析之返货品画像分析

01 什么是商品画像&#xff0c;怎样进行商品分析 “用户画像对于小伙伴们来说并不陌生&#xff0c;那有小伙伴知道商品画像吗&#xff1f;其实它和用户画像一样&#xff0c;可以简单理解成是商品海量数据的标签。” 商品画像的意义在于可以对商品进行精准的定位&#xff0c;让…

Linux初学(十七)防火墙

一、防火墙简介 1.1 防火墙的类别 安全产品 杀毒&#xff1a; 针对病毒&#xff0c;特征篡改系统中的文件杀毒软件针对处理病毒程序防火墙&#xff1a; 针对木马&#xff0c;特征系统窃取防火墙针对处理木马 防火墙分为两种 硬件防火墙软件防火墙 硬件防火墙 各个网络安全…

鸿蒙、如何使用@ohos.contact 接口,实现对联系人的增删查改功能

介绍 本示例使用ohos.contact 接口&#xff0c;实现了对联系人的增删查改功能。 效果预览 使用说明 1.点击 按钮&#xff0c;跳转添加联系人界面&#xff0c;输入联系人信息&#xff0c;点击 √&#xff0c;确认添加联系人&#xff0c;并返回首页&#xff1b; 2.点击联系人…

关于阿里云centos系统下宝塔面板部署django/中pip install mysqlclient失败问题的大总结

python版本3.12.0 问题1 解决方案 sudo vim /etc/profile export MYSQLCLIENT_CFLAGS"-I/usr/include/mysql" export MYSQLCLIENT_LDFLAGS"-L/usr/lib64/mysql" Esc退出编辑模式 &#xff1a;wq退出并且保存 问题二 说是找不到 mysql.h头文件 CentOS ‘…

【Linux】进程的状态(运行、阻塞、挂起)详解,揭开孤儿进程和僵尸进程的面纱,一篇文章万字讲透!!!!进程的学习②

目录 1.进程排队 时间片 时间片的分配 结构体内存对齐 偏移量补充 对齐规则 为什么会有对齐 2.操作系统学科层面对进程状态的理解 2.1进程的状态理解 ①我们说所谓的状态就是一个整型变量&#xff0c;是task_struct中的一个整型变量 ②.状态决定了接下来的动作 2.2运行状态 2.…

常见的mq产品和优点

常见的mq产品和优点 一、什么是mq? MQ全称 Message Queue&#xff08;消息队列&#xff09;&#xff0c;是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信&#xff0c;解耦。 二、常见的mq产品 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq …

在家学机器人技术指南

机器人技术是一个跨学科的领域&#xff0c;涉及计算机科学、电子工程、机械工程、人工智能等多个方面。在家自学机器人技术是完全可能的&#xff0c;但需要有计划和系统的学习路径&#xff0c;以及对相关领域的基础知识有一定的了解。 以下是一些建议&#xff0c;可以帮助你在家…

ES 大数据量按照日期分索引存储和查询

前言 ES 通常被用来存放各种日志数据或其他大批量数据&#xff0c;然后做统计。 对于请求量大的系统来说&#xff0c;日志或其他业务数据无比庞大&#xff0c;需要按日期来划分索引&#xff0c;便于做冷热数据的迁移管理。大批量的业务数据也要根据日期来区分&#xff0c;提高…

冒泡排序解读

在信息爆炸的时代&#xff0c;数据无处不在&#xff0c;而如何有效地管理和处理这些数据&#xff0c;成为了现代计算机科学的一个重要课题。排序算法&#xff0c;作为数据处理的基本工具之一&#xff0c;对于数据的组织、搜索和分析起着至关重要的作用。今天&#xff0c;我们就…

淘宝销量API商品详情页原数据APP接口测试㊣

淘宝/天猫获得淘宝app商品详情原数据 API 返回值说明 item_get_app-获得淘宝app商品详情原数据 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地…

关于ES6数组详细解释

引入 es6数组有很多方法&#xff1a;map,find,filter返回一个新数组&#xff0c;every&#xff0c;some&#xff0c;Array.includes()返回的是boolean&#xff0c; findIndex()&#xff0c;indexOf()&#xff0c;返回的是第一次出现的索引值&#xff0c;includes()&#xff0…

Node2Vec论文翻译

node2vec: Scalable Feature Learning for Networks node2vec&#xff1a;可扩展的网络特征学习 ABSTRACT 网络中节点和边缘的预测任务需要在学习算法使用的工程特征上付出仔细的努力。最近在更广泛的表示学习领域的研究通过学习特征本身在自动化预测方面取得了重大进展。然…

测开面经(Git经典题目,Git入门)

1. GitHub是什么 a. Git是一个分布式版本控制系统&#xff0c;作用是跟踪、管理和协调软件开发项目中的代码更改。 b. 提供了一种有效的方式来管理代码的版本历史&#xff0c;以及多人协作开发的能力。 2. Git的作用有哪些 a. 版本控制&#xff1a;Git可以记录每次代码更改的…

C++——优先级队列

前言&#xff1a;这篇文章我们继续来分享一个c的容器——优先级队列。 一.理解优先级 何为优先级一说&#xff1f;实际上就是有顺序的意思。 优先级队列&#xff0c;即有顺序的队列&#xff0c;是一个无需我们自己进行排序操作&#xff0c;在数据传入时就会由容器自己排好序的…

【LAMMPS学习】七、加速性能(4)加速器包

7. 加速性能 7.1.基准测试 7.2.测试性能 7.3.通用技巧 7.4.加速器包 LAMMPS 中添加了各种pair_style、fixes、compute 和其他命令的加速版本&#xff0c;其运行速度通常比标准非加速版本更快。有些需要您的系统上存在适当的硬件&#xff0c;例如GPU 或 Intel Xeon Phi 协处…

LLM - Ruozhiba <Quality> is All You Need

目录 引言 1.COIG-CQIA Data 2.Ruozhiba Performance 3.Ruozhiba Data 4.More Ruozhiba Data 5.Some thoughts 引言 近期弱智吧 [后续以 Ruozhiba 代替] 的数据集在中文 LLM 场景的 Fine-Tuning 效果大火。众所周知&#xff0c;在当前 LLM 的大环境下&#xff0c;足够优…

代码算法训练营day14 | 理论基础、递归遍历

day14&#xff1a; 理论基础二叉树的分类&#xff1a;二叉树的种类&#xff1a;满二叉树完全二叉树二叉搜索树平衡二叉搜索树 二叉树的存储方式&#xff1a;链式存储顺序存储 二叉树的遍历方式&#xff1a;深度优先和广度优先遍历实现方式 二叉树的定义&#xff1a; 递归遍历递…