c语言的一道题

Python028

c语言的一道题,第1张

这些以身试毒的奴隶,就是一堆bit,1到N这些数字对应酒的编号,所有bit0(化成二进制,最低位是0bit)是1的数字,都给一个人喝;所有bit1是1的数字,依次类推,这样到20小时后,所有中毒奴隶代表的bit组成的数,就是有毒那瓶酒。

如果酒的数量恰好是2的整数次幂,拿走编号最大的那瓶,剩下的按同样方法做。

例:

3瓶酒,要2个人,编号为0和1,0喝最低位是1的酒,即1号瓶和3号瓶

1喝bit1是1的酒,即2号瓶喝3号瓶

这样,结果显而易见,最终中毒的bit是1,没中毒的是0,这个二进制数就是要找的那瓶酒的编号。

一、要选词,先读题

做选词填空题的本质依然是要先通过快速阅读文段,通过划空处前后文字表述所提供的信息,明确所填词项的含义。

二、选项分析要“联想”

(一)拆分语素,重新组词,准确理解该词项的含义

我们先来学习如何进行语素拆分和重新组词。

一日千里:“一日”即一天,“千里”表示路程远。将词语拆分成两个新词之后,我们可以得到“一天的时间和距离遥远的路程”两个层面的意思,简而言之就是一天内走了很长的路,可以理解为走得快。该词含义原形容马跑得很快,后比喻进展极快。

一步登天:“登上”“攀登”,一步就登上了天,可以理解为到达了很高的地方、地步。该词含义比喻一下子就达到很高的境界或程度。有时也用来比喻人突然得志,爬上高位。

一劳永逸:“劳动”“劳作”“永远”“永久”“安逸”,可以理解为劳动了一次就能永久安逸。该词含义劳苦一次就可以永远安逸、不再费力了。

(二)通过语素分析、联系新组词的含义,我们能够对词语的含义有一个大概的掌握,进而能够更清晰的找出空义和词项之间的差异与联系,在解题时更进一步避免主观臆断。接下来为我们通过题目对“语素联想”的分析方法进行实践。

【例1】在人工智能研究热潮中,国内外已形成________的局面,但总体上人工智能还处于发展的初级阶段。人们对于智能的本质和机理的认识还不够深刻、全面,尚未形成完善的理论体系。如果没有人工智能基础研究的支撑,应用层面上的技术创新和产业创新都将是________。

填入画横线部分最恰当的一项是:

A.千帆竞发 无源之水

B.百家争鸣 昙花一现

C.龙争虎斗 空中楼阁

D.星火燎原 纸上谈兵

【答案】A。解析:第一空,由横线前的“热潮”可知,此处强调的是人工智能的研究很热,发展势头很好。“千帆竞发”形容事物蓬勃向上,生机勃勃地向前发展。“百家争鸣”比喻艺术及科学的不同派别及风格自由发展与争论。“龙争虎斗”形容斗争或竞赛很激烈。“星火燎原”比喻新生事物开始时力量虽然很小,但有旺盛的生命力,前途无限。据词义排除B、C。第二空,“无源之水”比喻没有基础的事物。“纸上谈兵”比喻空谈理论,不能解决实际问题,也比喻空谈不能成为现实。文段说的是基础研究和应用创新的关系,缺少了基础研究这个“源”的支撑,应用创新也就失去了根基。“无源之水”填入更符合句意,排除D。故本题选A。

在食品工业、酿酒行业、石化和工矿企业、环境检测、公安交通管理、社会公用事业等一些国民经济生产和人们工作生活的领域和场合中,常常需要检测特定环境中酒精气体的浓度,以确保工厂企业环境安全和人民生命财产安全[1-4]。如监控酒精生产车间和石化厂的酒精浓度,可以避免工厂起火和爆炸事故的发生;监测工矿企业场地的酒精浓度,能避免工作人员出现酒精中毒等恶性事故;检测司机体内酒精含量,可以防止驾驶人员酒后驾车,减少恶性交通事故的发生。因此,研制酒精气体浓度检测仪具有十分广阔的现实和潜在的市场需求,并具有十分重要的意义。传统的酒精气体检测仪因传感器性能、电路设计、数据处理算法等原因,存在着气体选择性不高、抗干扰性能差、智能化程度低、仪器操作复杂、无法实时保存和调看数据等突出问题[3-4]。鉴于此,笔者设计和研制了一种无线智能酒精浓度探测仪,弥补了传统酒精检测仪器的缺点和不足。

1 系统总体方案

该酒精浓度探测仪由发送端和接收端两部分组成,其原理框图分别如图1和图2所示。发送端主要包括酒精浓度传感器与A/D转换电路、STC90C52RC单片机、浓度阈值设置与声音报警电路、语音播报电路、LCD显示电路和无线收发电路六部分;接收端由无线收发电路、STC90C52RC单片机、数据接口通信电路和上位计算机组成。

2 系统硬件电路设计

2.1 传感器电路与A/D转换电路

TGS2620为日本费加罗(FIGARO)公司生产的一款可以探测气体中酒精浓度的半导体气体传感器,具有灵敏度高、功耗低、寿命长、成本低等特点[5-6]。其电路连接如图3所示,其中,RH为加热器电阻,室温下时为83±8 Ω;RS为传感器电阻,其阻值和还原性气体浓度之间的数学关系为:

通过检测VRL就可以确定出待测气体浓度C。

电路中运放OP07接成电压跟随器形式,对传感器和后级电路进行隔离,减小电源波动和外界因素对采样数据的影响。ICL7660是MAXIM公司生产的小功率极性反转电源转换器,作用是将+5 V电源变换成-5 V电源为OP07供电。其中,CC2采用漏电小、介质损耗低的10 μF钽电容,以提高电源转换效率。TLC1549是TI公司生产的10位分辨率逐次逼近型ADC芯片,具有自动采样和保持、可按比例量程校准转换范围、抗噪声干扰功能,在满刻度时总误差最大仅为±1 LSB。

2.2 LCD显示、阈值设置与声音报警电路

16×2个字符液晶显示模块DM-162显示报警阈值和酒精浓度值。为了减少单片机I/O口的使用数量和简化电路结构,采用间接控制(4位数据总线)方式,接口电路如图4上部分所示。初始化时,需写入28H指令码将8位总线转为4位数据接口方式。管脚BLA、BLK和VL分别是液晶背光源正极、负极和显示对比度调整端,RS、E分别是寄存器选择端、读/写信号线和使能端。

酒精浓度阈值设置和声音报警电路如图4下部分所示。当设置键S1按下时,进入阈值设置(初始阈值为500 ppm)界面,再按下键S2或S3,对阈值作增加或减小操作,步长为20 ppm。阈值设置好后写入STC90C52RC单片机片内5 KB EEPROM的第一扇区2000H和2001H地址中,使系统重启不必重新设置。若酒精浓度值大于阈值,将P0.7口线置为低电平,三极管8550驱动蜂鸣器发声音报警。

2.3 语音播报电路

采用华邦(Winbond)公司的ISD2560语音录放集成芯片作酒精浓度值播放,电路如图5所示。话筒采用差分形式接入到片内前置放大器的MIC端和MIC REF端,以抵消噪声和提高输入共模抑制比。扬声器接成双端输出形式,输出功率为单端用法时功率的4倍。单片机的P2口、P3.0和P3.1口线分别与地址线A0~A9相连,用来设定ISD2560片内480 KB EEPROM(地址为0H~257H)中存储语音段的起始地址,录音和放音功能均从该起始地址开始,录音过程中信息段地址自动增加。本系统在ISD2560中需录入语音信息有:“当前酒精浓度值为”、“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”、“十”、“百”、“千”、“点”、“ppm(浓度单位)”。由于ISD2560的语音录放时间为60 s,按每秒3个汉字计算,则可录放180个汉字,因此满足播报要求。此外,通过P3.0、P3.1和P2.0~P2.6口线可以配置ISD2560的操作模式[7-8](地址为300H~3FFH)。P3.4~P3.6口线分别用来控制语音芯片的片选、芯片的开关、录音/放音模式选择。P3.2口用来判断芯片的存储空间是否已经填满或者信息存储是否溢出。由于录音时在每个信息段结尾处自动插入标志,当放音遇到该标志时产生宽约为12.5 ms的负脉冲。用P3.3口检测到此脉冲的上升沿后才播放另一段录音,避免语音播放不连续。

2.4 无线收发电路

系统采用NORDIC公司生产的工作于2.4~2.483 5 GHz的ISM频段的单片无线收发器芯片nRF24L01完成无线数据的收发工作,nRF24L01的最高传输速率为2 Mb/s,电路如图6所示。稳压芯片LM1117-3.3 V将5 V输入电压转换成3.3 V给nRF24L01供电。nRF24L01与单片机接口为四线SPI方式,CSN、SCK、MOSI、MISO管脚分别是SPI的片选使能线、时钟线、数据输入线、数据输出线。IRQ为中断信号线(低电平有效),接至单片机的外部中断管脚,单片机主要是通过该接口线与nRF24L01进行通信并判断数据接收和数据发送是否完成。CE为芯片的RX/TX模式选择线。IREF为参考电流输入端,通过22 kΩ电阻接地。管脚ANT1和ANT2给天线提供平衡的RF输出,通过后接的简单射频网络匹配电路获得单端50 Ω的阻抗输出。网络匹配电路在发送模式时阻止谐波,在接收模式时克制本地振荡漏出。VDD_PA管脚输出1.8 V电压,给片内功率放大器提供电源。

2.5 数据接口通信电路

接收端的计算机与单片机间的通信由串行USB接口集成电路CH340T完成,如图7所示。CH340T支持USB1.1或者USB2.0/USB3.0通信,具有仿真接口,并且可以升级外围串口设备,支持常用的MODEM联络信号,支持IRDA规范的SIR红外通信,提供RS23RS48RS422接口等功能。CH340T内置有独立的收发缓冲区,支持通信波特率50 b/s~2 Mb/s的单工、半双工、全双工等异步串行通信。图7中,在CH340T芯片的发送脚TXD上反接一个二极管1N4001,防止该引脚将电流倒灌到单片机;在接收引脚RXD上加一个300 Ω的限流电阻来防止单片机对CH340T倒灌电流;从而避免电流倒灌导致不需要供电工作的另一方芯片继续工作。

3 系统软件设计

3.1 下位机软件设计

下位机的程序开发和调试是在Keil μVision4集成开发环境下进行的,包括发送端和接收端的软件设计。

3.1.1 发送端软件设计

发送端软件流程如图8所示。单片机上电后进行系统初始化,完成单片机内部系统变量的初始化以及TLC154DM-16ISD2560和nRF24L01等外部设备的初始设置;然后延时大约5 min,预热传感器TGS2620,保证传感器工作正常;程序初始化结束后,系统进入监控状态。若报警阈值设置键按下,进入报警限设置模式;若录音键按下,进入录音模式;然后启动A/D转换获取采样数据,作滤波处理、标度变换和系统误差校正后得到被测酒精浓度值。该值与报警阈值比较,若结果是“大于”或“等于”,启动蜂鸣器发声程序,作声音报警,提示酒精浓度超标;接着该值在DM-162液晶模块上实时显示;最后判断放音键是否按下。若按下则根据酒精浓度值查找ISD2560中对应语音信息的存储地址开始放音;放音结束后,该值由nRF24L01发送程序发送到接收端;待发送完成后,采集、显示和发送新一轮的酒精浓度数据。

发送端软件应用了防脉冲干扰平均滤波法[9]对A/D采样数据作预处理。其原理是:连续采样K次,然后对这K个采样数据进行比较,去除其中的最大值和最小值,计算剩下的K-2个数据的算术平均值作为采样有效值。该方法融合了中位值滤波法和算术平均滤波法的优点,既可去掉脉动性质的干扰,又可消除偶然出现的脉冲性干扰引起的采样值偏差。为加快计算速度,设计数字滤波器时K=10。

为了提高系统的实时性,软件中采用分段线性插值法[10-11]作标度变换。过程如下:(1)按传感器TGS2620的标定曲线,将该曲线进行非等距分段(曲率变化大(小)时,样点距离取小(大)),选取各分段点坐标(VRLi,Ci)(i=0,1,…,M),其中:VRLi和Ci分别为不同样点时传感器输出电压值和对应浓度值;(2)计算相邻样点间的拟合直线斜率ki=(Ci+1-Ci)/(VRLi+1-VRLi)(i=0,1,…,M-1);(3)将M组坐标数据(VRLi,Ci)和对应斜率ki存储于单片机片内EEPROM的第二扇区(地址为2200H~23FFH)中;(4)每采集到一个电压值VRL即查询EEPROM表,找出VRL所在区间(VRLi,Ci)~(VRLi+1,Ci+1),取出该区间(VRLi,Ci)和ki数据,用线性插值公式C=Ci+ki(VRL-VRLi)计算出当前酒精浓度值C。

将采集到的N个样本数据(xi,yi)代入式(5)中即得到系数a、b的值,并存入单片机的内存单元中。系统测量时,将标度变换后的酒精浓度测量值x代入误差校正方程y=ax+b中,即可得到校正后的酒精浓度值y,从而达到消除系统误差的目的。

3.1.2 接收端软件设计

接收端单片机的软件流程如图9所示。接收端开机上电后,程序初始化设置nRF24L01和串口,然后进入监控场景。当nRF24L01接收到一帧完整的酒精浓度数据后,立即通过串口发送到上位机。接收端单片机与PC之间数据交互采用异步通信模式。独立波特率,串口协议设置为:波特率9 600 b/s,8 bit数据位,1 bit停止位,无校验位。

3.2 上位机软件设计

上位机用户界面采用通用的基于对象的程序设计语言Microsoft Visual Basic 6.0开发,实现酒精浓度数据的接收、显示和保存。软件用到了串行通信控件MSComm。MSComm控件是Microsoft公司提供的Windows下串行通信编程的ActiveX控件,通过对此控件的属性和事件进行相应的编程操作,即可轻松地实现串行通信。串口通信协议与接收端完全相同。上位机软件的程序流程如图10所示。

4 系统测试

为了检验本系统的测量性能,采用无水乙醇和纯净水按照一定体积比配制标准的酒精溶液作为被测量对象,测试结果如表1所示。其中:单位ppm=μg/mL表示1 mL酒精溶液中含酒精的质量。由测量结果可以看出,测试数据覆盖传感器的量程,测试最大相对误差小于±2%,优于同类设计产品[3-5]。

为了获得本仪器发送端与接收端的最大无错误率的通信距离,在室外进行了nRF24L01随距离的错误率(临界区间)测试实验,结果如表2所示。其中,每米的错误率是10次试验后计算得到的平均值。可见,nRF24L01的传输距离可达到100 m,略高于RFID、ZIGBEE和蓝牙等无线通信技术[12]。

5 主要技术指标

本仪器主要技术指标如下:(1)测量范围:50~5 000 ppm;(2)灵敏度(传感器电阻变化率):0.3~0.5;(3)测量精度:≤±2%;(4)传输距离:≤100 m;(5)工作电源:DC+5 V;(6)工作环境温度:-40 ℃~+70 ℃;(7)工作环境相对湿度:0~85%RH。

6 结束语

本文设计研制了一种基于STC90C52RC单片机、TGS2620酒精传感器和nRF24L01无线通信芯片的酒精浓度探测仪。该仪器现已投入到成都市某小型酿酒厂酒池的实际生产中。现场工作情况表明:系统运行正常,工作可靠;系统具有气体选择性和灵敏度高、稳定性好、智能化程度高、通信距离远、功耗低、抗工业干扰能力强、性价比优异等优点。该仪器可以应用于食品加工行业、工矿企业、石油和化学工业、环境检测与保护、社会公用事业、高空作业人员、公安交通管理(如酒后驾车、交通警察执法)等需要现场检测或无线遥测酒精气体浓度的场合中,市场应用前景广阔、推广价值较高。

参考文献

[1] 李海涛.基于QNX的远程车载酒驾智能监控系统[J].电子技术应用,2014,40(8):136-139.

[2] 宋晓宇,高国伟,李世川,等.基于单片机控制的酒精浓度检测系统的设计[J].传感器世界,2017,23(8):18-23.

[3] 俞露芦,陶大锦.基于单片机的酒精浓度检测仪的设计[J].微型机与应用,2014,33(22):34-36.

[4] 葛毓.基于GPRS/GPS的车载酒精检测和控制电路的设计[D].南昌:南昌大学,2010.

[5] Zhang Zhe,Tong Jin,Chen Donghui,et al. Electronic nose with an air sensor matrix for detecting beef freshness[J].Journal of Bionic Engineering,2008,5(1):67-73.

[6] FIGARO Group.General Information for TGS sensors[EB/OL].(2008-04-23)[2019-07-03].http://www.figarosensor.com/products/common(1104).pdf.

[7] 程可嘉,王振松,刘晓云.ISD2560在门禁系统语音播报中的应用[J].自动化技术与应用,2009,28(5):75-77.

[8] 胡珍玉.智能语音提示器系统设计[J].应用能源技术,2012,15(12):34-38.

[9] 张秀再,陈彭鑫,张光宇,等.河流水质实时监测系统[J].电子技术应用,2015,41(2):82-85.

[10] 梁晓雷.基于单片机的分段线性插值算法实现[J].电脑知识与技术,2012,8(21):5236-5243.

[11] 韩潇,曾立,占丰,等.基于分段多项式近似的DDFS研究及FPGA实现[J].电子技术应用,2018,44(3):22-30.

[12] 佚名.各种主流无线通信技术[EB/OL].(2018-05-11)[2019-07-03].http://tech.rfidworld.com.cn/2018_05/d78-ffddd177e3bca.html.

胡仕兵,陈子为

(成都信息工程大学 电子工程学院,四川 成都610225)