-单片机应用系统设计实例.pptx
《-单片机应用系统设计实例.pptx》由会员分享,可在线阅读,更多相关《-单片机应用系统设计实例.pptx(44页珍藏版)》请在咨信网上搜索。
第第1111章章 单片机应用系统设计实例单片机应用系统设计实例AA11.1 单片机电子时钟的设计单片机电子时钟的设计BB11.2 多路数字电压表的设计多路数字电压表的设计11.1 单片机电子时钟的设计单片机电子时钟的设计 通常通过用单片机设计电子时钟有两种方法:通常通过用单片机设计电子时钟有两种方法:1、通过单片机内部的定时器、通过单片机内部的定时器/计数器。计数器。这种方法硬件线路简单,采这种方法硬件线路简单,采用软件编程实现时钟计数,一般称为软时钟。系统的功能一般与软用软件编程实现时钟计数,一般称为软时钟。系统的功能一般与软件设计相关,通常用在件设计相关,通常用在对时间精度要求不高对时间精度要求不高的场合;的场合;2、采用时钟芯片。、采用时钟芯片。如:并行日历时钟芯片如:并行日历时钟芯片DS12887,串行日历时,串行日历时钟芯片钟芯片DS1302,它的功能强大,功能部件集成在芯片内部,自动,它的功能强大,功能部件集成在芯片内部,自动产生时钟等相关功能。硬件成本相对较高,软件编程简单。通常用产生时钟等相关功能。硬件成本相对较高,软件编程简单。通常用在对在对时钟精度要求较高时钟精度要求较高的场合。的场合。11.1.1 软时钟的基本原理软时钟的基本原理 软时钟是利用软时钟是利用单片机内部的定时器单片机内部的定时器/计数器计数器来实现,它的处理过来实现,它的处理过程如下:程如下:首先设定单片机内部的一个定时器首先设定单片机内部的一个定时器/计数器工作于计数器工作于定时定时定时定时方式,对方式,对机器周期计数形成基准时间(如机器周期计数形成基准时间(如50ms或或10ms),然后用另一个定),然后用另一个定时器时器/计数器或软件计数的方法对基准时间计数形成秒(对计数器或软件计数的方法对基准时间计数形成秒(对50ms记记数数20次或次或10ms计数计数100次),秒计次),秒计60次形成分,分计次形成分,分计60次形成小时,次形成小时,小时计小时计24次则计满一天。然后通过数码管把它们的内容在相应位置次则计满一天。然后通过数码管把它们的内容在相应位置显示出来即可。显示出来即可。11.1.2 系统硬件电路的设计系统硬件电路的设计共阳极共阳极阴极阴极驱动取反驱动取反AT89C5211.1.3 系统软件程序的设计系统软件程序的设计 电子时钟的软件系统由电子时钟的软件系统由主程序主程序和和子程序子程序组组成,主程序程序包含初始化参数设置、按键处成,主程序程序包含初始化参数设置、按键处理、数码管显示模块等,在设计时各个模块都理、数码管显示模块等,在设计时各个模块都采用子程序结构设计,在主程序中调用。由于采用子程序结构设计,在主程序中调用。由于定时器定时器/计数器采用中断方式处理,因此还要编计数器采用中断方式处理,因此还要编写定时器写定时器/中断服务子程序,在定时器中断服务子程序,在定时器/计数器计数器中断服务程序中对时钟进行调整。中断服务程序中对时钟进行调整。开始开始显示单元清零显示单元清零T0、T1设为设为16位计数模式位计数模式允许允许T0中断中断调用显示子程序调用显示子程序进入功能程序进入功能程序按下键否?按下键否?否否是是一主程序一主程序 主程序执行流程如主程序执行流程如图,主程序先对显示单图,主程序先对显示单元和定时器元和定时器/计数器初计数器初始化,然后重复调用数始化,然后重复调用数码管显示模块和按键处码管显示模块和按键处理模块,当有键按下,理模块,当有键按下,则转入相应的功能程序。则转入相应的功能程序。二数码管显示模块二数码管显示模块 本系统共用本系统共用8个数码管,个数码管,从右到左从右到左依次显示秒个位、秒十位、依次显示秒个位、秒十位、横线、分个位、分十位、横线、时个位和时十位。数码管显示的信横线、分个位、分十位、横线、时个位和时十位。数码管显示的信息用息用8个内存单元存放,这个内存单元存放,这8个内存单元称为显示缓冲区,其中秒个个内存单元称为显示缓冲区,其中秒个位和秒十位、分个位和分十位、时个位和时十位分别由秒数据、分位和秒十位、分个位和分十位、时个位和时十位分别由秒数据、分数据和小时数据分拆得到。在本系统中数码管显示采用数据和小时数据分拆得到。在本系统中数码管显示采用软件译码动软件译码动态显示态显示。在存储器中首先建立一张显示信息的字段码表,显示时,。在存储器中首先建立一张显示信息的字段码表,显示时,先从显示缓冲区中取出显示的信息,然后通过查表程序在字段码表先从显示缓冲区中取出显示的信息,然后通过查表程序在字段码表中查出所显示的信息的字段码,从中查出所显示的信息的字段码,从P0口输出,同时在口输出,同时在P2口将对应口将对应的位选码输出选中显示的数码管,就能在相应的数码管上显示显示的位选码输出选中显示的数码管,就能在相应的数码管上显示显示缓冲区的内容。缓冲区的内容。三定时器三定时器/计数器计数器T0中断服务程序中断服务程序 定时器定时器/计数器计数器T0用于时间计时。用于时间计时。选择选择方式方式1,重复定时,定时,重复定时,定时时间设为时间设为50ms,定时时间到则中断,在中断服务程序中用一个计数,定时时间到则中断,在中断服务程序中用一个计数器对器对50ms计数,计计数,计20次则对秒单元加次则对秒单元加1,秒单元加到,秒单元加到60则对分单元则对分单元加加1,同时秒单元清,同时秒单元清0;分单元加到;分单元加到60则对时单元加则对时单元加1,同时分单元清,同时分单元清0;时单元加到;时单元加到24则对时单元清则对时单元清0,标志一天时间计满。在对各单元,标志一天时间计满。在对各单元计数的同时,把它们的值放到存储单元的指定位置。定时器计数的同时,把它们的值放到存储单元的指定位置。定时器/计数器计数器T0中断服务程序流程图如图。中断服务程序流程图如图。开始开始现场保护,重置初值现场保护,重置初值启动下一个启动下一个50ms50ms 计数器加计数器加1秒单元加秒单元加1,50ms计数器清计数器清0,秒写入秒个位和秒十位秒写入秒个位和秒十位50ms 计数器计数器=20?否否是是分单元加分单元加1,秒单元清,秒单元清0,分写入分个位和分十位分写入分个位和分十位秒单元秒单元=60?时单元加时单元加1,分单元清,分单元清0,时写入时个位和时十位时写入时个位和时十位分单元分单元=60?时单元清时单元清0时单元时单元=24?中断返回中断返回否否否否否否是是是是是是定时器定时器/计数器计数器T0中断服务程序:中断服务程序:四按键处理模块四按键处理模块按键处理设置为:按键处理设置为:如没有按键,则时钟正常走时。如没有按键,则时钟正常走时。按下按下K0键:进入调分状态,时钟停止走动;键:进入调分状态,时钟停止走动;按按K1和和K2键:可进行加键:可进行加1和减和减1操作;操作;继续按继续按K0键:可分别进行分和小时的调整;键:可分别进行分和小时的调整;最后按最后按K0键:退出调整状态,时钟开始计时运行。键:退出调整状态,时钟开始计时运行。五汇编语言源程序清单五汇编语言源程序清单ORG 0000HLJMP STARTORG 000BHLJMP INTT0;主程序;主程序START:MOV R0,#70H MOV R7,#0CHINIT:MOV R0,#00H INC R0 DJNZ R7,INIT ;70H-7CH全部清全部清0 MOV TMOD,#01H;T0工作在方式工作在方式1 MOV TL0,#0B0H ;T0定时定时50ms MOV TH0,#3CH SETB EA SETB ET0 SETB TR0START1:LCALL SCAN;调用显示子程序调用显示子程序 LCALL KEYSCAN;调用键盘子程序调用键盘子程序 SJMP START1;延时;延时1ms子程序子程序DL1MS:PUSH 06H;保护现场保护现场R6的值的值 MOV R6,#14H;1sDL1:MOV R7,#19H;1sDL2:DJNZ R7,DL2;25次次2s=50s DJNZ R6,DL1;2s POP 06H;恢复现场恢复现场R6的值的值 RET;2s2s+1s+(25次次2s+3s)20次次+2s+2s=1067s=1.067ms1ms;延时;延时20ms子程序子程序DL20MS:ACALL SCAN ACALL SCAN ACALL SCAN RET2T1T1T2T2T2T2T ;数码管显示程序;数码管显示程序 SCAN:MOV A,78H;秒秒 MOV B,#0AH DIV AB;A-商,商,B-余数余数 MOV 71H,A;秒十位秒十位 MOV 70H,B;秒个位秒个位 MOV A,79H;分分 MOV B,#0AH DIV AB MOV 74H,A MOV 73H,B MOV A,7AH;时时 MOV B,#0AH DIV AB MOV 77H,A MOV 76H,B MOV R1,#70H;循环扫描循环扫描8位显示位显示 MOV R5,#0FEH;位选码初值,显示位选码初值,显示D0位位 MOV R6,#08H;8位显示位显示SCAN1:MOV A,R5 MOV P2,A ;位选码位选码 MOV A,R1 MOV DPTR,#TAB MOVC A,A+DPTR;远程查表远程查表 MOV P0,A ;段选码段选码 MOV A,R5 LCALL DL1MS INC R1 MOV A,R5 RL A MOV R5,A DJNZ R6,SCAN MOV P2,#0FFH MOV P0,#0FFH RET TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH ;“09”,“-”的七段共阳极字段的七段共阳极字段码码;定时器;定时器/计数器计数器T0中断服务程序中断服务程序INTT0:PUSH ACC;现场保护现场保护 PUSH PSW CLR ET0 CLR TR0 MOV TL0,#0B0H ;T0定时定时50ms MOV TH0,#3CH SETB TR0 INC 7BH ;50ms定时到记数定时到记数 MOV A,7BH CJNE A,#14H,OUTT0 ;计计20次次(即即1s)MOV 7BH,#00 INC 78H ;秒加秒加1 MOV A,78H CJNE A,#3CH,OUTT0 ;计计60s MOV 78H,#00 INC 79H;分加分加1 MOV A,79H CJNE A,#3CH,OUTT0 ;不等跳不等跳,计计60分分 MOV 79H,#00 INC 7AH;时加时加1 MOV A,7AH CJNE A,#18H,OUTT0;计计24时时 MOV 7AH,#00 OUTT0:SETB ET0 RETI;按键处理程序;按键处理程序KEYSCAN:CLR EA JNB P1.0,KEYSCAN0;为为0跳跳 JNB P1.1,KEYSCAN1 JNB P1.2,KEYSCAN2KEYOUT:SETB EA RETKEYSCAN0:LCALL DL20MS ;K0去抖去抖 JB P1.0,KEYOUT ;为为1跳跳WAIT0:JNB P1.0,WAIT0 ;P1.0=0跳跳 INC 7CH ;K0松开后松开后7CH加加1 CLR ET0 CLR TR0 CJNE A,#03H,KEYOUT;不等跳不等跳;K0 按按1下或下或2下返回下返回,按按3下下7CH清清0,不能调秒不能调秒 MOV 7CH,#00 SETB ET0 SETB TR0 SJMP KEYOUTKEYSCAN1:LCALL DL20MS ;K1键去抖键去抖 JB P1.1,KEYOUTWAIT1:JNB P1.1,WAIT1 ;P1.1=0跳跳,等待松开等待松开K1 MOV A,7CH ;按键次数按键次数 CJNE A,#02H,KSCAN11 ;不等跳不等跳,K0按按2下下,调整分调整分 INC 79H ;分加分加1 MOV A,79H CJNE A,#3CH,KEYOUT ;为为60分吗?分吗?MOV 79H,#00 SJMP KEYOUTKSCAN11:INC 7AH ;时加时加1 MOV A,7AH CJNE A,#18H,KEYOUT ;为为24时吗?时吗?MOV 7AH,#00 SJMP KEYOUT/按按1下调时,按下调时,按2下调分下调分KEYSCAN2:LCALL DL20MS ;K2去抖去抖 JB P1.2,KEYOUT ;P1.2=1跳跳WAIT2:JNB P1.2,WAIT2 ;松开松开K2 MOV A,7CH CJNE A,#02H,KSCAN21 ;K2按按2下吗下吗?按按2下调整分下调整分 DEC 79H ;分减分减1 MOV A,79H CJNE A,#0FFH,KEYOUT MOV 79H,#3BH ;计计59分分 SJMP KEYOUTKSCAN21:DEC 7AH ;时减时减1 MOV A,7AH CJNE A,#0FFH,KEYOUT MOV 7AH,#17H ;计计23时时 SJMP KEYOUT END六六C语言源程序清单语言源程序清单/采用采用8位位LED软件译码动态显示程序软件译码动态显示程序/使用使用AT89C51单片机,单片机,12MHz晶振,晶振,P0口输出字段码,口输出字段码,P2口输出位选码,口输出位选码,用共阳极用共阳极LED数码管,数码管,key0为调时位选择键,为调时位选择键,key1为加为加1键,键,key2为减为减1键键#include“reg51.h”#define char unsigned charchar codedis_712=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 xff,0 xbf;/共阳极共阳极LED数码管数码管“09”、“灭灭”和和“-”的字段码的字段码char data scan_con8=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;/位选择码位选择码char data dis8=0 x00,0 x00,0 x0b,0 x00,0 x00,0 xb0,0 x00,0 x00;/显示缓冲区,时、分、秒初始为显示缓冲区,时、分、秒初始为0,0 x0b为为“-”的编码的编码char data timedata3=0 x00,0 x00,0 x00;/分别为秒、分和小时的值分别为秒、分和小时的值char data ms50=0 x00,con=0 x00,con1=0 x00,con2=0 x00;/计数次数初值计数次数初值sbit key0=P10;sbit key1=P11;sbit key2=P12;/1ms延时函数延时函数delay1ms(int t)int i,j;for(i=0;it;i+)for(j=0;j=3)con=0;TR0=1;ET0=1;if(con!=0)if(key1=0)delay1ms(10);/K1去抖去抖while(key1=0);timedatacon+;if(con=2)con1=24;else con1=60;if(timedatacon=con1)timedatacon=0;if(con!=0)if(key2=0)delay1ms(10);/K2去抖去抖while(key2=0);timedatacon-;if(con=2)con2=23;else con2=59;if(timedatacon=0)timedatacon=con2;EA=1;/数码管显示函数数码管显示函数scan()char k;dis0=timedata0%10;dis1=timedata0/10;/秒秒dis3=timedata1%10;dis4=timedata1/10;/分分dis6=timedata2%10;dis7=timedata2/10;/时时for(k=0;k8;k+)P0=dis_7disk;P2=scan_conk;delay1ms(1);P2=0 xff;/主函数主函数main()TH0=0 x3c;TL0=0 xb0;/T0定时定时50msTMOD=0 x01;ET0=1;TR0=1;EA=1;while(1)scan();keyscan();/定时器、计数器定时器、计数器T0中断服务函数中断服务函数void time_intt0(void)interrupt 1ET0=0;TR0=0;TH0=0 x3c;TL0=0 xb0;TR0=1;ms50+;If(ms50=20)/循环循环20次,计次,计1sms50=0 x00;timedata0+;/秒秒+1if(timedata0=60)timedata0=0;timedata1+;/分分+1if(timedata1=60)timedata1=0;timedata2+;/小时小时+1if(timedata2=24)timedata2=0;ET0=1;11.2 多路数字电压表的设计多路数字电压表的设计11.2.1 多路数字电压表的原理及功能多路数字电压表的原理及功能 多路数字式电压表应用系统主要利用多路数字式电压表应用系统主要利用A/D转换器,处理过程如下:转换器,处理过程如下:先用先用A/D转换器对各路电压值进行转换器对各路电压值进行采样采样采样采样,得到相应的数字量,再按数,得到相应的数字量,再按数字量与模拟量成字量与模拟量成正比正比关系运算得到对应的模拟电压值,然后把模拟值关系运算得到对应的模拟电压值,然后把模拟值通过显示器显示出来。设计时假设待测的输入电压为通过显示器显示出来。设计时假设待测的输入电压为8路,电压值的路,电压值的范畴为范畴为05V,要求能在四位,要求能在四位LED数码管上轮流显示或单路选择显示。数码管上轮流显示或单路选择显示。测量的最小分辨率为测量的最小分辨率为0.019V,测量误差为,测量误差为 0.02V。根据系统的功能要求,控制系统采用根据系统的功能要求,控制系统采用AT89C52单片机,单片机,A/D转换转换器采用器采用ADC0809。ADC0809是是8位的位的A/D转换器。当输入电压为转换器。当输入电压为5.00V时,输出的数据值为时,输出的数据值为255(0FFH),因此最大分辨率为),因此最大分辨率为0.0196V(5/255)。ADC0809的具有的具有8路模拟量输入端口,通过路模拟量输入端口,通过3位位地址输入端能从地址输入端能从8路中选择一路进行转换。如每隔一段时间轮流依次路中选择一路进行转换。如每隔一段时间轮流依次改变改变3位地址输入端的地址,就能依次对位地址输入端的地址,就能依次对8路输入电压进行测量。路输入电压进行测量。LED数码管显示采用软件译码动态显示。通过按键选择可数码管显示采用软件译码动态显示。通过按键选择可8路循环显示,路循环显示,也可单路显示,单路显示可通过按键选择显示的通道数。也可单路显示,单路显示可通过按键选择显示的通道数。11.2.2 系统硬件电路的设计系统硬件电路的设计2分频分频共阳极共阳极2MHz1MHz11.2.3 系统软件程序的设计系统软件程序的设计一主程序一主程序 主程序包含初始化部分、调用主程序包含初始化部分、调用A/D转换子程序和调用显示程序,转换子程序和调用显示程序,如下图。初始化包含存放通道数据的缓冲区初始化和显示缓冲区初如下图。初始化包含存放通道数据的缓冲区初始化和显示缓冲区初始化。另外,对于单路显示和循环显示,系统设置了一个标志位始化。另外,对于单路显示和循环显示,系统设置了一个标志位00H控制,初始化时控制,初始化时00H位设置为位设置为0,默认为循环显示,当它为,默认为循环显示,当它为1时时改变为单路显示控制,改变为单路显示控制,00H位通过单路位通过单路/循环按键控制。循环按键控制。开始开始初始化初始化调用调用A/D转换子程序转换子程序调用显示子程序调用显示子程序 LED数码管采样软件译码动态扫描方式。在显示子数码管采样软件译码动态扫描方式。在显示子程序中包含多路循环显示程序和单路显示程序,多路循程序中包含多路循环显示程序和单路显示程序,多路循环显示程序把环显示程序把8个存储单元的数值依次取出送到四个数个存储单元的数值依次取出送到四个数码管上显示,每一路显示码管上显示,每一路显示1秒。单路显示程序只对当前秒。单路显示程序只对当前选中的一路数据进行显示。每路数据显示时需经过转换选中的一路数据进行显示。每路数据显示时需经过转换变成十进制变成十进制BCD码,放于四个数码管的显示缓冲区中。码,放于四个数码管的显示缓冲区中。单路或循环显示通过标志位单路或循环显示通过标志位00H控制。在显示控制程序控制。在显示控制程序中加入了对单路或循环按键和通道选择按键的判断。中加入了对单路或循环按键和通道选择按键的判断。二二A/D转换子程序转换子程序 A/D转换子程序用于对转换子程序用于对ADC0809八路输入模拟电八路输入模拟电压进行压进行A/D转换,并将转换的数值存入转换,并将转换的数值存入8个相应的存储个相应的存储单元中,如下图。单元中,如下图。A/D转换子程序每隔一定时间调用一转换子程序每隔一定时间调用一次,也即隔一段时间对输入电压采样一次。次,也即隔一段时间对输入电压采样一次。三显示子程序三显示子程序开始开始启动一次转换启动一次转换取数据(取数据(OE=0)0809通道地址加通道地址加1返回返回地址数小于地址数小于8?A/D转换结束转换结束EOC=1?是是否否是是否否四汇编语言源程序清单四汇编语言源程序清单;测量电压最大值为测量电压最大值为5V,显示最大值为,显示最大值为5.00V;使用使用AT89C52单片机,单片机,12MHz晶振,晶振,P0口读入口读入A/D值,值,P2口为口为A/D转转换控制口换控制口;数码管为共阳极连接,数码管为共阳极连接,P1口为字段码口,口为字段码口,P3口为位选口口为位选口;P3.5为单路为单路/循环显示转换按键,循环显示转换按键,P3.6为单路显示时当前通道选择按键为单路显示时当前通道选择按键;70H-77H存放采样的存放采样的8个数据,个数据,78H-7BH为显示缓冲区,分别为个位、为显示缓冲区,分别为个位、十位、百位和当前通道值十位、百位和当前通道值;00H位为单路位为单路/循环显示控制位,当为循环显示控制位,当为0时循环显示,为时循环显示,为1时单路显示时单路显示;主程序入口主程序入口 ORG 0000H LJMP START;主程序主程序START:CLR A MOV P2,A MOV R0,#70H MOV R2,#0DHLOOPMEM:MOV R0,A INC R0 DJNZ R2,LOOPMEM MOV 20H,#00H ;00H位在位在20H字节中字节中 MOV A,#0FFH MOV P0,A ;数据口数据口 MOV P1,A ;段码口段码口 MOV P3,A ;字位口字位口MAIN:LCALL TEST ;调用调用A/D转换程序转换程序 LCALL DISPLAY ;调用显示程序调用显示程序 AJMP MAIN;显示子程序显示子程序DISPLAY:JB 00H,DISP11 ;为为1跳跳DISP11 MOV R3,#08H ;00H位位=0循环显示循环显示 MOV R0,#70H ;首地址首地址 MOV 7BH,#00H ;选中选中0通道通道DISLOOP1:LCALL TUNBCD MOV R2,#0FFHDISLOOP2:LCALL DISP LCALL KEYWORK1 DJNZ R2,DISLOOP2;延时延时 INC R0 INC 7BH ;循环选中循环选中8通道通道 DJNZ R3,DISLOOP1 RETDISP11:MOV A,7BH ;00H位位=1跳来跳来,实现单路显示实现单路显示 SUBB A,#01H MOV 7BH,A ADD A,#70H MOV R0,ADISLOOP11:LCALL TUNBCD MOV R2,#0FFHDISLOOP22:LCALL DISP LCALL KEYWORK2 DJNZ R2,DISLOOP22 ;延时延时 INC 7BH ;通道号加通道号加1 RET ;显示数据转换为显示数据转换为3位位BCD码子程序码子程序TUNBCD:MOV A,R0 MOV B,#51 DIV AB ;A-商,商,B-余数余数 MOV 7AH,A;7AH-百位百位 MOV A,B ;A-余数余数 CLR F0 SUBB A,#1AH MOV F0,C ;余数余数26,F0=C=0;余数余数26,F0=C=1 MOV A,#10 MUL AB;B-余数余数,余数余数10=BA MOV B,#51 DIV AB ;低字节低字节/51 JB F0,LOOP2;F0=1跳跳(余数余数26)ADD A,#5 LOOP2:MOV 79H,A ;79H-十位十位 MOV A,B ;余数处理余数处理 CLR F0 SUBB A,#1AH MOV F0,C MOV A,#10 MUL AB MOV B,#51 DIV AB JB F0,LOOP3 ADD A,#5 LOOP3:MOV 78H,A;78H-个位个位 RET;LED扫描显示子程序扫描显示子程序DISP:MOV R1,#78H ;个位显示个位显示 MOV R5,#0FEH ;位选初值位选初值(显示个位显示个位)PLAY:MOV P1,#0FFH MOV A,R5 ANL P3,A MOV A,R1 MOV DPTR,#TAB MOVC A,A+DPTR ;远程查表远程查表 MOV P1,A ;输出字段口输出字段口 JB P3.2,PLAY1 ;为为1跳跳(整数位不亮整数位不亮)CLR P1.7 ;点亮小数点点亮小数点PLAY1:LCALL DL1MS INC R1 ;十位显示十位显示 MOV A,P3 JNB ACC.3,ENDOUT ;通道号位为通道号位为0跳跳 RL A MOV R5,A MOV P3,#0FFHENDOUT:MOV P3,#0FFH MOV P1,#0FFH ;显示显示“灭灭”字字 RETTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,F8H,80H,90H,0FFH ;共阳极七段字段码表(显示共阳极七段字段码表(显示“0”-“9”和和“灭灭”);延时子程序延时子程序DL10MS:MOV R6,#0D0H ;1sDL1:MOV R7,#10H ;12sDL2:DJNZ R7,DL2 ;16次次2s=32s DJNZ R6,DL1 ;2sRET ;2sDL1MS:MOV R4,#0FFH ;1sDL3:DJNZ R4,DL3 ;255次次2s=510s MOV R4,0FFH ;1sDL4:DJNZ R4,DL4 ;510s RET ;2s1T1T2T2T2T1T2T1T2T2T;A/D转换子程序转换子程序TEST:CLR A MOV P2,A MOV R0,#70H ;通道号地址通道号地址 MOV R7,#08H ;8个通道个通道 LCALL TESTARTWAIT:JB P3.7,MOVD;EOC=P3.7=1跳跳 AJMP WAITTESTART:SETB P2.3 ;ALE=1 NOP NOP CLR P2.3 SETB P2.4 ;START=1 NOP NOP CLR P2.4 NOP NOP NOP NOP RETMOVD:SETB P2.5 ;OE=1 MOV A,P0 MOV R0,A CLR P2.5 INC R0;指向下一通道指向下一通道 MOV A,P2 INC A ;地址加地址加1 MOV P2,A CJNE A,#08H,TESTENDTESTEND:JC TESTCON;C=1跳跳 CLR A MOV P2,A MOV A,#0FFH MOV P0,A MOV P1,A MOV P2,A RETTESTCON:LCALL TESTART LJMP WAIT 查询方式查询方式读取结果读取结果启动转换启动转换;按键检测子程序按键检测子程序KEYWORK1:JNB P3.5,KEY1;K1=P3.5=0跳跳KEY1KEYOUT:RETKEY1:LCALL DISP ;按下按下K1后调用显示程序后调用显示程序 JB P3.5,KEYOUT;K1=1跳(松开)跳(松开)WAIT11:JNB P3.5,WAIT12 ;K1=0跳跳 CPL 00H ;K1松开后切换显示方式松开后切换显示方式 MOV R2,#0AH MOV R3,#01H RETWAIT12:LCALL DISP ;按按K1后调用显示后调用显示 AJMP WAIT11KEYWORK2:JNB P3.5,KEY1 ;按按K1后跳后跳 JNB P3.6,KEY2 ;K2=0跳跳KEY2 RETKEY2:LCALL DISP ;刷新显示刷新显示 JB P3.6,KEYOUT;K2=1跳跳KEYOUTWAIT22:JNB P3.6,WAIT21;K2=0跳跳WAIT21 INC 7BH ;K2=1,通道号通道号+1 MOV A,7BH CJNE A,#08H,KEYOUT11KEYOUT11:JC KEYOUT1 ;C=1跳跳KEYOUT1 MOV 7BH,#00H ;通道号通道号8,7BH清清0KEYOUT1:RETWAIT21:LCALL DISP ;刷新显示刷新显示 AJMP WAIT22 END五五C语言源程序清单语言源程序清单/测量电压最大值为测量电压最大值为5V,显示最大值为,显示最大值为5.00V/使用使用AT89C52单片机,单片机,12MHz晶振,晶振,P0口读入口读入A/D值,值,P2口为口为A/D转换控制口转换控制口/数码管为共阳极连接,数码管为共阳极连接,P1口为字段码口,口为字段码口,P3口为位选口口为位选口/KEY1(P3.5)为单路为单路/循环显示转换按键循环显示转换按键/KEY2(P3.6)为单路显示时当前通道选择按键为单路显示时当前通道选择按键/FLAG为单路为单路/循环显示控制位,当为循环显示控制位,当为0时循环显示,为时循环显示,为1时单路显示时单路显示#include “reg52.h”#include “intrins.h”/调用调用_nop_()延时函数延时函数#define ad_con P2 /ADC0809的控制口的控制口#define addata P0 /ADC0809的数据口的数据口#define disdata P1/数码管的字段码输出口数码管的字段码输出口#define uchar unsigned char#define uint unsigned intuchar number=0 x00;/存放单通道显示时的当前通道数存放单通道显示时的当前通道数sbit ALE=P23;/ADC0809的地址锁存信号的地址锁存信号 sbit START=P24;/ADC0809的启动信号的启动信号sbit OE=P25;/ADC0809的允许信号的允许信号sbit EOC=P37;/ADC0809的转换结束信号的转换结束信号sbit KEY1=P35;/循环或单路显示选择按键循环或单路显示选择按键sbit KEY2=P36;/通道选择按键通道选择按键sbit DISX=disdata7;/小数点位小数点位sbit FLAG=PSW0;/循环或单路显示标志位循环或单路显示标志位uchar code dis_711=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90,0 xFF;/LED的七段数码管的字段码(的七段数码管的字段码(0-9,灭)灭)uchar code scan_con4=0 xfe,0 xfd,0 xfb,0 xf7;/LED数码管的位选码数码管的位选码uchar data ad_data8=0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00;/ADC0809的的8个通道转换数据缓冲区个通道转换数据缓冲区uint data dis5=0 x00,0 x00,0 x00,0 x00,0 x00;/前前4个为个为LED数码管的显示缓冲区数码管的显示缓冲区,最后一个为暂存单元最后一个为暂存单元/1ms延时子函数延时子函数 delay1ms(unit t)uint i,j;for(i=0;it;i+)for(j=0;j120;j+);/检测按键子函数检测按键子函数 keytest()if(KEY1=0)/检测循环或单路选择按键是否按下?检测循环或单路选择按键是否按下?FLAG=!FLAG;/标志位取反,循环、单路显示间切换标志位取反,循环、单路显示间切换 while(KEY1=0);if(FLAG=1)/单路显示方式单路显示方式,检测通道选择按键是否按下?检测通道选择按键是否按下?if(KEY2=0)number+;/通道数通道数+1 if(number=8)number=0;while(KEY2=0);/显示扫描子函数显示扫描子函数 scan()uchar k,n;int h;if(FLAG=0)/循环显示子程序循环显示子程序 dis3=0 x00;/通道值清通道值清0 for(n=0;n8;n+)/8路通道路通道 dis2=ad_datan/51;/当前通道数据转换为当前通道数据转换为BCD码存入显示缓冲区码存入显示缓冲区 dis4=ad_datan%51;/余数(电压小数位)送暂存单元余数(电压小数位)送暂存单元 dis4=dis4*10;/余数余数10 dis1=dis4/51;/再除以再除以51,结果取整送十位结果取整送十位 dis4=dis4%51;/结果取余送暂存单元结果取余送暂存单元 dis4=dis4*10;/余数余数10 dis0=dis4/51;/再除以再除以51,结果取整送个位结果取整送个位 for(h=0;h500;h+)/每个通道显示每个通道显示1s for(k=0;k4;k+)/4位位LED扫描显示扫描显示 disdata=dis_7disk;if(k=2)DISX=0;/点亮小数点点亮小数点 P3=scan_conk;delay1ms(1);P3=0 xff;dis3+;/通道值加通道值加1 keytest();/按键检测按键检测 if(FLAG=1)/单路显示子程序单路显示子程序 dis3=number;/当前通道数送通道显示当前通道数送通道显示 for(k=0;k4;k+)disdata=dis_7disk;if(k=2)DISX=0;P3=scan_conk;delay1ms(1);P3=0 xff;keytest();/检测按键检测按键 /ADC0809转换子函数转换子函数 test()uchar m;uchar s=0 x00;/初始通道为初始通道为0 ad_con=s;/第一通道地址送第一通道地址送ADC0809控制口控制口 for(m=0;m8;m+)ALE=1;_nop_();_nop_();ALE=0;/锁存通道地址锁存通道地址 START=1;_nop_();_nop_();START=0;/启动转换启动转换 _nop_();_nop_();_nop_();_nop_();while(EOC=0);/等待转换结束等待转换结束 OE=1;ad_datam=addata;OE=0;/读取当前通道转换读取当前通道转换0数据数据 s+;ad_con=s;/改变通道地址改变通道地址 ad_con=0 x00;/通道地址恢复初值通道地址恢复初值 /主函数主函数main()P0=0 xff;/初始化端口初始化端口 P2=0 x00;P1=0 xff;/初始化为初始化为0通道通道 P3=0 xff;while(1)test();/测量转换数据测量转换数据 scan();/显示数据显示数据- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 应用 系统 设计 实例
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文