第11章温度监测仪开发实例211.1项目功能描述11.2系统组成11.3接口电路图设计11.4程序设计11.5运行结果11.6小结本章课程:3温度监测仪可以实现如下功能:使用铂电阻传感器探测出目标温度,并通过图形的方式显示在LCD屏上当温度超过报警温度时,在LCD屏上显示报警状态当温度超过报警温度时,通过PWM控制蜂鸣器实现报警当温度超过报警温度时,点亮LED报警灯可以通过按键关闭或打开蜂鸣器及报警等功能实例涉及到传感器技术、GPIO控制技术、中断技术、LCD控制技术、PWM控制技术、A/D转换技术等。11.1项目功能描述4图11-1系统组成功能图11.2系统组成S3C2410LCD液晶屏320*240*16蜂鸣器变送器LED灯按键铂电阻电阻信号电压信号0~3.3V51、报警灯电路处理器S3C2410通过GPF4控制报警LED灯,如图10-2所示图11-2报警灯电路11.3接口电路图设计62、蜂鸣器电路处理器S3C2410通过GPB0输出PWM信号控制蜂鸣器,如图11-3所示图11-3蜂鸣器电路11.3接口电路图设计73、按键电路当GPE11输出0电平时,按键按下后会在EINT0管脚上产生跳沿信号。系统利用此信号产生中断。如图11-4所示图11-4按键中断电路11.3接口电路图设计84、LCD液晶屏电路LCD屏的分辨率为320*240,颜色深度为16位真彩色。电路接线参照第9章中的图9-4。11.3接口电路图设计95、温度采集电路采样温度范围是0~100℃,变送器将温度信号转换为0~3.3V的电压信号。电压信号和S3C2410的AIN0相连。系统通过测量电压信号从而得到当前的温度值。电路如图11-5所示图11-5温度采集电路11.3接口电路图设计101、程序工作流程图13-6主程序流程11.4程序设计开始系统初始化启动A/D转换将转换结果通过图形的方式显示在LCD上打开蜂鸣器及报警灯是否超过报警温度否是蜂鸣器及报警灯是否已经打开关闭蜂鸣器及报警灯否是蜂鸣器及报警灯功能是否打开是否11图13-7按键中断处理程序流程11.4程序设计开始蜂鸣器及报警灯功能是否已经打开关闭蜂鸣器及报警灯功能结束打开蜂鸣器及报警灯功能是否122、主程序代码1.#include2410lib.h2.externvoidbeep_gpio_setup(void);3.externvoidbeep_start(void);4.externvoidbeep_stop(void);5.externUINT16Tadc_get(void);6.externvoidlcd_init(void);7.externvoidint_init(void);8.externvoidled_init(void);9.externvoidled_on(void);10.externvoidled_off(void);11.externvoidFill_area(intx0,inty0,intx1,inty1,unsignedshortcolor);12.externvoidadc_init(void);11.4程序设计1313.intflag_alarm=1;//打开alarm功能的表示14.intflag_beep=0;//蜂鸣器和报警灯打开标志15.16.intmain(intargc,char**argv)17.{18.unsignedshortadc_data;19.floatf_value;20.sys_init();//初始化s3c2410'sClock,MMU,Interrupt,PortandUART21.led_init();//LED接口初始化,配置对应的GPIO属性22.lcd_init();//初始化LCD控制器23.int_init();//初始化按键中断24.beep_gpio_setup();//初始化PWM控制蜂鸣器25.adc_init();//初始化A/D控制器11.4程序设计1426.while(1)27.{28.adc_data=adc_get();//获取到ad转换值29.f_value=adc_data*100.0/1024.0;//转换为对应的电压值30.uart_printf(%0.1f\n,f_value);31.Fill_area(60,80,260,120,0x0);//填充温度计的默认颜色32.Fill_area(60,80,(int)(f_value*2),120,0xf000);33.delay(10000);34.if(f_value80)//判断温度是否超过报警值8035.{36.if(flag_alarm)//判断是否设置了报警功能37.{38.beep_start();//驱动蜂鸣器11.4程序设计1539.led_on();//打开报警灯40.flag_beep=1;//置标志41.}42.else43.{44.if(flag_beep)//判断标志45.{46.beep_stop();//关闭蜂鸣器47.led_off();//关闭报警灯48.flag_beep=0;//flag标志置049.}50.}51.}11.4程序设计1652.else53.{54.if(flag_beep)//判断标志55.{56.beep_stop();//关闭蜂鸣器57.led_off();//关闭报警灯58.flag_beep=0;//flag标志置059.}60.}61.}62.return0;63.}11.4程序设计173、按键中断处理程序代码1.externintflag_alarm;2.void__irqint0_int(void)3.{4.delay(3000);5.ClearPending(BIT_EINT0);6.uart_printf(EINT0interruptoccurred.\n);7.if(flag_alarm)8.{9.flag_alarm=0;10.}11.else12.flag_alarm=1;13.}11.4程序设计18本章例程的运行后在液晶上的显示如图13-8所示:图11-8控制器温度监控界面通过图形的方式直观的表示出温度情况。K10可以控制报警功能的开关。参照11.1中的描述,测试系统的各项功能。11.5运行结果19本章通过一个实例,综合了几个常用的接口功能。通过本章,同学们可以提高利用已学知识解决实际问题的能力。本例程只适合在实验室学习使用,如果用于产品还需要在精度、稳定性等方面做更多的优化。11.6小结20