void delay(intms) { inti;
while(ms--) {
for(i = 0; i< 250; i++) {
_nop_(); _nop_(); _nop_(); _nop_(); } } }
/*遇忙等待函数*/
void WaitForEnable(void) {
_nop_(); _nop_();
while(a8255_PA&0x40); //1忙 a8255_PA=0xbf; //10111111 }
/*写命令*/
void write_com(uchar com) { a8255_CON=0x80; WaitForEnable( );
a8255_PA=0x8f; //10001111 a8255_PB=com; delay(2);
a8255_PA=0xcf; //11001111 delay(2);
a8255_PA=0x8f; //10001111 }
/***********写数据函数*************/ void write_data(uchardat) {
a8255_CON=0x80; WaitForEnable();
a8255_PA=0x9f; //10011111 a8255_PB=dat; delay(2);
a8255_PA=0xdf; //11011111 delay(2);
a8255_PA=0x9f;
}
/***************LCD1602初始化*****************/ void lcdinit (void) {
a8255_PA=0xff; a8255_CON=0x80; a8255_PA=0x9f; write_com(0x38);
write_com(0x0f); //00001111 开显示,开光标,不闪烁 write_com(0x06); //00000111 指针加1 write_com(0x01); //清屏 write_com(0x80); //write_com(0x80); }
void main( ) { intnum; lcdinit();
for(num=0;num<10;num++) {
write_data(table[num]); delay(20); }
while(1); }
6.4 声光报警测试
为了达到设定的要求,酒精浓度超过阀值时,由单片机控制实现声光报警功能,给单片机的P3.3口一个低电平,蜂鸣器就会响,灯会亮。以下是相应的模块程序。 程序6-4:
Sbit Beep=P3^3; if(j>=set_Value) {
Beep=0;
delay_ms(200); Beep=1;
delay_ms(20); }
6.5 整体功能调试程序
本设计采用模块化程序设计结构,方便调试,易于查错,可移植性强。详细的模块程序请查看相应的附录,该检测仪的整体功能实现即由每个模块的分工协作来实现。将程序在Keil编译器中编译成功后,生成HEX文件,然后将程序烧录到单片机中,上电即可进行工作了。上电后该酒精检测仪将按照初始化的程序进行工作,酒精浓度阈值为当初设定的,超过阈值则会产生报警。一旦有设定酒精浓度阈值的按键按下,并且检测按键按下的次数,则酒精浓度的阈值即被重新设定,在没被下一次设定前,实时检测的酒精浓度将与它进行比较,超过该界限值即报警,同时酒精浓度值一直将会显示出来。
第7章结论
经过近半年时间的不断查找资料、设计原理图、布板、焊接以及软、硬件调试,该检测仪基本实现了既定的功能。可以进行酒精浓度阈值设定、声光报警、以及酒精浓度的显示,不过整个检测仪的反应速率相对较慢,经分析可能与单片机的处理的位数、环境的温度有关,因为环境的温度会对酒精传感器的灵敏度造成很大的影响,但酒精传感器良好的稳定性和选择性使得检测仪抗干扰性很强。结构简单、体积小、携带方便等优点相信会使它具有很好的市场前景。总之,虽然在这过程当中遇到过很多阻碍,比如原理图中有些元件设置不对导致没有导入PCB工程中,还有部分因为封装问题导致生成的PCB出现错误,不过有了这些错误同时让自己对知识有了更深一层的了解,培养了自己独立思考问题、解决问题的能力。
摘要
这个时代路上的车辆越来越多,交通问题日渐严重,其中酒驾屡见不鲜,这是对自己的不负责也是对家人的不负责更是对社会的不负责。所以我此次设计为酒精浓度测试系统,该设计稳定性高,便于携带,精确度高。酒精浓度测试仪是在单片机AT89C51作为核心的基础上,再用气敏传感器,使用气敏电阻来测试酒精浓度数值。可以设置阈值,一旦酒精浓度超过此阈值,便会发出声光告警,最后在LCD上面显示出酒精浓度数值。系统完成了对于酒精浓度的及时检测与显示功能,还有按时测量和报警提示等一系列功能。实验结果表明,系统功能正常,测试时间短,灵敏度高,便于携带测试结果准确,实现了此设计的功能。
关键词:酒精浓度;单片机AT89C52;气敏传感器