光电传感器实验平台软件设计_第1页
光电传感器实验平台软件设计_第2页
光电传感器实验平台软件设计_第3页
光电传感器实验平台软件设计_第4页
光电传感器实验平台软件设计_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

光电传感器实验平台软件设计摘要:此光电传感器实验平台软件设计包括光电转换、测量计算、输入输出三部分,光源信号作用于各光电传感器,由模数转换ADC0809采集光敏电阻、光敏二极管、光敏三极管、光电池的输出信号,透射式光电开关、热释电红外器件的输出信号为开关量,不需要经过模数转换ADC0809,把采集到的数据经单片机测量编程测量计算,将传感器主要特征参数实时显示出来。我们用按键选择要进行的实验项目。测量计算的核心器件为单片机,单片机系统实时测算并显示出传感器元件的主要参数。关键字:传感器;转换模块;单片机第1章引言我国理工科院校现有的大学实验教学仪器都属于单一模式的仪器,即光学工程类、模电类、数电类、传感器类等单一功能的实验教学方法和仪器。这些实验教学仪器虽然能够进行本学科的单科教学实验,但不能进行多学科综合性的实验教学,更无法培养学生的综合实验技能。此光电传感器实验平台由光源、光电转换、测量计算、输入输出部分组成。可以完成光电传感器的原理性实验,同时可进行应用性实验;整体结构紧凑,功能完整,实验平台即构成完整的光电传感器系统。所有器件均在同一侧,有利于对具体的光电元件和转换电路的感性认识,深刻理解具体电路的参数与组成。通过更换光源器件可以进行光谱特性的初步测量。单片机系统对光电传感器信号进行处理是传感器系统的重要应用方向。第2章方案设计光源信号输出各传感器的输出图1光源信号输出各传感器的输出图1光电传感器实验平台框架本设计由光源、光电转换、测量计算、输入输出部分组成。可以完成光电传感器的原理性实验,同时可进行应用性实验,以实验平台构成完整的光电传感器系统。安装不同的光源,通过调节电路改变光强,经过光电转换部分得到合适的处理信号,用ADC0809来采集。测量计算部分包括AD转换和单片机,采用ADC0809作为模数转换控制器,单片机采用51单片机,且支持在线调试,学生可以充分理解软件框架与控制流程;可以对实验软件做自主性的修改。进行模数转换的器件都有一定的电压输入范围,当传感器信号经调理过程进入模数转换器时电压量也应保持在两成范围内。接入模数转换控制器的信号有两路,第一路信号为光源电路中的电压信号,第二路信号为光电传感器输出经信号调理电路调整后的电压信号。51单片机将第二路信号经电路模型和算法处理,得出光电传感器元件的主要参数送驶入输出部分。输入输出部分包括LCD显示器,小键盘和执行部件。显示器件为字符型液晶显示器,显示光源信号值和光电传感器主要参数;小键盘包括0〜9的数字键和“确定”、“返回”,共12个按键,实现实验项目的选择;电子音响和LED作为执行部件,在光电传感器应用系统中根据传感器的信号做出不同执行动作。可以进行各种光电传感器的原理与应用实验,基本光电传感器包括:光敏电阻、光敏二极管、光敏三极管、光电池、透射式光电开关、热释电红外器件。光电传感器实验平台模块分布光电传感器模数转换(ADC0809)51单片机液晶显示(LCD1602)小键盘执行部件图2光电传感器实验平台的硬件结构[1](1) 光源通过调节电路改变光强,不同的实验给出不同的光强。(2) 在实验平台上用遮光板盖住光源和光敏电阻,入射光强,电阻减小,入射光弱,电阻增大。(3) 在实验平台上用遮光板盖住光源和光敏二极管,当有光照的时候,光敏二极管的暗电流增大,无光照的时候,其暗电流很小。(4) 在实验平台上用遮光板盖住光源和光敏三极管,其测试电路就有暗电流,取走遮光板时即有光电流(5) 在实验平台上当有光入射到光电池表面时,电路中产生光电流。(6) 在实验平台上安装好光源和接收器,用遮光板盖住光源和接收器,测试透射式光电开关接收器的信号量。(7) 在实验平台上安装好光源和接收器,用遮光板盖住或移开光源和接收器,观察热释电红外传感器信号的变化。将以上试验测得数据,通过ADC0809的采集,送到单片机通过相应的公式计算得出要测得参数,并显示出来。2.3光电传感器实验平台的软件流程图3光源信号光敏电阻实验电路光敏二极管实验电路光敏三极管实验电路光电池实验电路透射式开关实验电路热释电红外实验电路2.4系统方案图4系统上电之后,显示选择菜单:1.Photoresistor2.photosensitivediode3.phototransisor4.photo-cell5.t-switch,通过键盘选择不同实验项目,例如,要做光电二极管实验,在键盘上输入“2”直接进入界面,单片机根据输入数值控制0809选择第二通道测量光敏二极管实验电路,同时将测量结果在1602上显示,要返回到主菜单就按Cancel键,可以选择其他实验。

第3章实验平台的软件设计总体概述本设计的主要功能模块有数据的计算与显示,包括光敏电阻传感器,光电二极管传感器,光电三极管传感器以及光电池、透射式光电开关、热释电器件等模块。每种模块可直接进入界面进行操作,操作灵活方便。平台软件流程图3.2数据转换测量计算部分包括AD转换和单片机,采用ADC0809作为模数转换控制器,单片机采用51单片机,支持在线调试,学生可以充分理解软件框架与控制流程;可以对实验软件做自主性的修改。进行模数转换的器件都有一定的电压输入范围,当传感器信号经调理过程进入模数转换器时电压量也应保持在两成范围内。接入模数转换控制器的信号有两路,第一路信号为光源电路中的电压信号,第二路信号为光电传感器输出经信号调理电路调整后的电压信号。51单片机将第二路信号经电路模型和算法处理,得出光电传感器元件的主要参数送入输出部分。ADC0809的工作原理[2]A/D转换的作用是数据的采集和转换。ADC0809分辨率8位,转换时间lOOuS,单电源+5V供电,模拟输出范围0~5V,无需调零和满量程调整。ADC0809有8个输入通道,可以减少实验台的A/D个数,可以解决多路同时输入的问题。ADC0809的工作时序图[3]ALE 地」」|:总线 y穂定x模拟输入 )(哒STARTEOC 输出允许 OUTPUTENEBLE图6从图可以看出,启动脉冲START和地址所存允许脉冲ALE的上升沿将地址送上地址总线,模拟量经C、B、A选择开关所指定的通道送到A/D转换器。在START信号下降沿的作用下,逐次逼近过程开始,在时钟的控制下,一位一位地逼近。此时,转换信号EOC呈低电平状态。由于逐次逼近需要一定的过程,所以,在此期间内,模拟输入值应维持不变,比较器要一次次进行比较,直到转换结束。此时,如果计算机发出一个输出允许命令(EOC呈高电平),则可读出数据。3・2・2ADC0809与c51的引脚接口I-WC-OGKhN1TPSTARTEKW5WT1IN6CU12I-WC-OGKhN1TPSTARTEKW5WT1IN6CU12W7CUTSOJT4*4®*CUT5OJFSOUT?ALEamVREF[*5RST苑甘血哪密心3Pb就mmPO5MD6E酎心KI7fMJ7氏沁P2附PSL^AIOR23/A11RS4/A1SP2M1SFSe/AU陀杯侣PlMWrairraopg2/*wMlrwTiP54HDWS^Tirawjft昭MS01)ADC08091)ADC0809的流程图(图8)图7图7是ADC0809与C51的引脚接口图。ADC0809的6脚START(A/D转换启动信号输入端)与C51的2脚(P1.1)相接;ADC0809的7脚EOC(转换结束信号输出引脚)与C51的3脚(P1.2)相接;ADC0809的9脚OE(输出允许控制端)与C51的4脚(P1.3)相接;ADC0809的10脚CLOCK与C51的30脚(ALE)相接;ADC0809的25、24、23脚(即ADDA、ADDB、ADDC)地址输入线分别与C51的21、22、23脚(即P2.0、P2.1、P2.2)相接;ADC0809的22脚ALE(地址锁存允许信号输入端)与C51的1脚(P1.0)相接。3.2.3ADC0809的子程序(2)程序代码如下所示#include<REGX51.H>#defineADP2 //AD0809通道选择输入#defineDDP3 //AD0809数据输入//接口sbitAD_ALE=P「0; //AD0809地址锁存,高电平有效sbitAD_ST=P「1; //AD0809启动上升沿100ns高电平,低电平开始转换sbitAD_EOC=P「2; //转换结束,高电平有效,查询!sbitAD_OE=P「3; //输出使能,高电平使能,低电平高阻。voidADC_INT ( void)TOC\o"1-5"\h\z{AD_ST = 0 ;AD_ALE = 0 ;AD_OE = 0 ;}unsignedcharAD_CONVER(unsignedcharadd){unsignedchari=0;if(add<8)AD=add; //通道选择(0~7)AD_ALE=1;AD_ALE=1;AD_ALE=0;AD_ST=0;AD_ST=1;AD_ST=1;AD_ST=0;//高电平启动AD_EOC=1;for(i=0;i<30;i++); //延时while(AD_EOC==0);//AD_OE=1;AD_OE=1;i=DD;//读数据AD_OE=0;returni;}//返回3.3数据采集3.3.1光敏电阻实验主要测试光敏电阻的阻值【4】其测量的流程:光源通过调节电路改变光强,不同的实验给出不同的光强。在有光入射时,我们可以很容易的测量出光敏电阻两端的电压V亮这样,可以通过相应的公式亮求出光敏电阻的阻值,即I亠=(5-V」/R,则可以求出R=V亠/I亠。亮 亮L 亮亮测试光敏电阻的阻值:n=AD_CONVER(addrs); //读转换函数EA=1;P3=0xff;if(addrs==0) //第一通道,测量光敏电阻。{t=n*10;t=t/(256-n); //计算公式n=t*10; //放大10倍,取小数点后面1位,一共四位(14.5k)dis[4]='K';//单位m=n%10;dis[3]=m+0x30;dis[2]='.'; //小数点m=n/10%10;dis[1]=m+0x30;m=n/100;dis[0]=m+0x30;}3.3.2光电二极管实验主要测试光电二极管的光电流其测量的流程:光源通过调节电路改变光强,不同的实验给出不同的光强。在有光入射时,我们可以很容易测出光电二极管两端的电压値V,这样,通过公式1光=(5-V)光/Rl得出光电二极管的光电流。3.3.3光电三极管实验主要测试光电三极管的光电流(1丿其测量的流程:光源通过调节电路改变光强,不同的实验给出不同的光强。在有光入射时,我们可以很容易的测量出光电三极管发射极E的电压值V,则由公式I=V/RE EEL就可以得出光电三极管发射极E的电流值,这样,光电三极管的光电流I=I/(l+0)。LE3.3.4光电池实验主要测试光电池产生的电动势其测量的流程:光源通过调节电路改变光强,不同的实验给出不同的光强。在有光入射时,我们可以很容易的测量出光电池电路中放大器LM358中1脚的电位,根据放大器的虚短,可以得出3脚和5脚的电压相等。根据放大器的虚断可以求得1脚的电压是3脚的电压的11倍。这样,我们就可以知道光电池产生的电动势。3.3.5透射式光电开关光电开关采用高发射功率红外光电二极管和高灵敏度光电晶体管组成。它利用被检测物体对红外光束的遮光或反射,由同步回路选通而检测物体的有无,输出开关量。3.3.6热释电红外传感器测量的原理:热释电红外传感器是对温度敏感的传感器。热释电红外传感器的窗口接收光线,滤波片对自然界中的白光信号具有抑制作用,所以只有特定波长的红外信号才能通过滤波片照射在热释电元件上。当人体进入检测区,因人体温度与环境温度有差别,产生温差时,传感器有输出,温度没有变化时,则无输出。3.4输入输出LCD1602工作原理[5]LCD1602的工作原理液晶显示模块具有体积小、功耗低、显示内容丰富、超薄轻巧等优点,在袖珍式仪表和功耗应用系统中得到广泛的应用。目前字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件。LCD1602液晶显示模块可以显示两行,每行16个字符,采用单+5V电源供电,外围电路配置简单,价格便宜,具有很高的性价比。1602液晶模块内部的字符发生存储器已经存储了160个不同的阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“ A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。1602识别的是ASCII码,试验可以用ASCII码直接赋值。表1LCD1602引脚及功能管脚号英文说明中文说明1VSSGroundforLogic地2VDDPowersupplyforLogic逻辑电压3VOPowersupplyforLCDdrive对比度调节4RSRegisterselection指令、数据寄存器选择5R/WRead/Writeselection读写选择信号6EEnablesignalforLCM使能信号7~14DB0~DB7DataBuslines数据线0~715APowersupplyforBacklight(+)背光正极16KPowersupplyforBacklight(-)背光负极VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高。若对比度过高会产生“鬼影”,使用时可以通过一只10KQ电阻来调整对比度。RS为寄存器选择端,RS为高电平时选择数据寄存器,为低电平时选择指令寄存器。RW为读写信号线,为高电平时进行读操作,为低电平时为写操作。当RS和RW同为低电平时可以写入指令或者显示地址。当RS为低电平、RW为高电平时可以读忙信号,当RS为高电平、RW为低电平时可以写入数据。E为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。DO〜D8为位双向数据线。表21602液晶模块内部的控制器的11条控制指令序号指令RSRWD7D6D5D4D3D2D1D01清显示00000000012光标返回0000000003置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L**6置功能00001DLNF**7置字符发生器存储0001字符发生存储器地址

器地址8置数据存储器地址001显示数据存储器地址9读忙标准位或地址01BF计数器地址10写数到CGRAM或DDRAM10要写的数据内容11从CGRAM或DDRAM11读出的数据内容LCD1602的控制指令上表2为液晶模块的控制指令,1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。指令1:清显示,指令码,光标复位到地址位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置。其中:I/D:光标移动方向,高电平右移,低电平左移;S:屏幕上所有文字是否左移或者右移,高电平。指令4:显示开关控制。其中:D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示;C:控制光标的开与关,高电平表示有光标,低电平表示无光标;B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位。其中:S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令。其中:DL:高电平时为4位总线,低电平时为8位总线;N低电平时为单行显示,高电平时双行显示;F:低电平时显示5X7的点阵符,高电平时显示5X10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址。其中:BF:读忙标志位,高电平表示忙、,此时模块不能接收命令或者数据低电平表示不忙。指令10:写数据。指令11:读数据。LCD1602的工作时序图[5]f1Ll严EXW1UHjEH0-DE7Validifitm\7IiT图f1Ll严EXW1UHjEH0-DE7Validifitm\7IiT图9LCD1602写操作时序图"h]■\1L1t沁™iVIL]¥IHTVIL15B0-D37Xj'TTET■Am"h]■\1L1t沁™iVIL]¥IHTVIL15B0-D37Xj'TTET■AmXzTEH:AML!曲0图10LCD1602读操作时序图LCD1602与c51的引脚接口LCD1L1M58L?XTAL1旳i.'wi刊$曲?XTAL1旳i.'wi刊$曲XTALS逻i艸;、=0卍心H?r刃04&P21'A=«盟I'A'O=2a'AMALI"PHA'A57fll.'T;£X"12PS.ilMuPl3psaiwTT=1±=>3470Pl5PSS'Tl"1GPl7卩甜严ps凋5畏舅监3s=BSo£Sc A图11图11为LCD1602与C51的引脚接口图。LCD1602的4脚RS(数据/命令选择端)与C51的6脚(P1.5)相接;LCD1602的5脚RW(读/写选择端)与C51的7脚(P1.6)相接;LCD1602的6脚E(使能信号)与C51的8脚(P1.7)相接;LCD1602的7~14脚(即D0~D7)分别接C51的39~32脚(即P0.0口~卩0.7口)。LCD1602的子程序(1)显示流程图如下图12所示流程图分析:首先对LCD1602显示屏进行初始化(初始化大约持续10ms左右),然后检查忙信号,若BF=0,则获得显示RAM的地址,写入相应的数据显示;若BF=1,则代表模块正在进行内部操作,不接受任何外部指令和数据,直到BF=0为止。(2)程序代码LCD1602子程序包括对1602写指令子程序、对1602写数据子程序、读1602数据子程序、读1602状态子程序、忙检测子程序、1602初始化子程序、1602在指定位置显示字符子程序。//1602写指令函数//写指令RS二H,RW二L,D0~D7二指令码,E二高脉冲voidLCD_write_inst(unsignedcharinst){lcd_clear_instruction();lcd_clear_write();LCD_PORT=inst;lcd_stop_work(); //E正脉冲_nop_();_nop_();lcd_begin_work();_nop_();_nop_();lcd_stop_work();}//1602写数据函数////写数据RS二H,RW二L,D0~D7二数据,E二高脉冲voidLCD_write_data(unsignedcharcharacter){delayus(100);lcd_set_data();lcd_clear_write();LCD_PORT=character;lcd_stop_work(); //E正脉冲delayus(100);lcd_begin_work();_nop_();_nop_();lcd_stop_work();}//读状态RS=L,RW=H,E=HunsignedcharLCD_read_status(void){unsignedchartemp=0;lcd_stop_work();LCD_PORT=0xFF;lcd_clear_instruction();//LCM_RS=0;lcd_set_read();//LCM_RW=1;lcd_begin_work();//LCM_E=1;_nop_();_nop_();temp=LCD_PORT;_nop_();_nop_();lcd_stop_work();returntemp;}//1602忙检查函数//返回1:忙不是操作;0:可以操作bitLCD_check_bf(void){unsignedchartemp=0;unsignedchark=0;bitbf=0; //0可以操作,1:不能操作,忙do{temp=LCD_read_status();temp=temp&BIT7;//检测最高位状态k++;if(k>200){bf=1;break;} //连续检测200次为忙,跳出.}while(temp!=0); //为1不能操作,继续检测returnbf; //返回标志位}//1602初始化voidLCD_INIT(void){bitbff=0;lcd_stop_work();//确定状态不工作delayms(50); //上电等待//*********写三次0x38或0x30*************LCD_write_inst(0x38);//三次显示模式设置,不检测忙信号delayms(5);LCD_write_inst(0x38);delayms(5);LCD_write_inst(0x38);delayms(5);bff=LCD_check_bf();//忙检测,不判断.LCD_write_inst(LCD_FUNCTION_SET_8data);bff=LCD_check_bf();//忙检测,不判断.LCD_write_inst(LCD_CLEAR);//显示清屏bff=LCD_check_bf();//忙检测,不判断.LCD_write_inst(LCD_MODE_SET_add);//显示光标自增移动bff=LCD_check_bf();//忙检测,不判断.LCD_write_inst(LCD_CURS_ON);//显示开,显示光标}//按指定位置显示一个字符:X表示列,y表示行.1602两行16个字.voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData){bitbff=0;Y&=0x1;X&=0xF;//限制X不能大于15,Y不能大于1if(Y)X|=0x40;//当要显示第二行时地址码+0x40;X|=0x80;//算出指令码 //最高位为1,写显示地址.bff=LCD_check_bf();//忙检测,不判断.LCD_write_inst(X);//写地址bff=LCD_check_bf(); //忙检测,不判断.LCD_write_data(DData);}3.4.4按键工作原理在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。3.4.5按键c51的引脚接口P3QRXDPitrrxDRSWfTDP33WMT1哼阿PS即用PSTflO物理码//10:"on/c"物理码//10:"on/c"图13图13为按键与C51的引脚接口图。按键与C51的P3.0~P3.7口分别相接。3.4.6按键子程序按键流程图[6(]图14)程序代码如下所示#include<intrins.h>#include<REGX51.H>#definekeyIOP3 //键盘接口 图14//////////键盘函数unsignedcharkey_decode(void) //键盘解码{unsignedcharcodekey_code[16][2]={{7,0xEE},{4,0xED},{1,0xEB},{10,0xE7},//键盘编码与逻辑编码表{8,0xdE},{5,0xDD},{2,0xDB},{0,0xd7},{9,0xbe},{6,0xbd},{3,0xbb},{11,0xb7}, //11:"="{15,0x7e},{14,0x7d},{13,0x7b},{12,0x77} //"FX—+};unsignedcharcodekey_scan[]={0xEF,unsignedchari=0,j=0,t=0,tt=0;unsignedchartemp1;keyIO=0x0F;_nop_();_nop_();_nop_();_nop_();temp1=keyIO;if(temp1!=0x0F){for(i=0;i<4;i++){keyIO=key_scan[i];_nop_();_nop_();_nop_();_nop_0xdF,0xbF,0x7F}; //逐行扫描//键盘按键初判//IT机期周期的单片机,读写之间加延时//扫描第一行(列),发现在那一行(列)();//IT机期周期的单片机,读写之间加延时t=keyIO;tt=t&0x0F;if(tt!=0x0F)break;}for(j=0;j<16;j++) //查找对应的特性码(物理码){if(t==key_code[j][1])break;}if(j>=16)return0xFF;elsereturnkey_code[j][0]; //返回对应的逻辑码}elsereturn0xFF;}4.调试效果与结论本设计包括光敏电阻实验,光电二极管实验,光电三极管实验以及光电池、透射式光电开关、热释电红外器件实验。测量计算部分采用ADC0809作为模数转换控制器,单片机采用C51,显示采用LCD1602。焊接完毕后并不是一下子就成功的,发现LCD1602上电后不亮,经过仔细的对每一个焊点的查看,每根线的连接,检查出有两根线搭在一起了。系统一上电,LCD1602液晶显示出要做的实验项目,通过按键选择要做的实验项目,比如要做光敏电阻的实验,我们选择按键“1”,光敏电阻的测试电路的输出端输出数据,并且接到ADC0809的一个通道上,通过模数转换器,与单片机351相连,把模拟信号转换为数字信号,数据处理好后,在LCD1602上显示出来。当要进行下一个实验项目是可以选择按键ON/C回到选择菜单进行实验的选择。仿真图界面的显示图□MIKl1.LCR2PD3.PF4.photoceHh>.1毙?tiu宝M沁匸flu 匸显示电阻值显示电压值LCD1-豈示飾是电Hsfl握伏值J.CI1EL :TE:m2.PD_uolt-a9e:25400附录原理图:w5■erid[XCKX^r11START阳f{3EDCB4«t1&OJT1HTOJTIADOAOJT5^DOGOJT?ALEVfi=F-叫曲RJC€眄WIXlFCMJ"BQTWSPC.沁3PC.池Gpc.rrdn?=2眈P?l.'AflP22fMDP23/MIP2.J|^.12P2.&A14MoiroujF3内羽FEPl.5iT1附录总程序#include<REGX51.H>[7][8]externunsignedcharkey_decode(void); //声名外部函数键盘,返回按键逻辑值(0~15)如果是Oxff,无键externvoidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData);//外部函数,LCD1602显示程序externvoidLCD_INIT(); //LCD1602初始化externvoidDisplay_cls(void);//LCD清屏externvoidADC_INT(void);//AD0809初始化externunsignedcharAD_CONVER(unsignedcharadd);//AD转换函数//显示菜单unsignedcharcodeonelist[]={"1.LCR2.PD3.PT"};unsignedcharcodetwolist[]={"4.photocell "};unsignedcharcodeone_menu[]={"1.LCR_R(k):"};unsignedcharcodetwo_menu[]={"2.PD_voltage:"};unsignedcharcodethree_menu[]={"3.PT_voltage:"};unsignedcharcodefour_menu[]={"4.Photocell_V:"};unsignedchardis[5]={0x31,0x36,0x39,0x30,0x00};//显示//全局变量unsignedcharkey_buff=0;bitkey_b=0; //用于按键unsignedcharaddrs=0;bitadc_check=0;//延时子程序voiddelay(unsignedintms){unsignedchari;

while(ms--)for(i=0;i<125;i++);}voidmain(void){unsignedcharm=0;unsignedintn=0;//定时器中断初始化//定时器TO工作模式1,//定时器TO工作模式1,16位定时器////装初值1OmsTH0=(65536-10000)/256;TL0=(65536-10000)%256;//中断初始化ET0=1;EA=1;//启动定时器//ADCO8O9初始化//启动定时器//ADCO8O9初始化//LCD1602初始化ADC_INT();LCD_INIT();//////显示菜单m=O;while(onelist[m]!=O&&m<15){DisplayOneChar(m,O,onelist[m++]);}m=O;while(twolist[m]!=O&&m<15){DisplayOneChar(m,1,twolist[m++]);}//主程序while(1){if(key_b==1)//有键按下{key_b=O; //清楚标志位Display_cls();//显示器清屏switch(key_buff){case1:adc_check=1;//停止电压检测,标志位addrs=0; //改变测试通道m=0; //写子菜单while(one_menu[m]!=0&&m<15){DisplayOneChar(m,0,one_menu[m++]);}break;case2:adc_check=1;addrs=1;m=0; //写子菜单while(two_menu[m]!=0&&m<15){DisplayOneChar(m,0,two_menu[m++]);}break;case3:adc_check=1;addrs=2;m=0; //写子菜单while(three_menu[m]!=0&&m<15){DisplayOneChar(m,0,three_menu[m++]);}break;case4:adc_check=1;addrs=3;m=0; //写子菜单while(four_menu[m]!=0&&m<15){DisplayOneChar(m,0,four_menu[m++]);}break;case10:adc_check=0;//返回主菜单,停止电压检测//////显示菜单m=0;adc_check=0;while(onelist[m]!=0&&

温馨提示

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

评论

0/150

提交评论