版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、综述对于酒后驾车行为的监督在人民的人身和财产安全中起着重要的作用。随着社会的发 展,气体传感器逐渐向着低功耗、多功能、集成化方向的发展,以便于更准确更方便的检 测出酒精浓度,更大程度上防范事故发生,因此,便携式酒精浓度检测仪具有十分广阔的 现实市场和潜在的市场要求。h前国际公认的酒后驾车的限定有两种,一种是酒后驾车,一种是酒醉驾车。根据我 国2003年的修订规定,当驾驶者每毫升血液屮酒精含量大于或等于0.2mg时,就会被认 定为酒后驾车;大于或等于0.8mg时,则会被认定为醉酒驾车。当驾驶者血液中酒精含量 达到80mg/100mi时,发生交通事故的儿率是血液中不含酒精时的2. 5倍;达到100
2、mg/100mg 时,发生交通事故的几率是血液屮不含酒精时的4. 7倍。即使在少量饮酒的状态下,交通 事故的危险也可达到未饮酒状态的2倍左右。木文设计的基于单片机的便携式酒精浓度检测仪以单片机和酒精传感器为核心,異有 lcd实吋显示浓度值的功能,不同颜色led彩灯显示酒精浓度的不同范围,从而判断司机 是否处于酒驾状态,如若酒驾则判断是酒后驾驶还是醉酒驾驶,一旦超过一定阈值即蜂鸣 器报警同时报警灯亮。而且还可以通过按键进行待机与检测功能随时切换,在待机时进行 简易计时,超过十分钟则自动进入休眠状态,可用硬件复位来唤醒单片机。本设计采用c 语言來实现其软件功能。该仪器硬件电路设计简单、软件功能完善
3、、灵敏度高、工作性能 好,并且具有尺寸小、方便携带的优点。1方案论证1.1方案设计与分析本文设计的便携式酒精浓度测试仪具有以下特点:(1)数据采集系统以at89s52单片机为控制核心,外围电路带有lcd显示以及键盘 电路,无需其他计算机,用户就可以与其进行交互工作,完成数据的采集、存储、计算、 分析,显示,休眠等功能。其中显示功能如下:a. 酒精含量20mg/100ml时,安全灯(绿色lk)灯)亮;b. 20mg/ml彡酒精含量彡80mg/ml吋,警告灯(黄色led灯)闪烁;c. 80mg/ml彡酒精含量时,危险灯(红色lh)灯)闪烁,蜂鸣器报警;本仪器酒精含量测试范围:0-190mg/100
4、inl,要求其测量精度优于0. 5%。(2)系统具有低功耗、方便携带、高性价比,低成本等特点。(3)从便携式的角度设计,系统成功使用了大屏幕lcd显示器以及小键盘。由单片 机系统控制键盘和lcd显示来实现人机交互操作,界面友好。(4)软件系统采用c语言编写,既兼顾实时性处理的要求又能很方便地进行数据处阁1-1总体设计框阁本设计采用的是at89s52单片机,传感器则选用mq3酒精浓度传感器。系统将由 mq-3洒精浓度传感器输出的微弱电流经具奋放大滤波等功能的调理电路后,输入以模数 转换芯片adc0804为核心的转换电路转换为八位数字信号,再由单片机进行处理,最终 送入lcd液晶显示屏显示实时检测
5、的酒精浓度以及实现超值报警功能,通过判断酒精浓度 范围,实现洒后驾驶和醉洒驾驶的判断。系统上电后自动进入待机状态,在工作吋可以随 时通过按键控制进入待机状态,待机状态中系统不进行酒精浓度采集、显示和报警,而是 给传感器预热并显示十分钟以内的简易计时,让使用荠大致掌握预热时间。待机状态中也 可随时通过按键进入工作状态。2信号采集与放大的硬件设计2.1酒精浓度传感器的选择气体传感器是气体检测系统的核心,通常安装在探测头内。探测头通过气体传感器对 气体样品进行调理,通常包括滤除杂质和干扰气体、干燥或制冷处理、样品抽吸,甚至对 样品进行化学处理,以便化学传感器进行更快速地测量人在选择传感器的时候,一定
6、要考虑到稳定性、灵敏度、选择性和抗腐蚀性,mq3酒精 传感器具有很高的灵敏度、良好的选择性、长期的使用寿命和可靠的稳定性,所以本系统 选择mq3型酒精传感器。2. 2采集信号与放大电路图mq-3气体传感器有6个针状管脚,其屮4个用于信号取出,2个用于提供加热电流. lm393是由两个独立的、高精度电压比较器组成的集成电路,失调电压低,最低为2.0 mv, 专为获得宽电压范围、单电源供电而设计,也可以用双电源供电,电源电流低.即使采用 单电源供电,比较器的共模输入电压范围也接近低电平。lm393被设计成能直接连接ttl 和cmos,当用双电源供电吋,它能兼容mos逻辑电路,这是低功耗lm393相
7、较于标准比较器 的独特优势2。图2-1 mq-3酒精浓度传感器采集信号与放大电路图mq-3酒精浓度传感器探头感知到酒精气体,mq3开始起作用,输出的微弱电流送入由 lm393运算放大器和电阻电容构成的调理电路,使信号放大并滤去杂波,经放大滤波后有 out输出。模拟信号输出端口能输出0到+vcc (+5v)的模拟信号,当检测的酒精浓度越 大时输出电压越高。此端口接入adc0804的6号引脚,实现ad转换3。3 ad转换硬件设计3. 1 ad转换器的选择及介绍a/d转换其的主要技术指标包括分辨率(位数)、量化误差、转换精度和转换时间u。 根据木文设计的技术参数要求:测量精度优于0.5%。从精度方面
8、考虑方案如下:方案一:用8位的a/d转换器,其测量精度为0.39%方案二:用12位的a/d转换器,其测量精度为0.02%从测量精度的方面考虑都符合要求。从a / d转换器的分类方面考虑方案如下:1、逐次比较式a/d转换器:转换时间一般在ns级,转换精度一般在0. 1 %上下, 适用于一般场合。2、积分式a/d转换器:其核心部件是积分器,因此转换时间一般在ms级或更长, 但抗干扰性能强,转换精度可达0.01%或更高。适于数字电压表类仪器釆用。3、并行比较式乂称闪烁式:采用并行比较,其转换时间可达ns级,但抗干扰性能较差,由于工艺限制,其分辨率一般不高于8位。可用于数字示波器等要求转换速度较快的
9、仪器中。4、改进型是在上述某种形式a/d转换器的基础上,为满足某项高性能指标而改进或 复合而成的。例如余数比较式即是在逐次比较式的基础上加以改进,使其在保持原有较高 转换速率的前提下精度可达0. 01 %以上。基于以上比较,综合性价比,选择8为主次逼近式a/d转换器:adc0809和adc0804。adc0809的功能是将输入模拟量转换为与其成正比例的数字量,它具有8路模拟输入端 门,地址线可决定对哪一路模拟输入做ad转换.adc0804的功能与adc0809基本相同,不同点在于它有一路输入。对于本设计的要求是有一路的输入信号,所以从性价比的方面考虑选择adc0804更优。3.2本设计中adc
10、0804外硬件连接gnd,|_ i 1 !kmpfvccl-vctr磉laji rrgnd.l| 卜gndhvccgnd10kri6cz1'10knicsvcrd(1krwrdrotvkixd»1ltrdr2v1n(+1db3vinudb4aonddb5vrddh6gnddb7a1xw40 12 3 4 5 6 7-v一、一 7-7?cikd图3-1 adc0804外围电路连接3.3本设计中ad转换软件实现 3.3. 1 adg程序流程图图3-2 adc程序流程图单片机对adc进行初始化,使其能进入正常工作状态,通过判断adc转换判断标志eoc, 看其是否转换完毕,如果没有,
11、则继续判断,如若完成则将adc转换的数据由单片机读取 并计算,然后进入下一环节。3. 3. 2 adc转换原则及程序转换原则:acd0804有八位数据输出口,即转换精度为256,它将最高值分为255份, 当得到一个转换数据时,用最大值除以255,再乘以该数据值便是最终转换值。ad转换子函数分析: void ad ()wr=0;/将wr拉低,让芯片开始读6、7号引脚电压值delay (1);/延吋约一毫秒,让芯片忙完wr = 1;/将wr拉高,上升沿到来时,ad转换开始delay (5);/软件延时约五毫秒,等待ad转换完成p3=0xff;/将p3门全部拉高,等待测试数据delay (1);/延
12、时一会,避免紊乱rd:0;/将rd拉低,芯片送出数据delay (1);/延时约一毫秒,让p3门tcmp=p3; rd=l;/将数踞存入temp /将rd拉高4单片机最小系统模块设计cpu最小系统是单片机运行工作起来所必需的最基本电路组成。它包括电源电路、时 钟电路、复位电路。最小硬件电路组成见图4-1。阁4-1最小系统电路阁4. 1at89s52 简介本设计以at89s52单片机为控制核心。单片机也就是mcu,即微控制单元。at89s52是 低功耗、高性能、采用cmos工艺的8位单片机,其片内具有8kb的可在线编程的wash存 储器,该单片机采用了atmel公司的高密度、非易失性存储器技术,
13、与工业标准型80c51单 片机的指令系统和引脚完全兼容,它能以3v的超低电压工作,晶振吋钟最高可达24mhz。 通用的8位cpu与在线可编程hash集成在一块芯片上,从而使at89s52功能更加完善,应 用更加灵活;具有较高的性能价格比,使其在嵌入式控制系统中有着广泛的应用前景5。 4.2复位电路设计vccs1sw-pb18.x2reseto-r1410kc2+100ufgnd图4-2复位电路电路图单片机复位的两种基木形式:上电复位和rst按键复位。本设计采用rst按键复位。在复位电路的设计中,要选择合适的元器件参数,电阻的 阻值不宜过大或者过小,过人使得rst不可能获得高电平,过小也不能起到
14、限流作用。另 外电容容值也应该合适,要保证放电吋,rst引脚上的高电平也能保持两个机器周期以上 的高电平。4. 3晶振电路设计p30/rxdp31/txdp32/ixt0p33/int1p34/t0p35zt1xix2阁4-3品振电路电路阁本系统中为了尽量降低功耗的原则,采用了内部时钟方式。晶振全称为晶体振荡器(英 文crystal oscillators),其作用在于产生原始的时钟频率。内部时钟方式的电路实现 方法是在xtal1和xtal2引脚外接石英晶体,与单片机片内震荡电路形成震荡回路,图屮 电容c3和c4的容值为22pf,它们的作用是加快起振和稳定频率。5显示模块软硬件设计5.1lcd
15、1602 简介lcd 1602每行可以输出16个字符,可以显示两行,故称1602,它不带中文字库,故 只能显示数字、字母和普通字符。1602字符型lcd通常有14条引脚线或16条引脚线的 lcd,多出来的2条线是背光电源线。在本设计中不检测液晶的忙与闲,用前而对待adc0804 的方法,用软件延时來等待液晶的忙操作时间。液晶显示输出d0到d7 u接p0.0到p0.7,单独使用一个口,另外还要接上10k上拉 电阻来提高p0 口带负载能力。当处于读状态时,rs处于低脉冲,r/w为高脉冲,e为高脉冲,d(fd7=状态字当处于读数据时,rs为高脉冲,r/w为高脉冲,e为高脉冲,d(n)7=数据。当处于
16、写指令吋,rs为低脉冲,r/w为低脉冲,1)01)7=指令码,?.=高脉冲。当处于写数据时,rs为高脉冲,r/w为低脉冲,e为高脉冲,d0d7=数据。5.2本设计中lcd1602的硬件连接eat>p rp/p37 tvkp36 l£ prdo psemdo dld2d"p4d5 d6d7"pr112 34567s9图5-1 lcd 1602硬件连接图5.3液晶写命令子函数和写数据子函数程序分析在初始化函数void init () *,已将r/w拉低(对应lcden=0;语句),即只 对液晶进行写操作,不读液晶状态。之前有位定义 sbit lcdrs=p2a5
17、; sbit lcdrw=p2a6; sbit lcden=p2a7;写命令函数各语句分析:void write_com(uchar com) lcdrs=0; /将rs拉低,对指令操作,上电时是默认高电平 p0=com; /对p0赋值,该值是对应命令码,com为形参 delay (5) ;/延吋约五毫秒lcden=l; /e拉高,让液晶读p0 口,写入对应命令码delay (5);/延时约五毫秒,让液品忙完再对其操作,防止数据丢失lcden=0; /将 e 拉低写数据函数各语句分析:void write com(uchar da) lcdrs=l; /将rs拉低高(读写数据),说明对数据操作
18、 p0=da;/对p0赋值,该值是要写入的数据,da为形参delay (5);/延时约五毫秒lcden=l; /e拉高,让液晶读pom,写入数据delay(5);/延时约五毫秒,让液晶忙完再对其操作,防止数据丢失lcdcn=o; /将 e 拉低值得注意的是,在写数据的操作中,写入的都是字符ascii码,例如想写1,让液晶 在某处显 1,可写 write data ( 1);或者 write data (0x30+1)。5.4本设计中用的液晶指令介绍一些指令码的介绍:0x38:液晶初始化指令,让液晶按每行显示16个字符,显示两行,并.每个字符显 示处的点阵为5x7;oxoc:不显示光标,光标不闪
19、烁;0x06:在写入一个数据后地址自动加一,显示不移动;1即0x01:清屏指令,即将液晶内部存储数据清楚,地址指针指向零;0x80+:设置写入数据的地址,所加的就是对应地址。5.5字符串显示和数据实时更新的实现1) 写字符串子程序:void write_str(uchar 氺p)while (*p) write_data(*p+);这里灵巧的应用了数组指针,比传统的for嵌套循环写入方便很多。用while(*p) 自动检测是否写完,当写完后指针变为零,跳出循环。如想写入"ac value:",只需先定义 数组 uchar code str=ac value:",再
20、写语句 write_str(str);写完后指针变为零, 自动结束。2) 数据实时更新的实现方法,检测时不断调用显示子函数,display();显示函数如t:void displayouint value;/定义局部变量valueuchar a,b,c;/定义局部变量a、b、cvalue=3.92*temp;/获得value值,它是以ppm为单位a=value/100;/a 为 value 的百位b=value%100/10;/b 为 value 的十位c=value%10;/c 为 value 的个位write_com(0x80+0x40+4); /将数据写在第二行,第五个字符处 write
21、_data(0x30+a);/在第二行,第五个字符处写入value百位write_com(0x80+0x40+5);/将数据写在第二行,第六个字符处write_data(0x30+b);/在第二行,第六个字符处写入value十位write_com(0x80+0x40+6);/将数据写在第二行,第七个字符处write_data(0x30+c);/在第二行,第七个字符处写入value个位在循环语句中不断调用ad转换程序,ad();,又不断调用显示函数,数据就能实时检 测更新。在待机时,循环程序中不断执行语句:write_com(0x80+6); /将数据写在第一行,第七个字符处 wri te_da
22、ta( table fa);"在第一行,第七个字符处写入时钟的分钟write_com(0x80+7); /将数据写在第一行,第八个字符处write_data(tableb); /在第一行,第八个字符处写入闪烁的冒号write_com(0x80+8); /将数据写在第一行,第九个字符处write_data(tab 1 ec); /在第一行,第九个字符处写入时钟的秒钟十位write_com(0x80+9); /将数据写在第一行,第十个字符处write_data(table d); /在第一行,第十个字符处写入时钟的秒钟个位由于是在不断循环调用,即不断数据刷新,而a、b、c、d的改变是通过
23、定时器零实现 的。6其它外围设备软硬件设计6.1报警电路软硬设计 6.1.1硬件部分设计vcci*didadblk,ri1 470ri2#70pl.or23r24470470pijpl.2pl.3pl.4led图6-1报警电路将蜂鸣器的正端接电源正,负端接pl.o。低电平冇效,蜂鸣器响起。da, db, dc为检测报警指示灯。da为浓度不超限的指示灯,db与dc分别为酒后驾驶指示灯和醉酒驾驶指示灯,低电平有效。当酒精含量20mg/100ml时,安全灯(绿色lk)灯)亮;当20mg/ml彡酒精含量彡80mg/ml.吋,警告灯(黄色led灯)闪烁;当80mg/ml彡酒精含量时,危险灯(红色led灯
24、)闪烁,蜂鸣器报警。6.1.2软件部分设计/定义蜂鸣器/定义报警灯位定义语句: sbit beep=pl 0; sbit da=pl 2; sbit db=pc3; sbit dc=pl4:用程序让蜂鸣器响:beep=o;/低电平输出吋,蜂鸣器打开用程序让蜂鸣器关闭:beep=l;/高电平输出吋,蜂鸣器关闭用程序将da, db, dc点亮:da =0;dc =0;/低电平输出吋,da, db,dc点亮用程序将da, db,dc熄火:da =1;db =1;dc =1;/高电平输出吋,da,db,dc熄火6.2待机指示灯软硬件设计6.2.1硬件部分设计vccdi4701)1.1图6-2待机指示灯
25、电路发光二极管d1为待机指示灯,它的正端接电源正,负端与470k电阻相连再接上p1. 1。低电平有效,d1点亮,开始待机。电阻起到限流电阻的作用。6. 2.2软件部分设计位定义语句:sbit dl=pri;/待机指示灯用程序将d1点亮:dl=0;/低电平输出时,d1点亮用程序将d1熄灭:dl=l;/高电平输出时,d1熄灭6.3按键软硬件设计6.3.1硬件部分设计s2和s3分别和单片机的p2.1和p2.0,再与gnd相接。s2为待机控制按键。s3为检 测控制按键。r18和r19与vcc相连再并接在开关前,是为了在松手时,使i/o获得稳定 的高电平。6. 3.2软件部分设计位定义语句:sbitkl
26、=p2a0; /s3 位定义 sbit k2=p2al; /s2 位定义 s2按键检测:if(kl=o)/检测按键是否按下delay(5); /消抖if(kl=o) /再检测按键是否按下flag=o;/写入耍进行的操作,这里是将标志数flag置零while(!kl); /松手检测s3按键检测:if(k2=0)/检测按键是否按下delay(5); /消抖if(k2=0) /再检测按键是否按下flag=l;/写入耍进行的操作,这里是将标志数flag置一while(!k2); /松手检测6.4电源电路如上图为本设计的电源电路。接入220v交流电后从变压器输出12v交变电压,再经 过桥式整流电路整流,
27、输出直流电。稳压芯片7805使电压稳定在5v, c5和c6为电解电容起到滤除杂波的作用6。s4为紧锁开关,电源总开关。d4与r17串联,跨接在vcc与gnd之间,作为电源指示灯。6.5休眠(空闲)状态的设定当单片机进入掉电模式时,外部晶振停振、cpu、定时器、串行口全部停止工作,只 有外部屮断继续工作。使单片机进入休眠模式的指令将成为休眠前单片机执行的最后一条 指令,进入休眠模式后,芯片中程序未涉及到的数据存储器和特殊功能寄存器中的数据都 将保持原值。可由外部中断低电平触发或由下降沿触发中断或者硬件复位模式换醒单片 机,需要注意的是,使用中断唤醒单片机时,程序从原来停止处继续运行,当使用硬件复
28、 位唤醒单片机时,程序将从头开始执行。本文屮则采用硬件复位唤醒单片机。让单片机进入休眠(空闲)模式的目的是为了降低系统的功耗,例如在正常使用万用 表时表内部的单片机处于正常工作模式,当不用时,又忘记了关掉万用表的电源,大多数 表在等待数分钟后,若没有人为操作,它便会自动将液晶显示关闭,以降低系统功耗,通 常类似这种功能的实现就是使用了单片机的空闲模式或是掉电模式。以stc89系列单片机 为例,当单片机正常工作时的功耗通常为4ma7ma,进入空闲模式时其功耗降至2ma,当 进入掉电模式吋功耗可降至0. 1 ua以下。所以采用休眠对于低功耗是非常重要的。7软件设计7. 1主程序流程为了能让主函数分
29、清是执行执行待机程序还是检测程序报警程序,引进标志数flag。 当flag为1时执行待机程序;当flag为0时执行检测报警程序.在初始化函数中先将flag 置1,上电后则进入待机状态。按下kl后使flag置0,执行检测报警程序。按键k2后使 flag置1,又执行待机程序,kl、k2均为开关。下图为系统执行检测功能和待机功能的选择流程图:图7-2待机与检测程序流程图7. 3定时器与定时器中断本设计在待机时,执行一个简易的十分钟以内的计时程序。这时用定时器零产生屮断, 让其计时。定时器是独立与cpu的单独部件,与软件延时比起来,它不占用程序时间,定 时很精确。当时间到一定时,它就产生定时中断,让主
30、程序让执行定时器中断函数。设置tmod=0x01;使定时器零工作在方式一,工作方式一是十六位不能自动重装初 值的方式,所以在进入定时器屮断函数后要重新装初值m。心得与体会木文给出了基于单片机的便携式酒精浓度检测仪的设计方法,设计过程包括了硬件电 路设计和软件程序的编写两部分。硬件电路部分结构简单、使用方便、灵活性强,适合大 众化使用。软件部分采用模块化设计思想,各个子程序的功能相对独立,便于调试和修改。木论文设计的便携式酒精浓度检测仪可应用在实际生活中,用于警方可以监督驾驶员 的醉酒行为,亦可以用在特定场合,例如酒精生产工厂等,进行酒精浓度的检测,防止恶 性爆炸事件的发生,减少大型事故的发生,
31、避免人员伤亡,从而保证丫人民的生命和财产 安全,对人们的生活非常重要,所以此便携式酒精浓度检测仪具有实际意义,可广泛应用 在居民生产生活中。本设计编程采用c语言,本人非常认真地且独立地完成了本课程设计的全部工作,有 电路图的设计,原理图的绘制,程序的编写与调试、论文的撰写。在设计中查过许多资料, 请教过老师和同学同时在设计过程中也学到了许多在书木上学不到的东丙的知识,通过此 次课程设计很好的锻炼了自己的学习能力。致谢本次课程设计设计是在指导老师李雅梅老师的悉心指导下,还有许多同学的帮助下完 成的。在设计的过程中李老师严谨的治学态度,优秀的学术底蕴,孜孜不悔的教学精神, 平易近人的人格魅力,对我
32、影响很大,在她的细心指导下我顺利的完成了本次的课程设汁。此外,我周围的同学也在我为一些问题困惑时,给予了我很大的帮助,教会了我许多 知识,例如绘图软件的应用等等。在此向我向李老师表示深深地感谢!也对所冇帮助过我课程设计的人在此一并表示感 谢!参考文献1 岳睿.警用呼气式酒精传感器的研宄进展j.化学传感器,2006, 26(3): 6-11.2 祝诗平.传感器与检测技术m.北京:北京大学出版社,2006.3 袁剑蓉,金建祥,张渝晖.一种高精度、低成本、多量程的a/d转换技术j.自动化仪 表,2006, 8(08) :22-25.4 李建忠.单片机原理及应用m.西安电子科技大学出版社,2008.5
33、 王幸之.at89系列单片机原理与接口技术m.北京:北京航空航天大学出版社,2004.6 李振梅.模拟电子技术基础m.北京:高等教育出版社,2010.7 邱力.c语言程序没计m.北京:清华大学出版社,2004.8 郭天祥.新概念51单片机c语言教程m.北京:电子工业出版社,2009.jnd附录一硬件设计原理-c3vcch(ind-i卜vccixmtaolt(ini)iiikcjlr1601(svcr芯clkrn贈(wuuiimkdk卿,iwvlsi)dwa(idiwviefi1>w、gsdikntr.r-ie:tigsd(vlkl) lu) i.uj i1unrsv, i;ipiop1k
34、>mlpoipl?p1i?f1jpo)p14pwpljwbp16p06fitpippjorxu1-k30w1wivaws52mivrip2)f1+h)p24pj>tlp2sxiitlvpkx2ran? wkp16 alj jwrfshtifnlc讀fond入virbn附录二程序/木木木木木木木木木木木greg52 */#include<reg52. h>vjx v!,v!,vjx v!,vjx v!,vjx v!,vjx v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,
35、v!,v!,v!,v!,v!,v!,v!,'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1、'1
36、、'1、'1、/* 、'、【v !/7> f l « f/#define uint unsigned int#define uchar unsigned char! k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x
37、 k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x kl/iy?x/a r/r| 1 / * i rfsbit beep=pl 0;sbit dl=prisbit da=pl 2sbit db=pl 3sbit dc=pl 4sbit kl=p2 0sbit k2=p2"lsbit lcdrs=p2 5sbit l
38、cdrw=p2 6sbit lcden=p2 7sbit cs=pl 5sbit rd=pl 6sbit wr=p17if/tx zfx /氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺/uchar code str=ac value:;uchar code stroe=,zppmz,;uchar code table="0123456789:"vjx v!,v!,vjx v!,vjx v!,vjx v!,vjx v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!
39、,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,v!,'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、'i、
40、'i、'i、'i、'i、/氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺g#3¥4$胃氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺/uchar flag,temp, a, b, c, d, tt;lf/tx zfx /void init ();void delay (uint); void write_str(uchar *) void write_com(uchar); void write_ data(uchar); void ad ();void display0;/氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺了,|hj=j氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺
41、氺氺氺氺氺氺/初始化函数/有无符号整型形参的延吋函数;/向液晶写入字符串的函数/液晶写命令函数 /液晶写数据函数/ad转换函数/酒精浓度显示函数! k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k
42、»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x k»x kl/i/氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺/void main()init(); while (1)/调用初始化函数if(kl=o)/检测按键是否按下delay(5); if (kl=o)flag=o; while(!kl);if(k2=0)delay ; if(k2=0)fla
43、g=l; while (!k2);while (flag=o)/消抖,将程序的执行暂停五毫秒 /再检测按键是否按下/写入要进行的操作,这里是将标志数flag置零 /松手检测如果kl取反/按键检测/消抖,将程序的执行暂停五毫秒 /再检测按键是否按下/写入要进行的操作,这里是将标志数flag置一 /松手检测/执行检测报警程序tro二0;/采用定时器零产生中断dl=l;/发光二极管1为高电平,待机指示灯为关状态write_com(l) ;/清屏操作writc_com(0x80) ; /液晶初始化指令,让液晶按每行显示16个字 显不两frwrite_str (str); writecom(0x80+0
44、x40+9); write_str(stro); while(flag=o)ad();display ();if(temp>=20)if(20<=temp<=80)/为酒后驾驶beep=0;db=o;if (tcmp>=80)/为醉酒驾驶beep=0;dc=o; /红灯亮起elsebeep=l;/未饮酒ixda=o;/绿灯亮起if(kl=o)/按键检测delay ; if(kl=o)flag=o; while(!kl);if(k2=0)/按键检测delay (5); if(k2=0)flag=l; while (!k2);while (flag=l)/执行待机程序bee
45、p=l;da=ldb=l/检测指不幻为关状态dc=ltt=oa二 0;b=10;c=0;d=0;write_com(l);dl=0; 7/待机指示灯为开状态 th0= (65536-50000)/256; tl0= (65536-50000)%256;tro二1;while (flag=l)write_com(0x80+6) ; /将数据写在第一行,第七个字符处 write_data(tablea) ;/在第一行,第七个字符处写入时钟的分钟 write_com(0x80+7) ;/将数据写在第一行,第八个字符处write_data(tableb) ;/在第一行,第八个字符处写入闪烁的冒号wri
46、te_com(0x80+8) ;/将数据写在第一行,第九个字符处write_data(tablec) ;/在第一行,第九个字符处写入时钟的秒钟十位 write_com(0x80+9) ;/将数据写在第一行,第十个字符处write_data(tabled) ;/在第一行,第十个字符处写入时钟的秒钟个位if (kl=0)/按键检测tdelay ;if(kl=o)flag=0;while(!kl); iiif(k2=0)delay ;if(k2=0) flag=l; while (!k2);/按键检测、j'、j'、j'、j'、j'、j'、j'、
47、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、i#t%,!、/氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺i?i (氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺/void i
48、nit()lcdrw=0; lcden二0;wri te_com(0x38) ;/液晶初始化指令,让液晶按每行显示16个字符,显示 两行,并且每个字符显示处的点阵为5x7; _write_com(0x0c) ; /不显示光标,光标不闪烁; write_com(0x06) ; /在写入一个数据后地址自动加一,显示不移动 cs 二0;flag=l; b=10;tm0d=0x01; /定时器零工作方式为方式一 ea:1;rto=1;six six six six six six six six six six six six six six six six six six six six six s
49、ix six six six six six six six six six six six six six six six six six six six/ <1/氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺 f ji 氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺/void delay(uint z)for (x=110;x>0;x) for (y=z;y>0;y); _void write_str(uchar *p) / 写字符串子程序 _ whi le(*p)write_data(*p+) ; /用while(*p)自动检测是否写完,当写完后指针变为零,跳出循环 / / /
50、4、/氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺g氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺/void write_com(uchar com) _lcdrs=0;/将rs拉低,说明对指令操作,上电时是默认高电平p0=com;/对p0赋值,该值是对应命令码,com为形参delay (5);/延时约五毫秒lcden=l;/e拉高,让液晶读p0 口,写入对应命令码delay(5);/延时约五毫秒,让液晶忙完再对其操作,防止数据丢失lcden=0;/将 e 拉低、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j'、j
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东科贸职业学院《信号检测与估计》2023-2024学年第一学期期末试卷
- 广东交通职业技术学院《钢筋混凝土结构设计原理》2023-2024学年第一学期期末试卷
- 广东技术师范大学《生物化学及实验》2023-2024学年第一学期期末试卷
- 广东海洋大学《平面钢筋识图》2023-2024学年第一学期期末试卷
- 广东工商职业技术大学《空间设计》2023-2024学年第一学期期末试卷
- 广东潮州卫生健康职业学院《化工制图》2023-2024学年第一学期期末试卷
- 品德假期安全生活课件
- 小学生窦娥的课件
- 广安职业技术学院《英语(二)》2023-2024学年第一学期期末试卷
- 赣州职业技术学院《组织行为学A》2023-2024学年第一学期期末试卷
- 2024年时事政治试题【有答案】
- 2024年信息系统项目管理师(综合知识、案例分析、论文)合卷软件资格考试(高级)试题与参考答案
- 2024年认证行业法律法规及认证基础知识
- MT 285-1992缝管锚杆
- GB 18613-2020 电动机能效限定值及能效等级
- 旅游专业旅游概论试题有答案
- 3、起重工、焊工、电工安全技术交底
- 水稻幼穗分化八个时期的划分表
- 卡特彼勒生产体系手册(PDF62页)
- 消防工程物业移交书
- 支部委员候选人表
评论
0/150
提交评论