83 基于单片机汽车防盗报警系统设计【毕设课设】

 

void addselect()                /* 量程选择 */
{
	CH++;                   /* 通道号加 */
	if ( CH > 7 )           /* 最大到5		  符号&:按位与符号,二进制的对应位如果都为1,那么结果的对应位就为1,否则为0 */
		CH = 0;         /* 清零,一共三个通道0 1 2 对应二进制是0000.0001.0010 */
	adda	= CH & 0x01;    /* 将通道对应的二进制0101&0001,结果就是0001,赋值给adda(引脚只能接受最低位的数据,只有1和0),那么adda引脚就是高电平 */
	addb	= (CH & 0x02) >> 1;
	addc	= (CH & 0x04) >> 2;
	delay( 5 );             /* 短延时 */
}


uint adtrans()                  /* AD转换 */
{
	addselect();
	sum = 0;                /* 滤波开始 */
	for ( i = 0; i < 5; i++ )
	{
		ale	= 1;
		ale	= 0;
		start	= 1;    /* 启动AD转换。 */
		start	= 0;
		while ( eoc == 0 )
			;       /* 等待转换结束。 */
		oe	= 1;
		a[i]	= P1;   /* 出入转换结果。 */
		delay( 5 );     /* //每隔5usAD转换并采集一次数据,将得到的数值存入数组中 */
	}
	for ( j = 0; j < 4; j++ )
		for ( i = 0; i < 4 - j; i++ )
			if ( a[i] > a[i + 1] )
			{
				t		= a[i];
				a[i]		= a[i + 1];
				a[i + 1]	= t;
			}
	for ( i = 1; i < 4; i++ )
	{
		sum += a[i];
	} /* 采用冒泡法比较,取中间3个数值 */
	voltdata[CH] = sum / 3;

	delay( 1 );
	oe		= 0;
	voltdata[CH]	= 4 * (100 * voltdata[CH]) / 51; /* 处理运算结果。 */
	/*
	 * voltdata[CH]是读取到的ad值,乘以100是让小数点后移两位,乘以4是量程扩大四倍也就是5*4=20V,然后除以51(和乘以0.0196一样)得到实际的电压值
	 * 8位AD最小分辨率就是0.0196V
	 */
	return(voltdata[CH]);
}


void disvolt()    /* 显示函数 */
{
	/* A传感器 */
	if ( voltdata[0] > 800 )
	{
		write_string( 0x80, "Car Anti-theft!!" );
		write_string( 0xc0, "A:Appear Person " );
		flag = 1;
		LED1 = 1;
		delay(800);
	} else{
		LED1 = 0;
	}
	/* B传感器 */
	if ( voltdata[1] > 800 )
	{
		write_string( 0x80, "Car Anti-theft!!" );
		write_string( 0xc0, "B:Car Shake     " );
		flag = 1;
		LED2 = 1;
		delay(800);
	}else{
		LED2 = 0;
	}
	/* C传感器 */
	if ( voltdata[2] > 800 )
	{
		write_string( 0x80, "Car Anti-theft!!" );
		write_string( 0xc0, "C:Door Opening  " );
		flag = 1;
		LED3 = 1;
		delay(800);
	}else{
	
		LED3 = 0;

	}


	if ( voltdata[0] < 800 && voltdata[1] < 800 && voltdata[2] < 800 )
	{
		flag = 0;
	}
	if ( flag == 0 )
	{
		BUZZ = 0;
		write_string( 0x80, "Car Anti-theft!!" );
		write_string( 0xc0, "All Sensor is ok" );
	}else{
		BUZZ = 1;
	}
}


void anjian()                   /*按键扫描函数 */
{

}


void init()             /* 初始化函数 */
{
	add = 0;
	addselect();
	lcd_init();     /* 液晶显示初始化 */

	TxBuf[0]	= '$';
	TxBuf[3]	= '.';
	TxBuf[7]	= '\0';
	
	/* 切换档位 */
	TxBuf[6] = CH + 0x31;
}


void main()                     /* 主程序 */
{
	LED1 = 0;
	LED2 = 0;
	LED3 = 0;
	BUZZ = 0;

	init();                 /* 调用初始化函数 */
	Uart_init();
	while ( 1 )             /* 进入while循环 */
	{
		anjian();       /* 扫描按键 */
		adtrans();      /* ad函数 */
		disvolt();      /* 显示电压 */
	}
}


void timer0() interrupt 1
{
	TH0	= 0x4c;
	TL0	= 0x00;
	t0Count++;
	if ( t0Count >= 40 )
	{
		t0Count = 0;
		if ( flagAu == 1 )
		{
			if ( add == 0 )
				add = 4;
			else
				add = 0;
		}
	}
}

 资料下载地址

https://pan.baidu.com/s/1S910fG0yoeQLsYbPXC7JUg?pwd=8888

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值