2. 波形图 3. 程序流程图。 程序主流程图如下:开始打开显示器并设置D/A地址,#7FFFH(DPTR)P2.0=0?P2.1=0?P2.2=0?P2 0它是一种低电压、高性能的CMOS 8位微处理器,带有可编程可擦只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory),俗称微控制器。 AT89C2051是一款具有2K字节闪存可编程和可擦除只读存储器的微控制器。 单片机的可擦除只读存储器可重复擦除10
3.00次。 该器件采用ATMEL的高密度非易失性存储器制造技术制造,与行业标准MCS-51指令集和输出引脚兼容。 ATMEL 的 AT89C51 是一款高效的微控制器,它将多功能 8 位 CPU 和闪存组合在一个芯片中,其中 AT89C2051 是一个精简版本。 AT89C 微控制器为许多嵌入式控制系统提供了高度灵活且廉价的解决方案。 外观及引脚排列如下图所示: 图3.4 AT89C51 引脚图 AT89C51 引脚说明: VCC:供电电压。 GND:接地。 P0 口:P0 口是一个 8 位开漏双向 I/O 口,每个引脚可吸收 8TTL 栅极电流。 当第一次向P1端口引脚写入1时,定义为高阻输入。 P0可用于外部程序数据存储器,可定义为数据/地
4. 地址的第八位。 FIASH编程时,P0口作为原始代码输入口。 当FIASH进行验证时,P0输出原始代码。 此时P0外部必须拉高。 P1 端口:P1 端口是一个 8 位双向 I/O 端口,内部带有上拉电阻。 P1端口缓冲器可以接收和输出4TTL栅极电流。 P1口引脚写1后,内部拉高,可作为输入使用。 当P1端口被外部下拉至低电平时,将输出电流。 这是由于内部上拉所致。 在 FLASH 编程和验证期间,P1 端口作为第八个地址被接收。 P2端口:P2端口是一个8位双向I/O端口,内部带有上拉电阻。 P2端口缓冲器可以接收和输出4路TTL栅极电流。 当“1”写入P2端口时,其引脚被内部上拉。 上拉电阻拉高,作为输入。 因此,当用作输入时,P2端口引脚被外部拉低,电流就会输出。这是由于内部
5.因为引体向上。 当端口P2用于访问外部程序存储器或16位地址外部数据存储器时,端口P2输出地址的高八位。 当给出地址“1”时,它利用内部上拉。 当读写外部八位地址数据存储器时,P2口输出其特殊功能寄存器的内容。 P2口接收FLASH编程和验证时的高八位地址信号和控制信号。 P3端口:P3端口引脚是8个双向I/O端口,内部有上拉电阻,可以接收和输出4路TTL栅极电流。 当向P3端口写入“1”时,它们被内部上拉至高电平并用作输入。 作为输入时,由于外部下拉为低电平,端口 P3 将因上拉而输出电流(ILL)。 RST:复位输入。 当振荡器复位器件时,RST 引脚必须保持高电平两个机器周期。 ALE/PROG:访问外部时
6、在存储器中,地址锁存器允许的输出电平用于锁存地址的状态字节。 在FLASH编程时,该引脚用于输入编程脉冲。 正常情况下,ALE端输出一个频率周期恒定的正脉冲信号,该频率为振荡器频率的1/6。 因此,它可以用作外部输出的脉冲或用于计时目的。 然而,请注意,每当用作外部数据存储器时,ALE 脉冲都会被跳过。 如果要禁用 ALE 输出,请将 SFR8EH 地址设置为 0。 此时,ALE仅在MOVX和MOVC指令为ALE时才起作用。 此外,该引脚被稍微拉高。 如果微处理器处于外部执行状态 ALE 禁用,则设置该位无效。 /PSEN:外部程序存储器的选通信号。 /PSEN 在从外部程序存储器取指令期间每个机器周期被置位两次。但是当访问外部数据存储器时,这两个
7. 第二个有效/PSEN 信号不会出现。 /EA/VPP:当/EA保持低电平时,在此期间使用外部程序存储器(0000H-FFFFH),无论是否有内部程序存储器。 注意,在加密模式1下,/EA内部锁定为RESET; 当/EA端保持高电平时,内部程序存储器被锁定。 在 FLASH 编程期间,该引脚还用于施加 12V 编程电源(VPP)。 XTAL1:反向振荡放大器的输入和内部时钟运算电路的输入。 XTAL2:反相振荡器的输出。 2、DAC0832 DAC0832是一款8位分辨率的D/A转换集成芯片,与处理器完全兼容。 它具有价格低廉、界面简单、转换控制方便等优点。 广泛应用于微控制器应用系统中。 D/A 转换器由一个八位输入锁存器、一个八位 D
8、由AC寄存器、八位D/A转换电路和转换电路组成。 DAC0832的输出为电流型,但在实际应用中,往往需要电压输出信号,因此需要外部运算放大器来转换电压。 其引脚如下图 1 所示: 图 1:DAC0832 引脚图 D0D7:八位数据输入线 ILE:数据锁存允许控制信号输入线,高电平有效 CS:片选信号输入线,低电平有效 WR1:写输入寄存器选通信号,低电平有效 XFER:数据传输控制信号输入线,低电平有效 WR2:DAC 寄存器写选通输入线,低电平有效 IOUT1:电流输出线。 输入全为1时,IOUT1最大 IOUT2:电流输出线。其值与OUT1之和为常数 RFB:反馈信号输入线,芯片内部有反馈电阻
9. Vcc:电源输入线(+5+15V) Vref:参考电压输入线(-10+10V) AGND:模拟地,模拟信号和参考电源的检测地 DGND:数字地,两条地线分别是在参考电源上共存比较好。 根据DAC0832的数据锁存器和DAC寄存器的控制方式的不同,DAC0832具有三种工作模式:直通模式、单缓冲模式和双缓冲模式。 可使用软件指令来控制这五个控制端子:ILE、CS、WR1、WR2、XFER。 直通工作模式:5个控制端全部有效,直接D/A转换单缓冲工作模式:5个控制端同时选通,即两个输入寄存器中任意一个为直通模式,且另一路工作在受控模式双缓冲工作方式:5个控制端选通两次,即两个锁存器都处于受控状态。 在这个设计中,我们让
10、DAC0832工作在单缓冲模式,其ILE接+5V。 /CS和/XFER连接后,由8051的P2.7控制。/WR1和/WR2连接后,由8051的/WR控制。DAC0832的地址为7FFFH。 它工作在单缓冲模式,并对DAC0832执行写操作。 即可完成AD/A转换。 3.74LS47芯片 74LS47是BCD-7段数码管解码器/驱动器。 74LS47的功能是用来将BCD码转换成数字块中的数字。 通过它的解码,可以将数字直接转换成数字显示的数字。 这简化了程序并节省了微控制器的I/O开销。 因此这是一个非常好的芯片。 引脚图2如下:BCBDVCCfg123AGNDabcde456780911图2
11.:74LS47引脚图 D、C、B、A:BCD码输入引脚 a、b、c、d、e、f、g:7段LED数码管输出引脚 LT:测试引脚,当该引脚输入时低电平,所接的7段数码管全亮。 通常,应输入高打点:纹波淹没输入引脚。 正常情况下,应输入高电平BI/RBO:淹没输入或纹波淹没输出引脚。 正常显示时,应输入高电平或空接。 若该引脚输入低电平,且D、C、B、A引脚输入为0,则不显示该位。 该功能用于消除前导 0 或尾随 0。 D、C、B、A:BCD 码输入引脚 a、b、c、d、e、f、g:7 段 LED 数码管输出引脚 LT:测试引脚,当该引脚输入低电平时,所接的7段数码管全亮。正常情况下,应该丢失
12. 输入高电平打点:纹波涌入输入引脚。 正常情况下,应输入高电平BI/RBO:淹没输入或纹波淹没输出引脚。 正常显示时,应输入高电平或空接。 如果该引脚输入低电平且D、C、B、A引脚输入为0,则不显示该位。 该函数用于消除前导0或消除尾随0.3。 7段数码管 7段数码管一般由8个发光二极管组成,其中7个细长发光二极管组成数字显示,另一个圆形发光二极管显示小数点。 当发光二极管点亮时,相应的点或笔画就会发光。 通过控制相应二极管的导通,可以显示各种字符。 发光二极管的阳极连接在一起称为共阳极数码管,阴极连接在一起称为共阴极数码管。 图3:七段数码管引脚图 4、硬件接线图 显示部分:波形生成部分:按钮部分
13.:总体电路图: 4.软件设计: 1.锯齿波模块8051单片机的累加器A从0开始,循环递增。 每增量写入一个数据到DAC0832以获得一个输出电压,从而产生一个正方向的阶跃波。 程序如下: LOOP1:;正向锯齿波 MOV R1,#02H; L呼叫显示; L11:MOV R3,#00H; L12:MOV A,R3; MOVX DPTR,A; INC R3; CJNE R3,#0FFH,L12; JB P2.1,STR; AJMP L11; 延时子程序:如程序如下:DELAY:MOV R6,#0AH; 延时 1ms 子程序 DEL2:MOV R7,#32HDEL1:DJNZ R7,DEL1DJNZ
14.R6,DEL2RET。 通过改变延迟子程序中延迟时间的长度,可以改变输出波形的周期。 2 三角波模块。 在上述反向锯齿波的前提下,如果想要获得正向锯齿波,只需要将上述程序中的指令 INCA 替换为指令 DECA 即可。 如果要获取任意起始电压和终止电压的波形,首先需要确定起始电压和终止电压对应的数字。 程序中从起始电压对应的数字量开始输出,到达终止电压对应的数字量时返回,以此类推。 将正锯齿波和负锯齿波组合即可得到三角波。 程序如下: LOOP2:;三角波 MOV R1,#03HLCALL DISPL21:MOV R3,#00HL22:MOV A,R3MOVX DPTR,AINC R3CJNE R3,#0FFH, L
15. 22L23:DEC R3MOV A、R3MOVX DPTR、ACJNE R3、#00H、L23JB P2.2、STRAJMP L213 方波模块:方波信号也是波形发生器中常用的信号。 下面的程序可以从DAC输出端得到矩形波。 当延时子程序的延时时间大致相同时,为方波。 通过改变延迟时间,可以获得不同占空比的矩形波。 上限电平以及上限电平对应的数字量可以参考上一节。 通过上述方法获得。 程序如下:L0:MOV A,#0FFH;方波MOVX DPTR,ALCALL DELAYMOV A,#00HMOVX DPTR,ALCALL DELAYJB P2.0,STRLJMP L04。 梯形图模块梯形图程序:LOOP3:;梯形波 MOV R1,#05HLCALL DISPL41: MOV R3,#00HL42:MOV A,R3MOVX DPTR,AINC R3CJNE R3,#0FFH,L42LCALL DELAYL43:DEC R3MOV A,R3MOVX DPTR,ACJNE R3,# 00H,L43L呼叫延迟JB P2.3,STRAJMP L41