单片机课程设计波形发生器报告.docx
单片机课程设计波形发生器报告 目录 第一章 概述2 第二章 设计任务3 第三章 硬件设计3 3.1系统主体构造3 3.2硬件元件概述3 3.3硬件连接9 3.4硬件参数简介10 第四章 软件设计10 4.1锯齿波程序设计11 4.2三角波程序设计12 4.3正弦波程序设计13 第五章 系统功能描述和功能15 第六章 设计心得16 第七章 参考文献16 附录16 程序设计 20 单片机课程设计 第一章 概述 课程设计是一项重要的实践性教育环节,是学生在完成本专业所有课程学习后必须接受的一项结合本专业方向的、系统的、综合的工程训练。在教师指导下,运用工程的方法,通过一个较复杂课题的设计练习,可使学生通过综合的系统设计,熟悉设计过程、设计要求、完成的工作内容和具体的设计方法,掌握必须提交的各项工程文件。 课程设计的基本目的是:培养理论联系实际的设计思想,训练综合运用电路设计和有关先修课程的理论,结合生产实际分析和解决工程实际问题的能力,巩固,加深和扩展有关电子类方面的知识。 课程设计的主要任务是运用所学微控制器技术、微机原理等方面的知识,设计出一台以AT89C51为核心的单片机数据采集、通讯或测控系统,完成信息的采集、处理、输出及人机接口电路等部分的软、硬件设计。 多功能波形发生器设计课题需要充分灵活运用编程语言所提供的各种指令语句,巧妙利用软硬件实现以上所要求的功能,在程序逻辑设计上也要求正确,合理的对项目进行分解分块,合理的逻辑设计可以起到事半功倍的效果,是整个项目当中最富有创新性和挑战性的部分。 2 单片机课程设计 第二章 设计任务 本次设计要求采用单片机和DAC设计波形发生器,具体要求如下: 利用单片机和DAC0832产生三角波、正弦波等波形。 完成DAC与运放的连接,输出可供示波器显示。 用按键改变波型的种类,同时显示波形的代号,波形的幅值与频率。 第三章 硬件设计 3.1 系统主体构造 芯片方面选用AT89C51与DAC0832为主要芯片,根据要求采用键盘选择产生的波形的类型,所以基本电路有键盘电路,数模转换电路。整体框架图如下所示: 锯齿波 单 片 机 0832 D/A转三角波 正弦波 运放 示波器 3.2硬件元件概述 3 单片机课程设计 本次设计所采用的硬件资源主要有: 3.2.1 AT89C51单片机 其引脚图如图所示。 U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161718XTAL29RST293031PSENALEEA12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51PROGRAM=Text3.HEX图3.1 AT89C51引脚图 芯片的引脚描述如下: 1、主电源引脚VCC和VSS VCC接+5V电压; VSS接地。 2、外接晶体引脚XTAL1和XTAL2 XTAL1接外部晶体的一个引脚。在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。当采用外部振荡器时,对HMOS单片机,此引脚应接地;对CHMOS单片机,此引脚作为驱动端。 XTAL2接外晶体的另一端。在单片机内部,接至上述振荡4 单片机课程设计 器的反相放大器的输出端。采用外部振荡器时,对HMOS单片机,该引脚接外部振荡器的信号,即把外部振荡器的信号直接接到内部时钟发生器的输入端;对XHMOS,此引脚应悬浮。 3、控制或与其它电源复用引脚RST/VPD、ALE/PROG、PSEN和EA/VPP RST/VPD当振荡器运行时,在此脚上出现两个机器周期的高电平将使单片机复位。推荐在此引脚与VSS引脚之间连接一个约8.2k的下拉电阻,与VCC引脚之间连接一个约10F的电容,以保证可靠地复位。 VCC掉电期间,此引脚可接上备用电源,以保证内部RAM的数据不丢失。当VCC主电源下掉到低于规定的电平,而VPD在其规定的电压范围内,VPD就向内部RAM提供备用电源。 ALE/PROG:当访问外部存贮器时,ALE的输出用于锁存地址的低位字节。即使不访问外部存储器,ALE端仍以不变的频率周期性地出现正脉冲信号,此频率为振荡器频率的1/6。因此,它可用作对外输出的时钟,或用于定时目的。然而要注意的是,每当访问外部数据存储器时,将跳过一个ALE脉冲。ALE端可以驱动8个LS型的TTL输入电路。 对于EPROM单片机,在EPROM编程期间,此引脚用于输入编程脉冲。 PSEN:此脚的输出是外部程序存储器的读选通信号。在从外部程序存储器取指令期间,每个机器周期两次PSEN5 单片机课程设计 有效。但在此期间,每当访问外部数据存储器时,这两次有效的PSEN信号将不出现。PSEN同样可以驱动8个LS型的TTL输入。 EA/VPP:当EA端保持高电平时,访问内部程序存储器,但在PC值超过0FFFH或1FFFH时,将自动转向执行外部程序存储器内的程序。当EA保持低电平时,则只访问外部程序存储器,不管是否有内部程序存储器。对于常用的8031来说,无内部程序存储器,所以EA脚必须常接地,这样才能只选择外部程序存储器。 对于EPROM型的单片机,在EPROM编程期间,此引脚也用于施加21V的编程电源。 4、输入/输出引脚P0、P1、P2、P3 P0口:是双向8位三态I/O口,在外接存储器时,与地址总线的低8位及数据总线复用,能以吸收电流的方式驱动8个LS型的TTL负载。 P1口:是准双向8位I/O口。由于这种接口输出没有高阻状态,输入也不能锁存,故不是真正的双向I/O口。P1口能驱动4个LS型的TTL负载。对8052、8032,P1.0引脚的第二功能为T2定时/计数器的外部输入,P1.1引脚的第二功能为T2EX捕捉、重装触发,即T2的外部控制端。对EPROM编程和程序验证时,它接收低8位地址。 P2口:是准双向8位I/O口。在访问外部存储器6 单片机课程设计 时,它可以作为扩展电路高8位地址总线送出高8位地址。在对EPROM编程和程序验证期间,它接收高8位地址。P2可以驱动4个LS型的TTL负载。 P3口:是准双向8位I/O口,在MCS-51中,这8个引脚还用于专门功能,是复用双功能口。P3能驱动4个LS型的TTL负载。 作为第一功能使用时,就作为普通I/O口用,功能和操作方法与P1口相同。 作为第二功能使用时,各引脚的定义如表所示。 值得强调的是,P3口的每一条引脚均可独立定义为第一功能的输入输出或第二功能。 第二功能描述如下: P3.0 10 RXD P3.1 11 TXD P3.2 12 INT0 P3.3 13 INT1 P3.4 14 T0 P3.5 15 T1 P3.6 16 WR P3.7 17 RD 3.2.2 D/A转换0832芯片 7 单片机课程设计 DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器。DAC0832输出的是电流,一般要求输出是电压,所以还必须经过一个外接的运算放大器转换成电压。其芯片引脚图如图所示, DAC0832引脚图 引脚功能如下: D0D7:数字信号输入端。 ILE:输入寄存器允许,高电平有效。 CS:片选信号,低电平有效。 WR1:写信号1,低电平有效。 XFER:传送控制信号,低电平有效。 WR2:写信号2,低电平有效。 IOUT1、IOUT2:DAC电流输出端。 RFB:是集成在片内的外接运放的反馈电阻。 VREF:基准电压。 8 单片机课程设计 VCC:是源电压。 AGND:模拟地 NGND:数字地,可与AGND接在一起使用。 3.3 硬件连接 3.3.1 数模转换电路 数模转换电路采用的是DAC0832芯片。它是一种使用较多的8位D/A转换器,其转换时间1us,工作电压为+5V到+15V,基准电压-10V到+10V。由于其内部有两个8位寄存器和一个8位D/A转换器,故可进行两级缓冲操作,使操作有很大的灵活性,本设计采用单缓冲方式。 DAC0832与AT89C51的连接。单片机P0口与数模转换器的数据口连接,为保证单片机P0口的驱动能力,在P0口加上上拉电阻。 3.3.2 键盘电路 键盘电路是控制部分。通过K1控制产生方波,K2控制产生三角波,K3控制产生正弦波。分析DAC0832的输出,U=*D,由此公式可知,输出波形的幅度与Vref的大小有关,所以我们通过控制Vref的大小来改变波形的幅度,以简化我们的程序。 3.3.3 复位电路与时钟电路 该电路采用上电复位,利用电容充电来实现的,即上电瞬间RST端的电位与VCC相同,随着充电电流的减少,RST的电位逐渐下降。 由于频率较大时,三角波、正弦波、方波中每一点延时时间为几微秒,故延时时间还要加上指令时间才能获得较大的功率波形,该电路采用9 单片机课程设计 12MHZ晶振。原理图如下: 复位电路与时钟电路 3.4硬件参数简介 AT89C51单片机采用12MHz时钟,VCC供电电源采用+5v,DAC0832工作电源采用+5v。 第四章 软件设计 程序是本设计中的重点。单片机的功能与它的程序有很大关系,本设计中,为实现输出三种波形,要使单片机定时向数模转换器发送数据,数据的不同将实现不同的波形输出。 输出波形原理图如下: 10 单片机课程设计 4.1 三角波程序设计 三角波有上升与下降两条边,所以从00H发送到FFH应有相同的间隔,选择每隔02H发送一次数据,即发送00H、02H、04HFEH、FEH04H、02H、00H,程序原理图如下: TRI: JNB P1.0,N3 JNB P1.2,N4 LJMP TTRI N3: MOV R7,#00H LJMP TC2 N4: MOV R7,#02H LJMP TC2 ;判断其他键是否按下,从三角波转换到其他波形 TTRI: CJNE R7,#01H,TC2 MOV R0,#00H K20: MOV P0,R0 ;将P0的数据送入数模转换器 MOV P2,#0FFH MOV A,P2 CPL A 11 单片机课程设计 MOV R3,A L20: DEC R3 CJNE R3,#255,L20 ;通过P2口控制延时 INC R0 INC R0 ;R0内容加2 CJNE R0,#254,K20 ;实现将00H不断加2,然后送入数模转换器 K21: MOV P0,R0 ;R0的数据送入数模转换器 MOV P2,#0FFH MOV A,P2 CPL A MOV R3,A L21: DEC R3 CJNE R3,#255,L21 DEC R0 DEC R0 ;R0内容减2 CJNE R0,#0,K21 ;实现将FEH不断减2,然后送入数模转换器 LJMP TRI TC2: RET 4.2 正弦波程序设计 正弦波和三角波类似,都有上升与下降两条边,而且正弦波有正负极之分,所以它的数据表比三角波的复杂,其数据表见程序,程序原理如下: SIN: JNB P1.0,N5 JNB P1.1,N6 LJMP SSIN N5: MOV R7,#00H LJMP TC3 N6: MOV R7,#01H LJMP TC3 ;判断是否有其他键按下,并跳转到其他波形 SSIN: CJNE R7,#02H,TC3 12 单片机课程设计 MOV R0,#00H K30: MOV A,R0 MOV DPTR,#TAB ;将TAB的地址送入DPTR MOVC A,A+DPTR ;从TAB中取出数据,放入A中 MOV P0,A ;将A中数据送入数模转换器 INC R0 MOV P2,#0FFH MOV A,P2 CPL A MOV R3,A L30: DEC R3 CJNE R3,#255,L30 ;K2口控制延时 CJNE R0,#255,K30 LJMP SIN TC3: RET TAB: DB 80H,82H,84H,86H,88H,8AH,8CH,8EH,90H,92H,94H,96H,98H,9AH,9CH,9EH DB 0A0H,0A2H,0A4H,0A6H,0A8H,0AAH,0ABH,0ADH,0AFH,0B1H, 0B2H,0B4H, 0B6H,0B7H,0B9H,0BAH DB 0BCH,0BDH,0BFH,0C0H,0C1H,0C3H,0C4H,0C5H,0C6H,0C8H,0C9H,0CAH,0CBH,0CCH,0CDH,0CEH DB 0CEH,0CFH,0D0H,0D1H,0D1H,0D2H,0D2H,0D3H,0D3H,0D4H,0D4H,0D4H,0D4H,0D5H,0D5H,0D5H DB 0D5H,0D5H,0D5H,0D5H,0D4H,0D4H,0D4H,0D4H,0D3H,0D3H,0D2H,0D2H,0D1H,0D1H,0D0H,0CFH DB 0CEH,0CEH,0CDH,0CCH,0CBH,0CAH,0C9H,0C8H,0C6H,0C5H,0C4H,0C3H,0C1H,0C0H,0BFH,0BDH DB 0BCH,0BAH,0B9H,0B7H,0B6H,0B4H,0B2H,0B1H,0AFH,0ADH,0ABH,0AAH,0A8H,0A6H,0A4H,0A2H DB 13 单片机课程设计 0A0H,9EH,9CH,9AH,98H,96H,94H,92H,90H,8EH,8CH,8AH,88H,86H,84H, 82H DB 80H,7DH,7BH,79H,77H,75H,73H,71H,6FH,6DH,6BH,69H,67H,65H,63H,61H DB 5FH,5DH,5BH,59H,57H,55H,54H,52H,50H,4EH,4DH,4BH,49H,48H,46H,45H DB 43H,42H,40H,3FH,3EH,3CH,3BH,3AH,39H,37H,36H,35H,34H,33H,32H,31H DB 31H,30H,2FH,2EH,2EH,2DH,2DH,2CH,2CH,2BH,2BH,2BH,2BH,2AH,2AH, 2AH DB 2AH,2AH,2AH,2AH,2BH,2BH,2BH,2BH,2CH,2CH,2DH,2DH,2EH,2EH,2FH,30H DB 31H,31H,32H,33H,34H,35H,36H,37H,39H,3AH,3BH,3CH,3EH,3FH,40H,42H DB 43H,45H,46H,48H,49H,4BH,4DH,4EH,50H,52H,54H,55H,57H,59H,5BH,5DH DB 5FH,61H,63H,65H,67H,69H,6BH,6DH,6FH,71H,73H,75H,77H,79H,7BH,7DH END 第五章 系统功能描述和说明 DAC波形发生器采用AT89C51单片机于DAC0832连接,DAC0832输出的模拟信号经过运算放大器放大,通过示波器显示波形。本发生器可以实现对输出波形类型,幅值的人工控制。 l 通过AT89C51的P0口引出的三个个按键选择相应的输出波形:锯齿波,三角波,正弦波 l 通过转动电位器的旋钮,改变输出波形的幅值。 l 通过P1口输出三个波形的序号 启动系统后,程序会等待用户按键选择波形,用户可以通过与P1.0,P1.1,P1.2三引脚相连的按键,依次选择输出方波,三角波和正弦波。在输出波形的同时,LED上会显示相应的波形代号,通过旋转RV1电位器旋钮,改变波形幅值。 14 单片机课程设计 第六章 设计心得 这两周,在老师的指导下和同学合作之下最终成功地完成了此次设计,通过本次课程设计,我们有了很多收获,同时也发现了一些问题。 通过本次课程设计,使我对单片机的应用有了深刻的了解,让我对单片机编程和和使用单片机解决实际问题的能力有了很大的提高。另外,本次设计小组成员各有分工又紧密联系,每个人都注重分享、讨论,培养了团队意识。 同时,通过本次课程设计也让我发现了一些问题。例如,对单片机基础知识掌握的不好,是我在本次设计中多次出现问题;其次是对单片机的仿真缺乏了解。 总之,通过这次课程设计使我对单片机语言的理解和掌握上有了很大的进步,以前所了解的单片机语言仅限于一些片面的知识,课本上的内容如果不拿来实践一下的话很快就会忘记,通过这次编程,将这些零零碎碎的知识汇集起来,编写出了一个完整的系统,并且对单片机语言的应用能力有了极大的提高,对于硬件接口的问题也有了深刻的了解。虽然不是最好的方案,但真实地得到锻炼。 第七章 参考文献 新编单片机原理及应用 汪贵平 李登峰 龚贤武 雷旭 编著 机械工业出版社 15 单片机课程设计 附录 硬件电路连接图波形发生器硬件设计图 16 单片机课程设计 DAC0832的接线方式 17 单片机课程设计 静态显示模块 系统仿真效果图 锯齿波波仿真图 18 单片机课程设计 三角波仿真图 正弦波仿真 19 单片机课程设计 程序设计 ORG 0000H LJMP MAIN ORG 0100H MAIN: JNB P1.0,D1 ;判断K1 JNB P1.1,D2 ;判断K2 JNB P1.2,D3 ;判断K3 LJMP MAIN D1: MOV R7,#00H LCALL STW LJMP MAIN D2: MOV R7,#01H LCALL TRI LJMP MAIN D3: MOV R7,#02H LCALL SIN LJMP MAIN ;锯齿波子程序 STW: JNB P1.1,N1 JNB P1.2,N2 LJMP SSTW N1: MOV R7,#01H LJMP TC1 N2: MOV R7,#02H LJMP TC1 SSTW: CJNE R7,#00H,TC1 MOV R0,#00H MOV P1,#1FH K00: MOV P0,R0 CPL A MOV R3,A L00: DEC R3 CJNE R3,#255,L00 INC R0 ;子程序跳转 ;跳转到锯齿波波子程序 ;跳转到三角波子程序 ;跳转到正弦波子程序 ;判断其他键是否按下,从锯齿波波转换到其他波形;将P0的数据送入数模转换器 20 单片机课程设计 INC R0 ;R0内容加2 CJNE R0,#254,K00 ;实现将00H不断加2,然后送入数模转换器 LJMP STW TC1: RET ;三角波子程序 TRI: JNB P1.0,N3 JNB P1.2,N4 LJMP TTRI N3: MOV R7,#00H LJMP TC2 N4: MOV R7,#02H LJMP TC2 ;判断其他键是否按下,从三角波转换到其他波形 TTRI: CJNE R7,#01H,TC2 MOV R0,#00H MOV P1,#2FH K20: MOV P0,R0 ;将P0的数据送入数模转换器 MOV P2,#0FFH MOV A,P2 CPL A MOV R3,A L20: DEC R3 CJNE R3,#255,L20 ;通过P2口控制延时 INC R0 INC R0 ;R0内容加2 CJNE R0,#254,K20 ;实现将00H不断加2,然后送入数模转换器 K21: MOV P0,R0 ;R0的数据送入数模转换器 MOV P2,#0FFH MOV A,P2 CPL A MOV R3,A L21: DEC R3 CJNE R3,#255,L21 DEC R0 DEC R0 ;R0内容减2 CJNE R0,#0,K21 ;实现将FEH不断减2,然后送入数模转换器 21 单片机课程设计 LJMP TRI TC2: RET ;正弦波产生子程序 SIN: JNB P1.0,N5 JNB P1.1,N6 LJMP SSIN N5: MOV R7,#00H LJMP TC3 N6: MOV R7,#01H LJMP TC3 ;判断是否有其他键按下,以从正弦波跳转到其他波形 SSIN: CJNE R7,#02H,TC3 MOV R0,#00H MOV P1,#3FH K30: MOV A,R0 MOV DPTR,#TAB ;将TAB的地址送入DPTR MOVC A,A+DPTR ;从TAB中取出数据,放入A中 MOV P0,A ;将A中数据送入数模转换器 INC R0 MOV P2,#0FFH MOV A,P2 CPL A MOV R3,A L30: DEC R3 CJNE R3,#255,L30 ;K2口控制延时 CJNE R0,#255,K30 LJMP SIN TC3: RET TAB: 80H,82H,84H,86H,88H,8AH,8CH,8EH,90H,92H,94H,96H,98H,9AH,9CH,9EH DB DB 0BCH,0BDH,0BFH,0C0H,0C1H,0C3H,0C4H,0C5H,0C6H,0C8H,0C9H,0CAH,0CBH,0CCH,0CDH,0CEH 0A0H,0A2H,0A4H,0A6H,0A8H,0AAH,0ABH,0ADH,0AFH,0B1H, 0B2H,0B4H, 0B6H,0B7H,0B9H,0BAH DB 22 单片机课程设计 DB 0CEH,0CFH,0D0H,0D1H,0D1H,0D2H,0D2H,0D3H,0D3H,0D4H,0D4H,0D4H,0D4H,0D5H,0D5H,0D5H DB 0D5H,0D5H,0D5H,0D5H,0D4H,0D4H,0D4H,0D4H,0D3H,0D3H,0D2H,0D2H,0D1H,0D1H,0D0H,0CFH DB 0CEH,0CEH,0CDH,0CCH,0CBH,0CAH,0C9H,0C8H,0C6H,0C5H,0C4H,0C3H,0C1H,0C0H,0BFH,0BDH DB 0BCH,0BAH,0B9H,0B7H,0B6H,0B4H,0B2H,0B1H,0AFH,0ADH,0ABH,0AAH,0A8H,0A6H,0A4H,0A2H DB 0A0H,9EH,9CH,9AH,98H,96H,94H,92H,90H,8EH,8CH,8AH,88H,86H,84H, 82H DB 80H,7DH,7BH,79H,77H,75H,73H,71H,6FH,6DH,6BH,69H,67H,65H,63H,61H DB 5FH,5DH,5BH,59H,57H,55H,54H,52H,50H,4EH,4DH,4BH,49H,48H,46H,45H DB 43H,42H,40H,3FH,3EH,3CH,3BH,3AH,39H,37H,36H,35H,34H,33H,32H,31H DB 31H,30H,2FH,2EH,2EH,2DH,2DH,2CH,2CH,2BH,2BH,2BH,2BH,2AH,2AH, 2AH DB 2AH,2AH,2AH,2AH,2BH,2BH,2BH,2BH,2CH,2CH,2DH,2DH,2EH,2EH,2FH,30H DB 31H,31H,32H,33H,34H,35H,36H,37H,39H,3AH,3BH,3CH,3EH,3FH,40H,42H DB 43H,45H,46H,48H,49H,4BH,4DH,4EH,50H,52H,54H,55H,57H,59H,5BH,5DH DB 5FH,61H,63H,65H,67H,69H,6BH,6DH,6FH,71H,73H,75H,77H,79H,7BH,7DH END 23 单片机课程设计 24