//****************************************************************//
#include <reg52.h>
#include <intrins.h>
#include <string.H>
typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量 */
typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量 */
#define AddWr 0x90 //写数据地址
#define AddRd 0x91 //读数据地址
unsigned char ReadADC(unsigned char Chl);
bit ack; //应答标志位
sbit SDA=P2^6;
sbit SCL=P2^7;
sbit key1=P3^7;
sbit key2=P3^6;
sbit key3=P3^5;
sbit key4=P3^4;
sbit beep=P2^5;
sbit led1=P2^2;
sbit led2=P2^3;
sbit hw=P2^0;
sbit jd=P2^1;
sbit lcd_rs_port = P1^0; /*定义LCD控制端口*/
sbit lcd_rw_port = P1^1;
sbit lcd_en_port = P1^2;
#define lcd_data_port P0
unsigned char flag,flag1=0;
unsigned int ch=2000,th=280;
/*定义数字ascii编码*/
unsigned char mun_char_table[]={"0123456789abcdef"};
unsigned char temp_table[] ={"T:00.0'C H:000C"};
unsigned char temp_table1[] ={"C:0000PPM H:0000"};
unsigned char code temp_table2[] ={"Welcome to use: "}; //欢迎使用
unsigned char code temp_table3[] = {" AAS of vehicle "}; //车辆防窒息系统 Anti asphyxiation system of vehicle
#define uchar unsigned char
#define uint unsigned int
sbit DS=P2^4;
uint temp=0;
//////////////以下是ds18B20驱动程序////////////////
//延时子函数
//sign of the result positive or
void delay1(uint count)
{
uint i;
while(count)
{
i=200;
while(i>0)
i--;
count--;
}
}
//发送初始化及复位信号
void dsreset(void)
{
//DS18B20 初始化
uint i;
DS=0;
i=103;
while(i>0)i--;
DS=1;
i=4;
while(i>0)i--;
}
//read a bit 读一位
bit tmpreadbit(void)
{
uint i;
bit dat;
//i++ for delay 小延时一下
DS=0;i++;
DS=1;i++;i++;
dat=DS;
i=8;while(i>0)i--;
return (dat);
}
//read a byte date 读一个字节
uchar tmpread(void)
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tmpreadbit();
//读出的数据最低位在最前面,这样刚好
//一个字节在 dat 里
dat=(j<<7)|(dat>>1);
}
//将一个字节数据返回
return(dat);
}
//write a byte to ds18b20
//写一个字节到 DS18B20 里
void tmpwritebyte(uchar dat)
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb) //write 1 写 1 部分
{
DS=0;
i++;i++;
DS=1;
i=8;while(i>0)i--;
}
else
{
DS=0; //write 0 写 0 部分
i=8;while(i>0)i--;
DS=1;
i++;i++;
}
}
}
//DS18B20 begin change 发送温度转换命令
void tmpchange(void)
{
dsreset(); //初始化 DS18B20
delay1(1); //延时
tmpwritebyte(0xcc); //跳过序列号命令
tmpwritebyte(0x44); //发送温度转换命令
}
//get the temperature 获得温度
uint tmp()
{
float tt=0;
uint a=0,b=0;
dsreset();
delay1(1);
//发送读取数据命令
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);
//连续读两个字节数据
a=tmpread();
b=tmpread();
//two byte compose a int variable
//两字节合成一个整型变量。
temp=b;
temp<<=8;
temp=temp|a;
if(b==0xff)
{
flag=1;
temp=~temp+1;
}
//得到真实十进制温度值,因为 DS18B20
tt=temp*0.0625;
//可以精确到 0.0625 度,所以读回数据的最低位代表的是
//0.0625 度。
//放大十倍,这样做的目的将小数点后第一位
temp=tt*10+0.5;
//也转换为可显示数字,同时进行一个四舍五入操作。
//返回温度值
return temp;
}
//////////////以上是DS18B20驱动程序////////////////
//////////////以下是LCD1602驱动程序////////////////
void lcd_delay(uchar ms) /*LCD1602 延时*/
{
uchar j;
while(ms--){
for(j=0;j<250;j++)
{;}
}
}
void lcd_busy_wait() /*LCD1602 忙等待*/
{
lcd_rs_port = 0;
lcd_rw_port = 1;
lcd_en_port = 1;
lcd_data_port = 0xff;
while (lcd_data_port&0x80);
lcd_en_port = 0;
}
void lcd_command_write(uchar command) /*LCD1602 命令字写入*/
{
lcd_busy_wait();
lcd_rs_port = 0;
lcd_rw_port = 0;
lcd_en_port = 0;
lcd_data_port = command;
lcd_en_port = 1;
lcd_en_port = 0;
}
void lcd_system_reset() /*LCD1602 初始化*/
{
lcd_delay(20);
lcd_command_write(0x38);
lcd_delay(100);
lcd_command_write(0x38);
lcd_delay(50);
lcd_command_write(0x38);
lcd_delay(10);
lcd_command_write(0x08);
lcd_command_write(0x01);
lcd_command_write(0x06);
lcd_command_write(0x0c);
}
void lcd_char_write(uchar x_pos,y_pos,lcd_dat) /*LCD1602 字符写入*/
{
x_pos &= 0x0f; /* X位置范围 0~15 */
y_pos &= 0x01; /* Y位置范围 0~ 1 */
if(y_pos==1) x_pos += 0x40;
x_pos += 0x80;
lcd_command_write(x_pos);
lcd_busy_wait();
lcd_rs_port = 1;
lcd_rw_port = 0;
lcd_en_port = 0;
lcd_data_port = lcd_dat;
lcd_en_port = 1;
lcd_en_port = 0;
}
//////////////////以上是LCD1602驱动程序////////////////
/////////////////////////////////////
/////////以下是AD程序////////////////
void _Nop(void)//I2C延时程序
{
int k;
for (k=0; k<10; k++);
}
//////////////////////////////////////
/*------------------------------------------------
启动总线
------------------------------------------------*/
void Start_I2c()
{
SDA=1; //发送起始条件的数据信号
_Nop();
SCL=1;
_Nop(); //起始条件建立时间大于4.7us,延时
_Nop();
_Nop();
_Nop();
_Nop();
SDA=0; //发送起始信号
_Nop(); //起始条件锁定时间大于4μ
_Nop();
_Nop();
_Nop();
_Nop();
SCL=0; //钳住I2C总线,准备发送或接收数据
_Nop();
_Nop();
}
/*------------------------------------------------
结束总线
------------------------------------------------*/
void Stop_I2c()
{
SDA=0; //发送结束条件的数据信号
_Nop(); //发送结束条件的时钟信号
SCL=1; //结束条件建立时间大于4μ
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SDA=1; //发送I2C总线结束信号
_Nop();
_Nop();
_Nop();
_Nop();
}
/*----------------------------------------------------------------
字节数据传送函数
函数原型: void SendByte(unsigned char c);
功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
此状态位进行操作.(不应答或非应答都使ack=0 假)
发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
------------------------------------------------------------------*/
void SendByte(unsigned char c)
{
unsigned char BitCnt;
for(BitCnt=0;BitCnt<8;BitCnt++) //要传送的数据长度为8位
{
if((c<<BitCnt)&0x80)SDA=1; //判断发送位
else SDA=0;
_Nop();
SCL=1; //置时钟线为高,通知被控器开始接收数据位
_Nop();
_Nop(); //保证时钟高电平周期大于4μ
_Nop();
_Nop();
_Nop();
SCL=0;
}
_Nop();
_Nop();
SDA=1; //8位发送完后释放数据线,准备接收应答位
_Nop();
_Nop();
SCL=1;
_Nop();
_Nop();
_Nop();
if(SDA==1)ack=0;
else ack=1; //判断是否接收到应答信号
SCL=0;
_Nop();
_Nop();
}
/*---------
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
针对车内防窒息 实物+全套论文10000字 研究目标 针对车内防窒息应用需求,结合单片机技术,设计一个车内防窒息监测报警系统,以解决儿童等弱势群体在车内窒息身亡的问题。 主要研究内容和方法 系统主要包括单片机、红外触感器、声光报警模块、手机短信模块等,通过对汽车内人员情况、温度、二氧化碳浓度等进行实时检测和分析处理,分析隐患发生的条件,即若检测到有生命体特征信号且环境参数如温度、二氧化碳浓度超过设定阈值时,系统将启动预警功能,采用无线通讯方式向车主短信通知,同时触发汽车警报装置提醒相关人员和开启天窗或空调设备进行通风换气。 主要考核要求或指标 1)可实现对人体、温度、二氧化碳浓度等参数的感知;2)系统具备预警功能。 知网10000字论文全套(开题报告,翻译,文献综述,答辩PPT+程序实物+论文)
资源详情
资源评论
资源推荐
收起资源包目录
Desktop.rar (14个子文件)
防窒息程序
temp.hex 10KB
temp 30KB
temp.lnp 40B
temp.uvproj 13KB
temp_uvopt.bak 54KB
temp_Opt.Bak 1020B
temp.c 16KB
temp.M51 37KB
temp.plg 235B
temp.OBJ 34KB
temp.LST 30KB
temp.uvopt 54KB
temp.opt.bak 1021B
lunwen.doc 29KB
共 14 条
- 1
高级工程师-荣工
- 粉丝: 10
- 资源: 23
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论3