酒精浓度检测系统设计程序设计_第1页
酒精浓度检测系统设计程序设计_第2页
酒精浓度检测系统设计程序设计_第3页
酒精浓度检测系统设计程序设计_第4页
酒精浓度检测系统设计程序设计_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

include reg52 H include STC12c5A h include 1602 h include 2402 h define uchar unsigned char define uint unsigned int 声明常量 define ALCH 250 醉驾标准 80mg L K MG MV 和 K ZERO 为传感器校准系数 要根据每个 MQ 3 模块校准 define K MG MV 160 66 传感器灵敏度系数 每毫 克 L 对应的 10 毫伏数 define K ZERO 15 传感器零点漂移 约 130mV 定义按键 sbit Key Up P3 4 sbit Key Down P3 5 定义 LED 报警灯 sbit Led Warn1 P3 2 sbit Led Warn2 P3 3 sbit Buzzer P3 0 定义蜂鸣器 定义乙醇传感器 TTL 电平输出引脚 sbit DOUT P1 4 定义标识 volatile bit FlagStartAL 0 开始转换标志 volatile bit FlagKeyPress 0 有键弹起标志 全局变量定义 uchar Threshold 酒精浓度上限报警值 uint ALCounter 酒精转换计时器 long ALValue 酒精测量值 float ALtemp 计算临时变量 uint keyvalue keyUp keyDown 键值 char pSave EEPROM 存盘用指针 函数声明 void Data Init void Timer0 Init void Port Init void ADC Init uchar GetADVal void KeyProcess uint 数据初始化 void Data Init ALCounter 0 ALValue 0 Led Warn1 1 Led Warn2 2 keyvalue 0 keyUp 1 keyDown 1 Buzzer 1 定时器 0 初始化 中断时间约 2 毫秒 计算 晶振 11 0592MHz 定时器时钟 11059200 12 921600 每毫秒 922 个脉冲 16 位定时器初值 65536 1844 63692 0 xf8cc void Timer0 Init ET0 1 允许定时器 0 中断 TMOD 1 定时器工作方式选择 TL0 0 xcc TH0 0 xf8 定时器赋予初值 大约为 2 毫秒中断 1 次 TR0 1 启动定时器 定时器 0 中断 void Timer0 ISR void interrupt 1 using 0 TL0 0 xcc TH0 0 xf8 定时器赋予初值 每 1 秒钟启动一次 AD 转换 ALCounter if ALCounter 500 FlagStartAL 1 ALCounter 0 void Port Init P1M0 0 x80 10000000 P1 7 作为 AD 输入 P1M1 0 x80 void ADC Init uint i P1ASF 0 x80 设 P1 7 为 AD 输入 ADC RES 0 清先前的结果 ADC CONTR 0 x80 POWER 1 打开 ADC 电源 for i 5000 i 0 i 延时 ADC CONTR ADC CONTR 1110 0000 清 ADC FLAG ADC START 位和低 3 位 ADC CONTR ADC CONTR 设置当前通 道号为 P1 7 for i 2500 i 0 i 延时 进行 AD 转换 得到当前酒精值 uchar GetADVal uint i ADC CONTR for i 250 i 0 i 待输入电压稳定后开始转换 ADC RES 0 ADC CONTR 0 x08 ADC Start 1 启动 转换 while ADC CONTR 等待转换结束 ADC FLAG 1 ADC CONTR 清 ADC FLAG 和 ADC START 位 停止转换 return ADC RES 存入设定值 void Save Setting pSave char 地址低位对应低 8 位 高位对应高 8 位 wrteeprom 0 pSave 存醉酒阈值低 8 位 DELAY 300 pSave wrteeprom 1 pSave 存醉酒阈值高 8 位 DELAY 300 载入设定值 void Load Setting pSave char pSave rdeeprom 0 pSave rdeeprom 1 if Threshold 255 Threshold 0 Threshold 250 按键处理程序 参数为键值 1 为 Up 键 2 为 Down 键 void KeyProcess uint num switch num case 1 if Threshold1 Threshold break default break L1602 int 2 9 Threshold Save Setting void delay ms uint z 长延时函数 uint x y for x z x 0 x for y 110 y 0 y void main uint i j EA 0 Data Init 数据初始化 Timer0 Init 定时器 0 初始化 Port Init 端口初始化 ADC Init ADC 初始化 EA 1 L1602 init L1602 string 1 1 Welcome to ALCT L1602 string 2 1 I Love MCU 延时 for i 0 i 1000 i for j 0 j 1000 j 清屏 L1602 string 1 1 L1602 string 2 1 L1602 string 1 1 Alcohol mg L L1602 string 2 1 Thresho mg L 载入设定值 Load Setting L1602 int 2 9 Threshold while 1 如果 FlagStartAL 标志置位 则进行 AD 转换 if FlagStartAL 1 酒精浓度换算 50mg L 62 5ppm 传感器灵敏度 应事先校准 ALValue 500 GetADVal 256 8 位 ADC 首先得到电压值 单位 10 毫伏 ALValue ALValue K ZERO 首 先减去零点漂移 一般是 130mV if ALValue Threshold Led Warn1 0 超过阈值 则 Led Warn1 灯报 警 否则报警灯灭 Buzzer 0 else Led Warn1 1 Buzzer 1 FlagStartAL 0 查询乙醇传感器 TTL 电平 该指示灯为传感器模块 报警 if DOUT 0 Led Warn2 0 else Led Warn2 1 P3 P3 0 xf0 拉高 P3 口 以读取 P3 口的值 Key Up 1 Key Down 1 if Key Up 0 delay ms 5 延时消抖 if Key Up 0 FlagKeyPress 1 keyvalue 1 else while Key Up 松手检测 else if Key Down 0 delay ms 5 if Key Down 0 FlagKeyPress 1 keyvalue 2 else while Key Down else keyvalue 0 if FlagKeyPress 1 KeyProcess keyvalue FlagKeyPress 0 文件名 液晶 1602 显示 c 描述 该程序实现了对液晶 1602 的控制 include 1602 h include math h 名称 delay 功能 延时 延时时间大概为 140US 输入 无 输出 无 void delay int i j for i 0 i 10 i for j 0 j 2 j 名称 Convert uchar In Date 功能 因为电路设计时 P0 0 P0 7 接法刚好了资料中的 相反 所以设计该函数 输入 1602 资料上的值 输出 送到 1602 的值 uchar Convert uchar In Date uchar i Out Date 0 temp 0 for i 0 i i Out Date temp 0 sign 0 else sign 1 temp abs num baiwei temp 100 temp temp baiwei 100 shiwei temp 10 gewei temp shiwei 10 num abs num if num 100 if sign 1 负数 L1602 char hang lie L1602 char hang lie 1 baiwei 48 L1602 char hang lie 2 shiwei 48 L1602 char hang lie 3 gewei 48 else if num 10 if sign 1 L1602 char hang lie 1 L1602 char hang lie 2 shiwei 48 L1602 char hang lie 3 gewei 48 else if sign 1 L1602 char hang lie 2 L1602 char hang lie 3 gewei 48 include 2402 h BASE DRIVE void DELAY unsigned int t while t 0 t IIC DRIVE void IICStart void SCL 0 DELAY 1 SDA 1 SCL 1 DELAY 1 SDA 0 DELAY 1 SCL 0 void IICStop void SDA 0 SCL 1 DELAY 1 SDA 1 DELAY 1 SCL 0 void SEND0 void SDA 0 SCL 1 DELAY 1 SCL 0 void SEND1 void SDA 1 DELAY 1 SCL 1 DELAY 1 SCL 0 bit Check Ack void unsigned char errtime 250 DELAY 1 SCL 1 DELAY 1 CY SDA while CY errtime CY SDA if errtime IICStop return 1 DELAY 1 SCL 0 return 0 void Write byte unsigned char dat unsigned char i for i 0 i 8 i if dat i else SEND0 unsigned char Read byte void unsigned char i temp 0 for i 0 i 8 i SDA 1 SCL 1 DELAY 1 if SDA 1 temp temp 1 temp temp 0 x01 else temp temp unsigned char rdeeprom unsigned char addr unsigned char temp 0 bit flag 0 IICStart Write byte 0 xa0 Check Ack

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论