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

news/2024/7/5 1:54:30

基于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 设计资料

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

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

点赞分享一起学习成长。


http://lihuaxi.xjx100.cn/news/2157313.html

相关文章

ES6 => 箭头函数

目录 语法基本形式 参数 函数体 特点 箭头函数&#xff08;Arrow Function&#xff09;是ES6&#xff08;ECMAScript 2015&#xff09;中引入的一种新的函数语法&#xff0c;它提供了一种更简洁的方式来编写函数。箭头函数有几个显著的特点和优势&#xff0c;下面我们来详细…

前端:导出表格

核心代码&#xff1a; function handleExport(HTML,title){ var uri data:application/vnd.ms-excel;base64,;var template <html xmlns:o"urn:schemas-microsoft-com:office:office" xmlns:x"urn:schemas-microsoft-com:office:excel" xmlns"h…

使用SquareLine Studio创建LVGL项目到IMX6uLL平台

文章目录 前言一、SquareLine Studio是什么&#xff1f;二、下载安装三、工程配置四、交叉编译 前言 遇到的问题&#xff1a;#error LV_COLOR_DEPTH should be 16bit to match SquareLine Studios settings&#xff0c;解决方法见# 四、交叉编译 一、SquareLine Studio是什么…

Docker-compose部署Alertmanager+Dingtalk+Prometheus+Grafana实现钉钉报警

部署监控 version: 3.7services: #dingtalkdingtalk:image: timonwong/prometheus-webhook-dingtalk:latestcontainer_name: dingtalkrestart: alwayscommand:- --config.file/etc/prometheus-webhook-dingtalk/config.ymlvolumes:- /data/monitor/dingtalk/config.yml:/etc/p…

洛谷P4447 [AHOI2018初中组] 分组(C++代码讲解)

1.题目 题目描述&#xff1a; 小可可的学校信息组总共有 n 个队员&#xff0c;每个人都有一个实力值 ai​。现在&#xff0c;一年一度的编程大赛就要到了&#xff0c;小可可的学校获得了若干个参赛名额&#xff0c;教练决定把学校信息组的 n 个队员分成若干个小组去参加这场比…

Linux_Debian学习笔记

文章目录 系统管理软件源Debian11debian11 ustc中国科技大学软件源debian11 清华大学软件源debian11 阿里云软件源 Debian12debian12 清华大学软件源 系统全局设置debian12 修改静态IP地址修改语言环境成中文 系统输入法Debian11 fcxe 安装rime中州韵五笔输入法 常用软件安装Do…

【Unity添加远程桌面】使用Unity账号远程控制N台电脑

设置地址&#xff1a; URDP终极远程桌面&#xff1b;功能强大&#xff0c;足以让开发人员、设计师、建筑师、工程师等等随时随地完成工作或协助别人https://cloud-desktop.u3dcloud.cn/在网站登录自己的Unity 账号上去 下载安装被控端安装 保持登录 3.代码添加当前主机 "…

AI技术创业机会之智慧城市与智慧交通

人工智能(AI)技术的创新与发展为智慧城市与智慧交通领域带来了革命性的变革,为创业者创造了大量创新与创业机会。以下详述了智慧城市与智慧交通背景下AI技术的创业机会及其具体细节与内容,以5000字篇幅深入剖析各细分领域,为有志于投身这一领域的创业者提供全面、深入的商…