基于单片机的双路信号检测系统综合设计_第1页
基于单片机的双路信号检测系统综合设计_第2页
基于单片机的双路信号检测系统综合设计_第3页
基于单片机的双路信号检测系统综合设计_第4页
基于单片机的双路信号检测系统综合设计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、基于单片机的双路信号检测系统综合设计一设计任务: 设计一个能同时对环境温度和0V2.5V直流电压进行检测的系统,电压的检测采用TLC549串行ADC器件;对温度的检测采用LM75A数字温度传感器;检测结果以动态扫描方式显示在一个8位LED数码显示器上(可以同时显示,也可以轮流显示)。结合Quick51核心板和SmartSOPC教学实验开发平台的有关实验电路完成系统原理图设计与程序设计;程序的调试在实验箱上完成。完成设计报告的撰写,设计报告应包括系统原理图、设计原理、设计过程以及程序调试情况等内容。扩展要求:加入键盘的应用:程序运行后,LED显示器显示“P”,表示处于“待命”状态,按下“1”键进

2、行电压测量并显示;按下“2”键进行温度测量并显示;按下“3”键电压与温度交替测量并显示;按下“8”键返回“待命”状态。二硬件电路设计SCLSDALM75AP0口74HC573Q1Q8D1D8键盘P2.0P2.1P2.2P2.7KEY1KEY2KEY3KEY8数码管位选端口COM6数码管段选端口COM3P1口CLKDATnCSTLC549AT89C51P3.4P3.5P3.6P3.7P3.81系统组成框图2单元电路(1) 微控制器AT89C51 组成:AT89C51控制芯片,晶振电路,按键复位电路 作用:装载程序,为外界电路提供I/O接口,对外界送来的数据进行处理,提供控制信号,时钟信号,对电路

3、进行复位等。 工作原理:AT89C51主要由中央处理器(CPU),内部RAM,内部ROM,4个8位的并行双向I/O端口,2个定时/计数器,一个串行接口电路,内部时钟产生电路等构成。以上各部分通过内部数据总线相连接。与外设相连时为三总线方式:数据总线、地址总线、控制总线。其中CPU在单片机内部协调各功能部件之间的数据传送,数据运算等操作,并对单片机外发出若干控制信息;RAM用于存储程序运行中产生的数据;ROM用于存储程序;P1口只能用做I/O口,P0口可用做I/O口或在访问外部存储器时分时用做低8位地址线和8为数据线,P0口可用做I/O口或在访问外部存储器时输出高8位地址,在编程和检验时用做高位

4、地址和控制信号。 将程序拷入微控制器的内部ROM之后,根据程序对微控制器的管脚进行分配,利用中央处理器发出控制信号控制数据的输入输出,并对输入的数据进行处理,且将处理后的数据发送到相应的外部电路中。电原理图:见图1。 图1. AT89C51控制电路原理图 (2) 温度测量电路(LM75A) 组成:LM75A芯片。 作用:测量环境温度并将测量值通过单片机送到数码管显示。 工作原理:LM75A 是一个使用了内置带隙温度传感器和-模数转换技术的温度-数字转换器。LM75A 利用内置的分辨率为0.125的带隙传感器来测量器件的温度,并将模数转换得到的11 位的二进制数的补码数据存放到器件Temp 寄存

5、器中。Temp 寄存器的数据可随时被I2C 总线上的控制器读出。LM75A 可配置成不同的工作条件,它可设置成在正常工作模式下周期性地对环境温度进行监控或进入关断模式来将器件功耗降至最低。本实验中只需设置成正常模式即可。在正常工作模式中,每隔100ms 执行一次温度-数字的转换,Temp 寄存器的内容在每次转换后更新。温度寄存器通常存放着一个 11 位的二进制数的补码,用来实现0.125的精度。 在单片机的控制下,利用两个端口 SCL和SDA,LM75A 可以作为从器件连接到兼容2 线串行接口的I2C 总线上,在本实验中,SCL连接单片机P3.3接口,SDA连接P3.4接口。单片机提供SCL

6、时钟信号,并通过SDA 端读出器件的数据。 电原理图:见图2。图2. 温度测量电路原理图(3) 数字电压表电路(TLC549)组成:模拟信号产生电路,TLC549芯片。作用:TLC549将输入的模拟信号转换成8位数字信号,然后将转换后的数据通过单片机送入数码管显示。工作原理:模拟信号产生电路通过滑动变阻器来产生02.5V的电压,送入TLC549的模拟信号入口。TLC549具有4MHz片内系统时钟和软、硬件控制电路,转换时间最长17s,总失调误差最大为±0.5LSB,典型功耗值为6mW。采用差分参考电压高阻输入,抗干扰,可按比例量程校准转换范围。 当CS为高时,数据输出(DATA OU

7、T)端处于高阻状态,此时I/O CLOCK不起作用。将CS置低,内部电路在测得CS下降沿后,再等待两个内部时钟上升沿和一个下降沿后,确认这一变化,最后自动将前一次转换结果的最高位(D7)位输出到DATA OUT端上,前四个I/O CLOCK周期的下降沿依次移出D6、D5、D4、D3,采样保持电路在第4个I/O CLOCK下降沿开始采样下一个模拟输入,接下来的3个I/O CLOCK周期的下降沿移出第D2、D1、D0,最后,采样保持电路在第8个I/O CLOCK周期的下降沿起作用,保持功能将持续4个内部时钟周期,然后开始进行32个内部时钟周期的A/D转换。第8个I/O CLOCK后,CS必须为高,

8、或I/O CLOCK保持低电平,这种状态需要维持36个内部系统时钟周期以等待保持和转换工作的完成。电原理图:见图3。 图3. 数字电压表电路原理图 (4) 键盘组成:按键(只需4个:KEY1,KEY2,KEY3,KEY8)。作用:产生显示部分的选择信号。工作原理:当按键未按下时,按键输出为高电平,当按键按下时,按键输出为低电平。单片机对按键进行扫描,当扫描到某个按键按下(即为低电平)时,判断该信号有效,则该按键对应的数据显示在数码管上。在本实验中,KEY1对应电压显示,KEY2对应温度显示,KEY3对应电压温度交替显示,KEY8对应待命,显示“P”。电原理图:见图4。图4. 按键电路原理图(5

9、) 数码管扫描显示电路组成:8个七段数码管,锁存器74HC573。作用:将单片机送来的数据通过数码管显示出来,74HC573用于锁存要显示的数据。工作原理:数码管的连接方式分为共阴极和共阳极数码管。共阳极接法,把数码管的阳极连在一起,使用时公共阳极接+5V,这时阴极接低电平的段数码管就导通点亮,而接高电平的则不点亮。共阴极接法,把数码管的阴极接在一起,使用时公共阴极接地,这时阳极接高电平的段数码管就导通点亮,而接低电平的则不亮。 数码管动态显示方式采用扫描法轮流点亮各个LED数码管:某时刻段选控制端口输出一个字符的显示码,同时位选控制端口选中其中的一个数码管进行显示,这样周而复始,将各显示码依

10、次送到被选中的数码管,当显示频率达到几百赫兹时,由于人眼的视觉暂留原理,就好像数码管将需要显示的数据“同时”显示了出来。在本实验中,P1端口用做位选,P0端口用做段选。电原理图:见图5。图5. 数码管扫描电路原理图2系统完整的原理图 见图6。三程序设计1模块化程序设计 模块化程序设计方法的基本思路是:把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围。具体说,可采取以下方法来保证得到结构化的程序:自顶向下;逐步细化;模块化设计;结构化编码。利用模块化的设计方法,考虑周全,结构清晰,层次分明,作者容易写,读者容易看。开始2总的程序流程框图否否否否是是是是显示当

11、前输出读取电压值读取温度值待命读取电压值和温度值定义外部变量k系统初始化显示“P”k=”3”k=”2”?k=”1”?k=”8”?k变化?KeyScan,得到k值输出“P”输出温度值输出电压值输出电压和温度3各部分程序设计(1) 电压读取与输出显示部分 该模块的主要功能是读取A/D转换后的电压值,并将电压值通过显示程序送到数码管显示出来。主要包含的函数有:ReadAdc(),Delay(),DispVol(),AdcInit()。各函数功能如下所示: ReadAdc():读取A/D转换结果并返回8位ADC代码; Delay():电压显示部分的延时函数; DispVol():将ADC值转换成电压值

12、,并显示出来;AdcInit():初始化ADC接口。 (2) VolTab.H 8位A/D转换结果对应的电压数据表,可直接用于显示。 (3) 温度读取与输出显示部分 该模块的主要功能是读取LM75A温度寄存器中的温度值,并将温度值通过显示程序送到数码管显示出来。主要包含的函数有:LM75A_GetTemp(),Delay75(),ByteToStr(),DispTemp()。各函数功能如下所示: LM75A_GetTemp():读出LM75A的温度值并返回LM75A温度寄存器的数值; Delay75():温度显示部分的延时函数; DispTemp():在数码管上显示出温度值; ByteToSt

13、r():将字节型变量c转换为十进制字符串。 (4)显示模块 该模块的主要功能是为各种需要在数码管上显示数据的程序提供显示功能。主要包含的函数有:T1INTSVC(),DispClear(),DispChar(),DispStr(),DispDotOn(),DispInit()。各函数功能如下所示: T1INTSVC():定时器T1的中断服务函数; DispClear():清除数码管的所有显示; DispChar():在数码管上显示字符; DispStr():在数码管上显示字符串; DispDotOn():显示指定位的小数点; DispInit():数码管扫描显示初始化。 (5)模拟I2C总线模

14、块该模块是标准80C51单片机模拟I2C总线的主机程序。主要包含的函数有:I2C_Delay(),I2C_Init(),I2C_Start(),I2C_Write(),I2C_Read(),I2C_GetAck(),I2C_PutAck(),I2C_Stop(),I2C_Puts(),I2C_Put(),I2C_Gets(),I2C_Get()。各函数功能如下所示: I2C_Delay():延时,模拟I2C总线专用; I2C_Init():I2C总线初始化,使总线处于空闲状态;I2C_Start():产生I2C总线的起始状态;I2C_Write():向I2C总线写1个字节的数据;I2C_Rea

15、d():从从机读取1个字节的数据;I2C_GetAck():读取从机应答位。返回0从机应答,返回1从机非应答;I2C_PutAck():主机产生应答位或非应答位;I2C_Stop():产生I2C总线的停止状态;I2C_Puts():主机通过I2C总线向从机发送多个字节的数据;I2C_Put():主机通过I2C总线向从机发送1个字节的数据;I2C_Gets():主机通过I2C总线从从机接收多个字节的数据;I2C_Get():主机通过I2C总线从从机接收1个字节的数据; (6)主函数模块该模块的主要功能是系统初始化,定义按键,调用各模块完成系统功能等。主要包含的函数有:KeyScan(),SysI

16、nit(),main()。各函数功能如下所示: KeyScan():键盘扫描函数; SysInit():系统初始化函数; main():调用各模块完成系统功能。四系统调试1硬件该系统的调试采用SmartSOPC 实验箱和Quick51核心板。SmartSOPC教学实验开发平台集众多功能于一体,是SOPC、DSP、EDA、ARM、ARMSOC以及8051教学实验、科研开发的最佳选择。开发平台采用“主板+核心板”的模式,更换不同的核心板即可试验不同平台的功能。Quick51正是跟SmartSOPC相配套的8051单片机核心板。它是一款自由的、开放系统资源的单片机实验板。单片机芯片采用Philip最

17、新推出的拥有64KB Flash的增强型8052内核单片机P89LV51RD2,工作电压3.3V。Quick51与SmartSOPC配合,可以做各种单片机教学实验,如LED点阵扫描显示、键盘检测、动态数码管、液晶屏、电机驱动、I2C总线、红外收发、蜂鸣器、数字温度计、电子钟等等。 跳线连接情况如下所示:Quick51板上跳线JP1JP7为默认设置,JP1:VCC与/EA短接,JP2:/PSEN与GND断开,JP3:RST与RC短接,JP4JP6:A16A18全接GND,JP7:RXD短接、TXD短接;Quick51板J14的PB-LE用杜邦线连接到J9;SmartSOPC实验箱JP6的KEY1

18、、KEY2、KEY3和KEY8分别用跳线帽短接,JP6其它跳线全部断开; Quick51板的P1端口用8芯排线连接到 SmartSOPC实验箱B3区的COM6;Quick51板的J11(PB端口)用8芯排线连接到 SmartSOPC实验箱B3区的COM3;Quick51板J5的INT1用杜邦线连接到SmartSOPC实验箱C2区的SCL;Quick51板J5的T0用杜邦线连接到SmartSOPC实验箱C2区的SDA; Quick51板J5的T1用杜邦线连接到SmartSOPC实验箱D4区的nCS;Quick51板J5的WR用杜邦线连接到SmartSOPC实验箱D4区的DAT;Quick51板J

19、5的RD用杜邦线连接到SmartSOPC实验箱D4区的CLK。2软件 在参考原有程序的基础上,对程序按要求进行修改,并分模块保存,程序修改好后进行调试,调试过程中应先分模块进行调试,首先确保电压能够正常显示,调试好后再将温度模块加入并使得温度可以正常显示,最后再添加交替显示部分,各部分模块都能正常显示后,再调试使二者能够在适当的时间进行交替,不至于时间过长或过短,这时主要注意程序中延时长度的选择。同时还要注意在交替显示时能否进行实时采样,若不能,这时,应使在电压和温度的显示过程中,对电压或温度进行多次采样。五参考文献1 谭浩强著 . C程序设计(第三版).北京:清华大学出版社,20052 徐惠

20、民,安德宁,丁玉珍著 .单片微型计算机原理、接口及应用(第3版).北京:北京邮电大学出版社,20073 电子技术实验Quick51实验例程4 LM75A(Philips)数据手册5 TLC549数据手册附录1. 电压模块#include <reg51.h>#include "Disp.h"#include "VolTab.h"/定义TLC549操作接口sbit CS = P35;sbit DAT = P36;sbit CLK = P37;/*函数:ReadAdc()功能:读取A/D转换结果返回:8位ADC代码*/unsigned char R

21、eadAdc()unsigned char d;unsigned char n;CS = 0;n = 5;while ( -n != 0 );n = 8;dod <<= 1;if ( DAT ) d+;CLK = 1;CLK = 0;while ( -n != 0 );CS = 1;return d;/*函数:Delay()功能:延时(t*10)ms*/void Delay549(unsigned char t)doTH0 = 0xDC;TL0 = 0x00;TR0 = 1;while ( !TF0 );TR0 = 0;TF0 = 0; while ( -t != 0 );/*函数

22、:DispVol()功能:将ADC值转换成电压值,并显示参数:v:8位ADC结果*/void DispVol(unsigned char v)DispStr(3,VolTabv);DispDotOn(3);/*函数:AdcInit()功能:初始化ADC接口*/void AdcInit()CS = 1;CLK = 0;DAT = 1;ReadAdc();附录2. 温度模块#include <reg51.h>#include "Disp.h"#include "I2C.h"#include <string.h>/*函数:Delay()

23、功能:延时1ms65.536s参数:t>0时,延时(t*0.001)st=0时,延时65.536s*/void Delay75(unsigned int t)doTH0 = 0xFC;TL0 = 0x66;TR0 = 1;while ( !TF0 );TR0 = 0;TF0 = 0; while ( -t != 0 );/*函数:LM75A_GetTemp功能:读出LM75A的温度值返回:LM75A温度寄存器的数值(乘以0.125可得到摄氏度值)*/int LM75A_GetTemp()unsigned char buf2;int t;I2C_Gets(0x90,0x00,2,buf);

24、t = buf0;t <<= 8;t += buf1;t >>= 5;/去掉无关位return t;/*函数:ByteToStr()功能:字节型变量c转换为十进制字符串*/void ByteToStr(unsigned char idata *s, unsigned char c) unsigned char t;t = c / 10;*s+ = '0' + t;c -= t * 10;*s+ = '0' + c;*s = '0'/*函数:DispTemp()功能:在数码管上显示出温度值参数:t:补码,除以8以后才是真正温

25、度值*/void DispTemp(int t)code unsigned char Tab104 ="0","1","2","3","5","6","7","8", "9"unsigned char buf4;bit s;/符号位unsigned char i;/整数部分unsigned char d;/小数部分unsigned char x;/临时变量/分离出符号s = 0;if ( t < 0 )s =

26、1;t = -t;/分离出整数和小数部分i = t / 8;d = t % 8;/整数部分转换成字符串ByteToStr(buf,i);x = 4 - strlen(buf);/清除所有显示DispClear();/显示符号if ( s ) DispChar(x,'-');x+;/显示整数部分DispStr(x,buf);/显示小数点DispDotOn(4);/显示小数部分DispStr(5,Tabd);附录3. I2C模块#include "I2C.h"/定义延时变量,用于宏I2C_Delay()unsigned char data I2C_Delay_t

27、;/*宏定义:I2C_Delay()功能:延时,模拟I2C总线专用*/#define I2C_Delay()I2C_Delay_t = (I2C_DELAY_VALUE);while ( -I2C_Delay_t != 0 );/*函数:I2C_Init()功能:I2C总线初始化,使总线处于空闲状态说明:在main()函数的开始处,通常应当要执行一次本函数*/void I2C_Init()I2C_SCL = 1;I2C_Delay();I2C_SDA = 1;I2C_Delay();/*函数:I2C_Start()功能:产生I2C总线的起始状态说明:SCL处于高电平期间,当SDA出现下降沿时启

28、动I2C总线不论SDA和SCL处于什么电平状态,本函数总能正确产生起始状态本函数也可以用来产生重复起始状态本函数执行后,I2C总线处于忙状态*/void I2C_Start()I2C_SDA = 1;I2C_Delay();I2C_SCL = 1;I2C_Delay();I2C_SDA = 0;I2C_Delay();I2C_SCL = 0;I2C_Delay();/*函数:I2C_Write()功能:向I2C总线写1个字节的数据参数:dat:要写到总线上的数据*/void I2C_Write(unsigned char dat)unsigned char t = 8;doI2C_SDA =

29、(bit)(dat & 0x80);dat <<= 1;I2C_SCL = 1;I2C_Delay();I2C_SCL = 0;I2C_Delay(); while ( -t != 0 );/*函数:I2C_Read()功能:从从机读取1个字节的数据返回:读取的一个字节数据*/unsigned char I2C_Read()unsigned char dat;unsigned char t = 8;I2C_SDA = 1;/在读取数据之前,要把SDA拉高doI2C_SCL = 1;I2C_Delay();dat <<= 1;if ( I2C_SDA ) dat

30、|= 0x01;I2C_SCL = 0;I2C_Delay(); while ( -t != 0 );return dat;/*函数:I2C_GetAck()功能:读取从机应答位返回:0:从机应答1:从机非应答说明:从机在收到每个字节的数据后,要产生应答位从机在收到最后1个字节的数据后,一般要产生非应答位*/bit I2C_GetAck()bit ack;I2C_SDA = 1;I2C_Delay();I2C_SCL = 1;I2C_Delay();ack = I2C_SDA;I2C_SCL = 0;I2C_Delay();return ack;/*函数:I2C_PutAck()功能:主机产生

31、应答位或非应答位参数:ack=0:主机产生应答位ack=1:主机产生非应答位说明:主机在接收完每一个字节的数据后,都应当产生应答位主机在接收完最后一个字节的数据后,应当产生非应答位*/void I2C_PutAck(bit ack)I2C_SDA = ack;I2C_Delay();I2C_SCL = 1;I2C_Delay();I2C_SCL = 0;I2C_Delay();/*函数:I2C_Stop()功能:产生I2C总线的停止状态说明:SCL处于高电平期间,当SDA出现上升沿时停止I2C总线不论SDA和SCL处于什么电平状态,本函数总能正确产生停止状态本函数执行后,I2C总线处于空闲状态

32、*/void I2C_Stop()unsigned int t = I2C_STOP_WAIT_VALUE;I2C_SDA = 0;I2C_Delay();I2C_SCL = 1;I2C_Delay();I2C_SDA = 1;I2C_Delay();while ( -t != 0 );/在下一次产生Start之前,要加一定的延时/*函数:I2C_Puts()功能:主机通过I2C总线向从机发送多个字节的数据参数:SlaveAddr:从机地址(高7位是从机地址,最低位是写标志0)SubAddr:从机的子地址Size:数据的字节数*dat:要发送的数据返回:0:发送成功1:在发送过程中出现异常*/

33、bit I2C_Puts(unsigned char SlaveAddr, unsigned char SubAddr, unsigned char Size, char *dat)/检查长度if ( Size = 0 ) return 0;/确保从机地址最低位是0SlaveAddr &= 0xFE;/启动I2C总线I2C_Start();/发送从机地址I2C_Write(SlaveAddr);if ( I2C_GetAck() )I2C_Stop();return 1;/发送子地址I2C_Write(SubAddr);if ( I2C_GetAck() )I2C_Stop();ret

34、urn 1;/发送数据doI2C_Write(*dat+);if ( I2C_GetAck() )I2C_Stop();return 1; while ( -Size != 0 );/发送完毕,停止I2C总线,并返回结果I2C_Stop();return 0;/*函数:I2C_Put()功能:主机通过I2C总线向从机发送1个字节的数据参数:SlaveAddr:从机地址(高7位是从机地址,最低位是写标志0)SubAddr:从机的子地址dat:要发送的数据返回:0:发送成功1:在发送过程中出现异常*/bit I2C_Put(unsigned char SlaveAddr, unsigned cha

35、r SubAddr, char dat)return I2C_Puts(SlaveAddr,SubAddr,1,&dat);/*函数:I2C_Gets()功能:主机通过I2C总线从从机接收多个字节的数据参数:SlaveAddr:从机地址(高7位是从机地址,最低位是读标志1)SubAddr:从机的子地址Size:数据的字节数*dat:保存接收到的数据返回:0:接收成功1:在接收过程中出现异常*/bit I2C_Gets(unsigned char SlaveAddr, unsigned char SubAddr, unsigned char Size, char *dat)/检查长度if

36、 ( Size = 0 ) return 0;/确保从机地址最低位是0SlaveAddr &= 0xFE;/确保最低位是0/启动I2C总线I2C_Start();/发送从机地址I2C_Write(SlaveAddr);if ( I2C_GetAck() )I2C_Stop();return 1;/发送子地址I2C_Write(SubAddr);if ( I2C_GetAck() )I2C_Stop();return 1;/发送重复起始条件I2C_Start();/发送从机地址SlaveAddr |= 0x01;I2C_Write(SlaveAddr);if ( I2C_GetAck()

37、 )I2C_Stop();return 1;/接收数据for (;)*dat+ = I2C_Read();if ( -Size = 0 )I2C_PutAck(1);break;I2C_PutAck(0);/接收完毕,停止I2C总线,并返回结果I2C_Stop();return 0;/*函数:I2C_Get()功能:主机通过I2C总线从从机接收1个字节的数据参数:SlaveAddr:从机地址(高7位是从机地址,最低位是读标志1)SubAddr:从机的子地址*dat:保存接收到的数据返回:0:接收成功1:在接收过程中出现异常*/bit I2C_Get(unsigned char SlaveAdd

38、r, unsigned char SubAddr, char *dat)return I2C_Gets(SlaveAddr,SubAddr,1,dat);附录4. 显示模块/*Disp.c数码管扫描显示驱动程序*/#include <reg51.h>#include <absacc.h>/定义显示缓冲区(由定时中断程序自动扫描)unsigned char DispBuf8;/*函数:T1INTSVC()功能:定时器T1的中断服务函数*/void T1INTSVC() interrupt 3code unsigned char com = 0x01,0x02,0x04,0

39、x08,0x10,0x20,0x40,0x80;static unsigned char n = 0;TR1 = 0;TH1 = 0xFC;TL1 = 0x66;TR1 = 1;P1 = 0xFF;/暂停显示XBYTE0xE800 = DispBufn;/更新扫描数据P1 = comn;/重新显示n+;n &= 0x07;/*函数:DispClear()功能:清除数码管的所有显示*/void DispClear()unsigned char i;for ( i=0; i<8; i+ )DispBufi = 0x00;/*函数:DispChar()功能:在数码管上显示字符参数:x:

40、数码管的坐标位置(07)c:要显示的字符(仅限十进制数字和减号)*/void DispChar(unsigned char x, unsigned char c)/0123456789P的数码管字型数据code unsigned char Tab = 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;x &= 0x07;x = 7 - x;if ( c = '-' )DispBufx = 0x40;else if ( ( c >= '0' ) && ( c <= '9&

41、#39; ) )DispBufx = Tabc-'0'else if ( c = 'P' ) DispBufx = 0x73; /*函数:DispStr()功能:在数码管上显示字符串参数:x:数码管的坐标位置(07)*s:要显示的字符串(字符仅限十进制数字和减号)*/void DispStr(unsigned char x, unsigned char *s)unsigned char c;for (;)c = *s;if ( c = '0' ) break;s+;DispChar(x,c);x+;/*函数:DispDotOn()功能:显示指定位的小数点参数:x为数码管坐标*/void DispDotOn(unsigned char x)DispBuf7-x |= 0x80;/*函数:DispInit()功能:数码管扫描显示初始化*/void DispInit()DispClear();EA = 0;TMOD &= 0x0F;TMOD |= 0x10;TH1 =

温馨提示

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

评论

0/150

提交评论