简易数字电压表
目录
摘要及关键词……………………………………………………………… 2 一、实现方案……………………………………………………………… 3
1.硬件选择方案……………………………………………………… 4 2.程序设计…………………………………………………………… 12 二、系统的测试与结果…………………………………………………… 17 三、调试过程及问题解决方法…………………………………………… 18 四、课题设计的收获及心得……………………………………………… 18 参考文献…………………………………………………………………… 18
摘要:
本课题实验主要采用AT89S51芯片和ADC0809芯片来完成一个简易的数字电压表,能够对输入的0~5 V的模拟直流电压进行测量,并通过一个4位一体的7段LED数码管进行显示,测量误差约为0.02 V。该电压表的测量电路主要由三个模块组成:A/D转换模块、数据处理模块及显示控制模块。A/D转换主要由芯片ADC0809来完成,它负责把采集到的模拟量转换为相应的数字量再传送到数据处理模块。数据处理则由芯片AT89S51来完成,其负责把ADC0809传送来的数字量经一定的数据处理,产生相应的显示码送到显示模块进行显示;另外它还控制着ADC0809芯片的工作。显示模块主要由7段数码管及相应的驱动芯片(74HC245)组成,显示测量到的电压值。 关键词:简易数字电压表、ADC0809、AT89S51。 实现方案:
本实验采用AT89S51单片机芯片配合ADC0809模/数转换芯片构成一个简易的数字电压表,原理电路如图1-1所示。该电路通过ADC0809芯片采样输入口IN0输入的0~5 V的模拟量电压,经过模/数转换后,产生相应的数字量经过其输出通道D0~D7传送给AT89S51芯片的P0口。AT89S51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码,并通过其P1口经驱动芯片74HC245驱动,再传送给数码管。同时它还通过其三位I/O口P3.0、P3.1、P3.2产生位选信号,控制数码管的亮灭。另外,AT89S51还控制着ADC0809的工作。其ALE管脚为ADC0809提供了1MHz工作的时钟脉冲;P2.3控制ADC0809的地址锁存端(ALE);P2.4控制ADC0809的启动端(START);P2.5控制ADC0809的输出允许端(OE);P3.7控制ADC0809的转换结束信号(EOC)。系统框图如图1-2所示。
简易数字电压表
图1-1 电路原理图
图1-2 系统框图
硬件选择方案:
一.实验所需元器件:
1. AT89S51芯片 1块 2. ADC0809芯片 1块 3. 74HC245芯片 2块 4. 4位一体数码 1个 5. 6MHz晶振 1个 6. 33pF电容 2个 7. 0.1uF滤波电容 2个
- 1 -
简易数字电压表
8. 10uF电解电容 1个 9. 按键开关 1个 10.发光二极管 1个 11.4.7KΩ精密电位器 1个 12.510Ω电阻 12个 13.8.2KΩ电阻 1个 14.10KΩ电阻 1个 15.导线 若干
二.主要元器件的介绍
1. 模数转换芯片ADC0809:
ADC0809是典型的8位8通道逐次逼近式A/D转换器,其实物如图1-3所示。它可以和微型计算机直接接口。ADC0809转换器的系列芯片是ADC0808,可以相互替换。
图1-3 ADC0809实物图
1) ADC0809内部逻辑结构
图1-4 ADC0809的内部逻辑结构及引脚图
ADC0809的内部逻辑结构如图1-4所示。图中多路模拟开关可选通8路模拟通道,允许8路模拟量分时输入,并共用一个A/D转换器进行转换。地址锁存与译码电路完成对A、B、C三个地址位进行锁存与译码,如表1-1所示。
表1-1 ADC0809通道选择表 C(ADDC) B(ADDB) A(ADDA) 选择的通道 0 0 0 IN0 0 0 1 IN1 0 1 0 IN2 0 1 1 IN3 1 0 0 IN4
- 2 -
简易数字电压表
1 1 1 0 1 1 1 0 1 IN5 IN6 IN7 2) ADC0809的引脚
ADC0809芯片为28引脚双列直插式封装,其引脚排列如图1-4所示。 (1)IN0~IN7:8路模拟量输入通道。
(2)A、B、C:模拟通道地址线。这3根地址线用于对8路模拟通道的选择,其译码关系如表1-1所示。其中,A为低地址,C为高地址,引脚图中为ADDA,ADDB和ADDC。 (3)ALE:地址锁存允许信号。对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。 (4)START:转换启动信号。START上升沿时,复位ADC0809;START下降沿时启动芯片,开始进行A/D转换;在A/D转换期间,START应保持低电平。本信号有时简写为ST。 (5)D7~D0:数据输出线。为三态缓冲输出形式,可以和单片机的数据线直接相连。D0为最低位,D7为最高。
(6)OE:输出允许信号。用于控制三态输出锁存器向单片机输出转换得到的数据。OE=0,输出数据线呈高阻;OE=1,输出转换得到的数据。
(7)CLK:时钟信号。ADC0809的内部没有时钟电路,所需时钟信号由外界提供,因此有时钟信号引脚。通常使用频率为500KHz的时钟信号。
(8)EOC:转换结束信号。EOC=0,正在进行转换;EOC=1,转换结束。使用中该状态信号即可作为查询的状态标志,又可作为中断请求信号使用。 (9)Vcc: +5V电源,GND:地。
(10)Vref:参考电压。参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。其典型值为+5V(Vref(+)=+5V, Vref(-)=0V)。
3) ADC0809的工作原理:
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。 (注意:ALE信号常与START信号连在一起,这样连接可以在信号的前沿写入地址信号,在其后沿启动A/D转换,图1-5为ADC0809信号的时序配合图)。
- 3 -
简易数字电压表
图1-5 ADC0809信号的时序配合
2. 数据处理及控制芯片AT89S51:
AT89S51是美国ATMEL公司生产的低功耗、高性能CMOS 8位单片机。图1-6和1-7分别为其实物图和内部总体结构图。AT89S51片内含有4k字节Flash闪速存储器,128字节内部 RAM,32个I/O 口线,看门狗(WDT),两个数据指针,两个16 位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许 RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存 RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
图1-6 AT89S51实物图
1) 主要性能参数
与MCS-51产品指令系列完全兼容;
4K字节在系统编程(ISP)Flash闪速存储器; 1000次擦写周期;
4.0~5.5 V工作电压范围; 全静态工作模式:0Hz~33MHz; 三级程序加密锁; 128字节内部RAM; 32个可编程I/O口线; 2个16位的定时/计数器; 6个中断源;
- 4 -
简易数字电压表
图1-7 AT89S51芯片内部总体结构图
全双工串行UART通道; 低工耗空闲和掉电模式; 中断可从空闲模式唤醒系统; 看门狗(WDT)及双数据指针; 掉电标识和快速编程特性;
灵活的在系统编程(ISP-字节或页写模式)。
- 5 -
简易数字电压表
2) AT89S51的引脚:
AT89S51芯片为40引脚双列直插式封装,其引脚排列如图1-8所示。
图1-8 AT89S51的引脚图 (1)Vcc:电源电压; (2)GND:接地; (3)P0口:P0口是一组8位漏极开路双向I/O口,每位引脚可驱动8个TTL逻辑门
路。对P0口的管脚写“1”时,被定义为高阻抗输入。在访问外部数据存储器或程序存储器时,它可以被定义为数据总线和地址总线的低八位。在FLASH编程时,P0 口作为原码输入口;当FLASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。
(4)P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口的输出缓冲器可驱动4个TTL逻辑门电路。对P1口管脚写入“1”后,被内部上拉电阻拉高,可用作输入。P1口被外部下拉为低电平时,将输出电流,这是由于内部接有上拉电阻的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。P1口还具有第二功能,如表1-2所示。
表1-2 P1口的第二功能 端口引脚 第二功能 P1.5 P1.6 P1.7 MOSI(用于ISP编程) MISO(用于ISP编程) SCK(用于ISP编程)
(5)P2口:P2口是一个内部提供上拉电阻的8位双向I/O口,P2口的输出缓冲器可驱动4个TTL逻辑门电路。对P2口管脚写入“1”后,被内部上拉电阻拉高,可用作输入。P2口被外部下拉为低电平时,将输出电流,这是由于内部接有上拉电阻的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在访问8位地址外部数据存储器时,P2口线上的内容,在整个访问期间不改变。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
- 6 -
简易数字电压表
(6)P3口:P3口是一个内部提供上拉电阻的8位双向I/O口,P3口的输出缓冲器可驱动4个TTL逻辑门电路。对P3口管脚写入“1”后,被内部上拉电阻拉高,可用作输入。P3口被外部下拉为低电平时,将输出电流,这是由于内部接有上拉电阻的缘故。P3口除了一般I/O线的功能外,还具有更为重要的第二功能,如表1-3所示。P3口同时为FLASH编程和编程校验接收一些控制信号。
表1-3 P3口的第二功能 端口引脚 第二功能 RXD(串行输入口) P3.0 TXD(串行输出口) P3.1 P3.2 INT0(外部中断0) P3.3 P3.4 P3.5 P3.6 P3.7
INT1(外部中断1) T0(定时器0外部输入) T1(定时器1外部输入) WR(外部数据存储器写选通) RD(外部数据存储器读选通) (7) RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
(8) ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
(9)PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次PSEN有效。但在访问外部数据存储器时,这两次有效的PSEN信号将不出现。
(10)EA /VPP:当EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,EA将内部锁定为RESET;当EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
(11)XTAL1:片内高增益反向放大器的输入及内部时钟工作电路的输入。 (12)XTAL2:片内高增益反向放大器的输出端。
3) AT89S51与AT89C51的区别
AT89S51在AT89C51的基础上,又增加了许多功能,性能有了较大提升。
- 7 -
简易数字电压表
(1)ISP在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离。是一个强大易用的功能。
(2)工作频率为33MHz,大家都知道89C51的极限工作频率只有24M,就是说S51具有更高工作频率,从而具有了更快的计算速度。 (3)具有双工UART串行通道。 (4)内部集成看门狗计时器,不再需要像89C51那样外接看门狗计时器单元电路。 (5)双数据指示器。 (6)电源关闭标识。 (7)全新的加密算法,这使得对于89S51的解密变为不可能,程序的保密性大大加强,这样就可以有效的保护知识产权不被侵犯。 (8)兼容性方面:向下完全兼容51全部字系列产品。比如8051、89C51等等早期MCS-51兼容产品。在89C51上一样可以照常运行,这就是所谓的向下兼容。
4) AT89S51的复位电路
AT89S51的复位电路如图1-9所示。当单片机一上电,立即复位;另外,如果在运行中,外界干扰等因素使单片机的程序陷入死循环状态或“跑飞”,就可以通过按键使其复位。复位也是使单片机退出低功耗工作方式而进入正常状态的一种操作。
图1-9 复位电路
电容C和电阻R1实现上电自动复位。增加按键开关S和电阻R2又可实现按键复位功能。R2的作用是在S按下的时候,防止电容C放电电流过大烧坏开关S的触点。因保证R1/R2 >10。一般取C=10uF,R2=100Ω,R1=8.2KΩ。
5) AT89S51与ADC0809的连接
AT89S51与ADC0809的连接电路如图1-10所示。
AT89S51与ADC0809的连接必须注意处理好3个问题: (1)在START端送一个100ns宽的启动正脉冲;
(2)获取EOC端上的状态信息,因为它是A/D转换的结束标志;
(3)给“三态输出锁存器”分配一个端口地址,也就是给OE端送一个地址译码器的输出信号。
- 8 -
简易数字电压表
图1-10 AT89S51与ADC0809的连接电路
3. 驱动芯片74HC245
74HC245为三态输出的八组总线收发器,在本实验中作为驱动芯片使用,用于驱动数码管的点亮。图1-11和图1-12分别为其实物图和引脚图。
(1)A:A总线端; (2)B:B总线端;
(3)G:三态允许端(低电平有效); (4)DIR:方向控制端; (5)Vcc:电源; (6)GND:地。
图1-11 74HC245的实物图 图1-12 74HC245引脚图
4. 4位一体7段LED数码管
本实验的显示模块主要由一个4位一体的7段LED数码管(SM410564)构成,用于显示
- 9 -
简易数字电压表
测量到的电压值。它是一个共阳极的数码管,每一位数码管的原理图如图1-13所示。每一位数码管的a,b,c,d,e,f,g和dp端都各自连接在一起,用于接收AT89S51的P1口产生的显示段码。1,2,3,4引脚端为其位选端,用于接收AT89S51的P3口产生的位选码。图1-14和图1-15分别为其实物图和引脚图。
图1-13 一位数码管的原理图
图1-14 SM410564数码管实物图 图1-15 SM410564数码管引脚图
程序设计
1.主程序设计
初始化中主要对AT89S51,ADC0809的管脚和数码管的位选及所用到的内存单元70H,78H,79H,7AH 进行初始化设置。
准备工作做好后便启动ADC0809对IN0脚输入进的0~5V电压模拟信号进行数据采集并转换成相对应的0~255十进制数字量。
在数据处理子程序中,运用标度变换知识,编写算法将0~255十进制数字量转换成0.00~5.00V的数据,输出到显示子程序进行显示。
整个主程序就是在A/D转换,数据处理及显示程序循环执行。整个程序流程框图如图1-16所示。
- 10 -
简易数字电压表
2.各子程序设计
1)A/D转换子程序
启动ADC0809对模拟量输入信号进行转换,通过判断EOC(P3.1引脚)来确定转换是否完成,若EOC为0,则继续等待;若EOC为1,则把OE置位,将转换完成的数据存储到70H中。
程序流程图如图1-17所示。
图1-16 主程序流程图 图1-17 A/D转换程序流程图
2)数据处理子程序
数据处理子程序主要根据标度变换公式1-1,把0~255十进制数转换为0.00~5.00V
AXA0(AmA0)NXN0 (1-1)
NmN0AX:模拟测量值;A0:模拟输入最小值; Am:模拟输入最大值;
NX:模数转换后的值;N0:模/数转换后的最小值;Nm:模/数转换后的最大值。
在本设计中,根据要求知:A0=0V, Am=5V, N0=0, Nm=255,则公示1-1可化简为:
AXA0(AmA0)NXN0NN5·XX (1-2)
NmN025551程序流程图如图1-18所示。
3)显示子程序
- 11 -
简易数字电压表
显示子程序采用动态扫描法实现三位数码管的数值显示。测量所得的A/D转换数据放在70H内存单元中,测量数据在显示时需转换成10进制BCD码放在78H~7AH单元中。寄存器R1用作显示数据地址指针。程序流程图如图1-19所示。
图1-18 数据处理子程序流程图
3.源程序
ORG 0000H LJMP START ORG 0003H RETI
ORG 000BH RETI
ORG 0013H RETI
ORG 001BH RETI
ORG 0023H RETI
ORG 002BH RETI
ORG 0030H
图1-19 显示子程序流程图 - 12 -
简易数字电压表
;初始化参数
START: CLR A SETB P3.7 ;初始化EOC CLR P3.0 ;初始化LED位选,全不选中。 CLR P3.1 CLR P3.2 MOV P2 , A ;初始化P2口,清除对ADC0809的控制信号。 MOV 70H , A ;初始化数据采样后存储空间。 MOV 78H , A ;初始化数据处理后3位有效数字的存储空间(78H最高位,7AH最低位)。 MOV 79H , A MOV 7AH , A MOV A , #0FFH ;初始化P0,P1口,写入高电平。 MOV P0 , A MOV P1 , A
;主程序
MAIN: LCALL AD_SUB ;调用A/D转换子程序,开始采样并转换。
LCALL TURN_SUB ;调用数码转换子程序,将采样转换来的0-255转换成一一对应的
;0.00-5.00
LCALL DISP_SUB ;调用显示子程序。 LJMP MAIN
;==============================================================================
;A/D转换子程序 AD_SUB: CLR A MOV P2 , A ;初始化P2口,清除对ADC0809的控制信号。 MOV R0 , #70H LCALL AD_ST ;调用采样转换子程序
WAIT: JB P3.7 , DATASAVE ;判断采样转换是否完毕,完毕则跳转到DATASAVE进行存储。 ;否则继续等待。 AJMP WAIT
;启动采样,送脉冲时序
AD_ST: SETB P2.3 ;ALE 脉冲时序 NOP NOP CLR P2.3 SETB P2.4 ;START 脉冲时序(上跳清零,下跳开始转换) NOP NOP CLR P2.4 NOP NOP RET
;采样转换的数据存储
- 13 -
简易数字电压表
DATASAVE: SETB P2.5 ;置位OE端,允许ADC0809输出数据 MOV A , P0 ;将转换的数据存储到70H中 MOV @R0 , A CLR P2.5 CLR A ;初始化P0,P1,P2口(P0,P1高电平,P2低电平) MOV P2 , A MOV A , #0FFH MOV P0 , A MOV P1 , A RET
;将0~255转换为0.00~5.00
TURN_SUB: MOV A , @R0 MOV B , #51 DIV AB MOV 78H , A ;以上这一段是整数部分(个位)放入78H MOV A , B ;余数部分放入A CLR F0 SUBB A , #1AH ;余数和51的一半即1AH比较,以便四舍五入 MOV F0 , C MOV A , #10 MUL AB ;余数乘以10,以便再除以51 MOV B , #51 DIV AB JB F0 , LOOP1 ;判断四舍五入,跳到LOOP1是“四舍” ADD A , #5 ;这是“五入”
LOOP1: MOV 79H , A ;十分位 MOV A , B CLR F0 SUBB A , #1AH MOV F0,C MOV A , #10 MUL AB MOV B , #51 DIV AB JB F0 , LOOP2 ADD A , #5
LOOP2: MOV 7AH , A ;百分位 RET
;==============================================================================
;显示子程序
DISP_SUB: MOV R1 , #78H ;R1辅助寄存器,用于存放要显示的数据的地址(初始为最高位78H) CLR A MOV P1 , #0FFH ;初始化P1,P2口(P1高电平,P2低电平) ANL P2 , A LCALL PLAY ;调用显示位码子程序
- 14 -
简易数字电压表
CLR P1.7 ;显示最高位(个位)后的小数点 SETB P3.0 ;选中最高位LED数码管 LCALL DELAY ;调用延迟子程序 CLR P3.0 ;取消最高位位选 INC R1 ;提取第二位有效数字(十分位)的数据地址(79H) LCALL PLAY ;调用显示位码子程序 SETB P3.1 ;选中第二位LED数码管 LCALL DELAY ;调用延迟子程序 CLR P3.1 ;取消第二位位选 INC R1 ;提取最低位(百分位)的数据地址(7AH) LCALL PLAY ;调用显示位码子程序 SETB P3.2 ;选中最低位LED数码管 LCALL DELAY ;调用延迟子程序 CLR P3.2 ;取消最低位位选 RET
;位码显示
PLAY: MOV A , @R1 ;送偏移量 MOV DPTR , #TAB ;送表首地址 MOVC A , @A+DPTR ;查表得出相应LED段码 MOV P1 , A ;输出显示 RET
;==============================================================================
;延时程序
DELAY: MOV R6 , #10H DL1: MOV R7 , #10H DL2: DJNZ R7 , DL2 DJNZ R6 , DL1 RET
;==============================================================================
;0-9段码 TAB: DB 0C0H , 0F9H , 0A4H , 0B0H , 99H , 92H , 82H , 0F8H , 80H , 90H END
系统的测试及实验结果
1.硬件实物图
图1-20 实验硬件实物图
- 15 -
简易数字电压表
2.测量结果 显示数值(V) 0.45 1.07 2.21 3.15 4.05 4.60 5.00 测量数值(V) 0.458 1.075 2.217 3.158 4.060 4.620 5.020 系统调试中遇到的问题及解决的方法
1)实验初期,我们选用的是三极管作为数码管的驱动元件,但是在测试过程中发现数码管显示不稳定,发生频闪现象,而且亮度不够。我们就换用了74HC245芯片作为驱动元件,解决了上述问题。
2)在应用滤波电容的过程中,一开始是把电容串联在电路中,导致电路无法导通,而后我们短路电容,解决了问题。
3)电源指示灯上,一开始发现接上电源,指示灯不亮,经过仪器测量发现正负极接反,后重新焊接,问题解决。
4)由于源程序的多处错误,使得仿真无法通过,后经过单步调试,把存在的错误一一排除,通过了软件仿真。
5)在烧录芯片的过程中,由于选择烧录文件的错误及芯片自身问题(因多次烧录,无法再次烧录)使得烧录失败,后经过老师指导并更换了AT89C51芯片,解决了问题。
心得体会
通过本次课题设计,我们对单片机这门课程有了更进一步的了解。无论是在其硬件连接方面还是在软件编程方面,都取得了新的收获。本次实验采用了AT89S51单片机芯片,与以往我们我们所熟悉的C51芯片有许多不同之处,通过本次实验及查阅相关资料,我们对其之间的区别有了一定的认识,在本课题设计报告的硬件介绍部分也对其作了详细的论述。S51在C51的基础上增加了许多新的功能,使其功能更为完善,应用领域也更为广泛。另外,在对单片机编程方面,我们又掌握了一些新的编程思想,使得程序更为简练、易懂,而且更为严谨,程序执行的稳定性得到了提高。
实验中我们还用到了模/数转换芯片ADC0809,以前在学单片机这门课程时只是对其理论知识有了初步的了解。通过本次实验,我们对它的工作原理彻底理解了,对其启动设置、转换结束判断以及输出控制等都基本掌握。电路连接方面,我们对其与单片机的连接也有了更为直观的认识,通过实验的摸索以及必要的理论知识,我们准确的实现了它于单片机的互连。
这是我们第一次涉及实物元器件焊接的实验,对焊接技术掌握的还不够。另外,在布线方面,我们也存在一些问题,导致我们做好的电路板在外观上不怎么美观。在以后的实验中,我们会吸取经验,不断提高在这方面的能力。
参考文献
1.( 978-7-301-10760-7/TN•0032) 魏立峰 王宝兴、《单片机原理及应用技术》、2006年8月、第一版、北京大学出版社、P165~P169。 2.( 9787560935911) 胡乾斌、《单片机原理与应用》、2006年2月、第二版 、华中科技大学出版社、P20~P24。 3.( 9787810778374) 李广弟 朱月秀 冷祖祁、《单片机基础》、2007年6月、第一版、北京航空航天大学出版社、P65~P67。
- 16 -
因篇幅问题不能全部显示,请点此查看更多更全内容