1、单片机函数波形发生器课程设计东 北 石 油 大 学 课 程 设 计课 程 单片机课程设计 题 目 函数波形发生器设计 院 系 电气信息工程学院测控系 专业班级 测控技术与仪器111 学生姓名 任建伟 学生学号 指导教师 路敬祎 张岩 7 月 8日东北石油大学课程设计任务书课程 单片机课程设计 题目 函数波形发生器设计 专业 测控技术与仪器 姓名 任建伟 学号 一、任务 设计一款基于AT89C51单片机的函数波形发生器。二、设计要求要求:利用D/A芯片产生峰峰值为5V的锯齿波、三角波、梯形波、正弦波和方波。控制功能:使用5个拨动开关进行功能切换。当K0接高电平时输出锯齿波;当K1接高电平输出梯形
2、波;当K2接高电平输出三角波;K3接高电平输出正弦波;K4接高电平输出方波。使用的主要元器件:8031、6MHz的晶振、74LS373、74LS138、2764、DAC0832、LM324、拨动开关K0、K1、K2、K3、K4等。输出波形的验证方法:使用示波器测量输出波形。三、参考资料1陈志旺,李亮。51单片机快速上手。机械工业出版社。2薛定宇。控制系统计算及辅助设计MATLAB语言与应用(第2版)。清华大学出版社。3邹虹。单片机波形发生器的设计。重庆邮电学院学报。4毅刚,彭喜元。单片机原理与应用设计。电子工业出版社。5杨素行.模拟电子技术基础简明教程(第三版)M.北京:高等教育出版社, .
3、6 Altium Designer原理图与PCB设计 M.北京:电子工业出版社 . 完成期限 .6.30 至 .7.9 指导教师 路敬祎 张岩 专业负责人 曹广华 6月 30 日目录第一章 绪论11.1课题背景11.2本系统研究的国内外现状21.3本文主要研究内容和工作2第二章 方案论证32.1方案一 纯硬件设计法32.2方案二纯软件设计法32.3方案三 软硬件结合法4第三章 系统硬件设计53.1内部结构概述53.2 P0P3口结构及功能53.3时钟电路和复位电路63.4系统硬件总体设计83.5 DAC0832的引脚及功能83.6 74LS373的引脚及功能93.7系统硬件原理9第四章 系统的
4、软件设计114.1主程序流程图114.2波形的产生12第五章 系统调试与仿真结果145.1 系统调试145.2 仿真结果14结论15参考文献16附录一 程序17附录二 仿真效果图22第一章 绪论1.1课题背景波形发生器是能够产生大量的标准信号和用户定义信号,并保证高精度、高稳定性、可重复性和易操作性的电子仪器。函数波形发生器具有连续的相位变换、和频率稳定性等优点,不但能够模拟各种复杂信号,还可对频率、幅值、相移、波形进行动态、及时的控制,并能够与其它仪器进行通讯,组成自动测试系统,因此被广泛用于自动控制系统、震动激励、通讯和仪器仪表领域。在70年代前,信号发生器主要有两类:正弦波和脉冲波,而函
5、数发生器介于两类之间,能够提供正弦波、余弦波、方波、三角波、上弦波等几种常见标准波形,产生其它波形时需要采用较复杂的电路和机电结合的方法。这个时期的波形发生器多采用模拟电子技术,而且模拟器件构成的电路存在着尺寸大、价格贵、功耗大等缺点,而且要产生较为复杂的信号波形,则电路结构非常复杂。同时,主要表现为两个突出问题,一是经过电位器的调节来实现输出频率的调节,因此很难将频率调到某一固定值;二是脉冲的占空比不可调节。在70年代后,微处理器的出现,能够利用处理器、A/D和D/A,硬件和软件使波形发生器的功能扩大,产生更加复杂的波形。这时期的波形发生器多以软件为主,实质是采用微处理器对DAC的程序控制,
6、就能够得到各种简单波形。90年代末,出现几种真正高性能、高价格的函数发生器、可是HP公司推出了型号为HP770S的信号模拟装置系统,它由HP8770A任意波形数字化和HP1776A波形发生软件组成。HP8770A实际上也只能产生8中波形,而且价格昂贵。不久以后, Analogic公司推出了型号为Data-2020的多波形合成器, Lecroy公司生产的型号为9100的任意波形发生器等。到了二十一世纪,随着集成电路技术的高速发展,出现了多种工作频率可过GHz的DDS芯片,同时也推动了函数波形发生器的发展, , Agilent的产品33220A能够产生17种波形,最高频率可达到20M, 的产品N6
7、030A能够产生高达500MHz的频率,采样的频率可达1.25GHz。由上面的产品能够看出,函数波形发生器发展很快近几年来,国际上波形发生器技术发展主要体现在以下几个方面:(1)过去由于频率很低应用的范围比较狭小,输出波形频率的提高,使得波形发生器能应用于越来越广的领域。波形发生器软件的开发正使波形数据的输入变得更加方便和容易。波形发生器一般允许用一系列的点、直线和固定的函数段把波形数据存入存储器。同时能够利用一种强有力的数学方程输入方式,复杂的波形能够由几个比较简单的公式复合成v=f (t)形式的波形方程的数学表示式产生。从而促进了函数波形发生器向任意波形发生器的发展,各种计算机语言的飞速发
8、展也对任意波形发生器软件技术起到了推动作用。当前能够利用可视化编程语言 (如Visual Basic ,Visual C等等)编写任意波形发生器的软面板这样允许从计算机显示屏上输入任意波形,来实现波形的输入。(2)与VXI资源结合。当前,波形发生器由独立的台式仪器和适用于个人计算机的插卡以及新近开发的VXI模块。由于VXI总线的逐渐成熟和对测量仪器的高要求,在很多领域需要使用VXI系统测量产生复杂的波形,VXI的系统资源提供了明显的优越性,但由于开发VXI模块的周期长,而且需要专门的VXI机箱的配套使用,使得波形发生器VXI模块仅限于航空、军事及国防等大型领域。在民用方面,VXI模块远远不如台
9、式仪器更为方便。(3)随着信息技术蓬勃发展,台式仪器在走了一段下坡路之后,又重新繁荣起来。不过现在新的台式仪器的形态,和几年前的己有很大的不同。这些新一代台式仪器具有多种特性,能够执行多种功能。而且外形尺寸与价格,都比过去的类似产品减少了一半。1.2本系统研究的国内外现状早在1978年,由美国Wavetek公司和日本东亚电波工业公司公布了最高取样频率为5MHz,能够形成256点(存储长度)波形数据,垂直分辨率为8bit,主要用于振动、医疗、材料等领域的第一代高性能信号源,经过将近30年的发展,伴随着电子元器件、电路、及生产设备的高速化、高集成化,波形发生器的性能有了飞速的提高,变得操作越来越简
10、单而输出波形的能力越来越强。波形操作方法的好坏,是由波形发生器控制软件质量保证的,编辑功能增加得越多,波形形成的操作性越好。1.3本文主要研究内容和工作近年来,波形发生器在各种领域中得到越来越广泛的应用。本系统主要经过研究51单片机的功能,外加D/A转换器等其它器件,进行硬件设计和软件编程,完成锯齿波、梯形波、三角波、方波和正弦波共五种波形的形成。波形频率的变化由程序来控制,即经过改变定时器的初值来改变输出波形相邻两点的时间间隔,从而实现波形频率的改变。第二章 方案论证2.1方案一 纯硬件设计法波形发生器设计的纯硬件法早期,波形发生器的设计主要是采用运算放大器加分立元件来实现。实现的波形比较单
11、一,主要为正弦波、方波和三角波。工作原理嗍也相对简单:首先是产生正弦波,然后经过波形变换(正弦波经过比较器产生方波,方波经过积分器变为三角波)实现方波和三角波。在各种波形后加上一级放大电路,能够使输出波形的幅度达到要求,经过开关电路实现不同输出波形的切换,改变电路的具体参数能够实现频率、幅度和占空比的改变。经过对电路结构的优化及所用元器件的严格选取能够提高电路的频率稳定性和准确度。纯硬件法中,正弦波的设计是基础,实现方法也比较多,电路形式一般有LC、RC和石英晶体振荡器三类。LC振荡器适宜于产生几Hz至几百MHz的高频信号;石英晶体振荡器能产生几百kHz至几十MHz的高频信号且稳定度高;对于频
12、率低于几MHz,特别是在几百Hz时,常采用RC振荡电路。RC振荡电路又分为文氏桥振荡电路、双T网络式和移相式振荡电路等类型。其中,以文氏桥振荡电路最为常见。当前,实现波形发生器最简单的方法是采用单片集成的函数信号发生器。它是将产生各种波形的功能电路集成优化到一个集成电路芯片里,外加少量的电阻、电容元件来实现。采用这种方法的突出优势是电路简单,实现方便,精度高,性能优越;缺点是功能较全的集成芯片价格较贵。实际中应用较多的单片函数信号发生器有MAX038(最高频率可达40MHz)和ICL8038(最高频率为300kHz)。2.2方案二 纯软件设计法波形发生器的设计还能够采用纯软件的方法来实现。虚拟
13、仪器鞠使传统仪器发生了革命性的变化,是21世纪测试仪器领域技术发展的重要方向。它以计算机为基础,软件为核心,没有传统仪器那样具体的物理结构在计算机上实现仪器的虚拟面板,经过软件设计实现和改变仪器的功能。例如用图形化编程工具LabVIEW来实现任意波形发生器的功能:在LabVIEW软件的前面板经过拖放控件,设计仪器的功能面板(如波形显示窗口,波形选择按键,波形存储回放等工作界面),在软件的后面板直接拖放相应的波形函数并进行参数设置或直接调用编程函数来设计任意波形以实现波形产生功能;完成的软件打包后,可脱离编程环境独立运行。实现任意波形发生器的功能。采用纯软件的虚拟仪器设计思路能够使设计简单、高效
14、,仅改变软件程序就能够轻松实现波形功能的改变或升级。从长远角度来看,纯软件法成本较低。软件法的缺点是波形的响应速度和精度逊色于硬件法。2.3方案三 软硬件结合法软硬件结合的波形发生器设计方法同时兼具软硬件设计的优势:既具有纯硬件设计的快速、高性能,同时又具有软件控制的灵活性、智能性。如以单片机和单片集成函数发生器为核心。辅以键盘控制、液晶显示等电路,设计出智能型函数波形发生器,采用软硬件结合的方法能够实现功能较全、性能更优的波形发生器,同时还能够扩展波形发生器的功能,比如经过软件编程控制实现波形的存储、运算、打印等功能,采用USB接口设计。使波形发生器具有远程通信功能等。当前,实验、科研和工业
15、生产中使用的信号源大多采用此方法来实现。纯硬件设计法功能较单一,波形改变困难、控制的灵活性不够,不具备智能性,其中由运算放大器加分立元件组成的波形发生器,除在学生实验训练中使用外。基本不被采用。纯软件设计法实现简单,程序改变及功能升级灵活,但实现的波形精度及响应速度不如硬件法高。纯软件法主要适用于对波形精度、响应速度要求不是很高的场合。相比之下,软硬件结合的方法能够设计出性能最优、功能扩展灵活、控制智能化的新一代的波形发生器,能够满足教学、科研、工业生产等各方面对波形发生器性能有较高要求的应用场合。综合以上几种设计方案,本设计采用方案三的方法软硬件设计法。其方案能够产生很好的波形,也易实现。第
16、三章 系统硬件设计3.1内部结构概述典型的MCS-51单片机芯片集成了以下几个基本组成部分:1)一个8位的CPU;2) 128B或256B单元内数据存储器(RAM);3) 4KB或8KB片内程序存储器(ROM或EPROM); 4) 4个8位并行I/O接口P0P3;5)两个定时/计数器; 6) 5个中断源的中端管理控制系统; 7)一个全双工串行I/O口UART(通用异步接收、发送器);8)一个片内振荡器和时钟产生电路。图3-1 单片机引脚图3.2 P0P3口结构及功能3.2.1 P0口结构及功能P0口由一个输出锁存器、一个转换开关MUX、两个三态输入缓冲器、输出驱动电路和一个与门及一个反相器组成
17、。P0口具有两种功能:第一, P0口能够用作通用I/O接口;第二, P0口能够用作地址/数据总线。3.2.2 P1口结构及功能P1口是由一个输出锁存器、两个三态输入缓冲器和输出驱动电路组成,驱动电路内部设有上拉电阻。 3.2.3 P2口结构及功能P2口由一个输出锁存器、一个转换开关MUX、两个三态输入缓冲器、输出驱动电路和一个反相器组成。P2口共有两个功能:第一个功能与上述两组引脚的第一功能相同,即可用作通用I/O口;它的第二功能与P0口引脚的第二功能相配合,作为地址总线用于输出片外存储器的高8位。3.2.4 P3口结构及功能 P3口由一个输出锁存器、三个三态输入缓冲器、输出驱动电路和一个与非
18、门组成。P3口有两个功能:第一个功能与其余三个端口的第一功能相同;第二功能做控制用,每个引脚的功能不同: P3.0RXD:串行口接收数据输入端P3.1TXD:串行口发送数据输出端P3.2INT0:外部中断申请输入端0P3.3INT1:外部中断申请输入端1 P3.4T0:外部计数脉冲输入端0 P3.5T1:外部计数脉冲输入端1 P3.6WR:写外设控制信号输出端P3.7RD:读外设控制信号输出端3.3时钟电路和复位电路单片机的时钟信号用来提供单片机内各种微操作的时间基准;复位操作则使单片机的片内电路初始化,使单片机从一种确定的状态开始运行。3.3.1时钟电路单片机的时钟信号一般有两种产生方式。一
19、种是内部时钟方式;另一种是外部时钟方式。 图3-2 时钟方式图内部时钟方式只要在单片机的XTAL1和XTAL2引脚外接晶振就构成了自激振荡器,并在单片机内部产生时钟脉冲信号。外部时钟方式是把外部已有的时钟信号引入到单片机内,常见于多片单片机同时工作,已使各单片机同步。单片机的时序单位:晶振周期为时钟脉冲频率的倒数,为最小的时序单位,也称T状态;时钟周期包含两个晶振周期,也称S状态;完成一个基本操作所需要的时间称为机器周期,由6个时钟周期组成,即12个晶振周期;指令的执行时间称为指令周期,一般含有14个机器周期。3.3.2单片机的复位状态当MCS-51系列单片机的复位引脚RST(全称RESET)
20、出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。根据应用的要求,复位操作一般有两种基本形式:上电复位和手动复位。上电复位要求接通电源后,自动实现复位操作。手动复位是当单片机已在运行当中时,按下复位键K后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。 单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC0000H,这表明程序从0000H地址单元开始执行。单片机冷启动后,片内RAM为随机值,运行中的复位操作不改变片内RAM区中的内容, 21个特殊功能寄存器复位后的状态为确定值。3.4系统硬件总体设计波形的产生
21、是经过51单片机执行某一波形发生器程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路的输出端得到相应的电压波形。键盘AT89C51DAC0832运放电路波形输出图3-3 总体设计图3.5 DAC0832的引脚及功能DAC0832是双列直插式8位D/A转换器,完成数字量输入到模拟量输出的转换。图3-4 DAC0832引脚图DAC0832结构:D0D7: 8位的数据输入端, D7为最高位, TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);ILE:数据锁存允许控制信号输入线,高电平有效;CS:片选信号输入线(选通数据锁存器),低电平有效;WR1:数据锁存器写选通输入
22、线,负脉冲(脉宽应大于500ms)有效。由ILE、CS、WR1的逻辑组合产生,当LE1为高电平时,数据锁存器状态随输入数据线变换, LE1的负跳变时将输入数据锁存;XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ms)有效。WR2:DAC寄存器选通输入线,负脉冲(脉宽应大于500ms)有效。由WR1、XFER的逻辑组合产生LE2,当LE2为高电平时, DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。IOUT1:模拟电流输出端1,当DAC寄存器中数据全为1时,输出电流最大,当DAC寄存器中数据全为0时,输出电流为0
23、。IOUT2:模拟电流输出端2, IOUT2与IOUT1的和为一个常数。Rfb:反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度。Vcc:电源输入端,范围为 (+5+ 15)V。VREF:基准电压输入线,范围为 (-10+10)V; AGND:模拟信号地。DGND:数字信号地。3.6 74LS373的引脚及功能74LS373是常见的地址锁存器芯片,它实质是一个带三态缓冲输出的8D触发器。D0D7:数据输入端; Q0Q7:数据输出端;OE:三态允许控制端,低电平有效;当OE为低电平时, Q0Q7为正常逻辑状态,可用来驱动负载或总线;当OE为高电平时, Q0Q7呈高阻态,既不驱动总线,也
24、不为总线的负载,但锁存器内部的逻辑操作不受影响。LE:锁存允许端。当锁存允许端LE为高电平时, Q随数据D而变;当LE为低电平时, Q被锁存在已建立的数据电平。图3-5 74LS373引脚图3.7系统硬件原理51单片机的最小系统最小系统由振荡电路、电源电路、复位电路、EA及应用程序组成。它有三种联接方式。一种是两级缓冲器型,即输入数据经过两级缓冲器型,即输入数据经过两级缓冲器后,送入D/A转换电路。第二种是单级缓冲型,输入数据经输入寄存器直接送入DAC寄存器,然后送D/A转换电路。第三种是两个缓冲器直通,输入数据直接送D/A转换电路进行转换。3.7.1系统原理图图3-6 系统原理图第四章 系统
25、的软件设计系统软件由主程序和产生波形的子程序组成,软件设计主要是产生各种波形的子程序的编程。经过编程可得到各种波形。频率的改变可采用插入延时子程序的方法来实现。4.1主程序流程图开始初始化读取波形选择开关调波形发生子程序结束波形转换否是否波形判别图4-1 主程序流程图4.2波形的产生4.2.1设计思路利用中断,当5个开关中有任意一个闭合时,跳转至中断程序,在中断程序中判断是哪一个按键闭合,跳转至相应的程序,执行输出波形的操作,每输出一个点之后,判断按键是否断开,如果依旧闭合,则继续输出,如果已经断开,则结束中断程序。函数波形发生器K0锯齿波K1梯形波K2三角波K3方波K4正弦波 图4-2 主程
26、序流程图4.2.2锯齿波的产生锯齿波的实现过程是首先定义一个初值然后进行加法操作,加的步数的多少则根据要求的频率来进行。然后加到某个数之后就再重新设置为初值,再重复执行刚刚的操作,如此循环下去。4.2.3梯形波的产生梯形波的实现是设置一个初值,然后进行加一,当加到某个数时延时,之后减一,减到初值时在返回到之前的操作,继续加一、延时、减一。4.2.4三角波的产生三角波的实现是设置一个初值,当加到某个值的时候,执行减一操作,减到初值时,再加一。4.2.5方波的产生方波的实现只需开始的时候设置一个初值然后直接输出这个值就行了,输出一段时间后,然后再重新置一个数据,然后再输出这个数据一段时间,可是此时
27、的时间一定要等于前面那段时间。4.2.6正弦波的产生正弦波的实现需要查表,每查一次表,输出一个数值,之后查下一个数值继续输出,当一个波形的256个数值全部输出之后,从头开始继续输出。第五章 系统调试与仿真结果5.1 系统调试根据系统设计方案,本系统的调试共分为三大部分:仿真电路调试,程序调试和程序和仿真电路联调。由于在系统设计中采用模块设计法,因此方便对各电路模块功能进行逐级测试。5.1.1仿真电路调试对各个模块的功能进行调试,主要调试各模块能否实现指定的功能。调试结果表明,各模块能够实现其预期功能。5.1.2程序调试软件调试采用keil c软件,将编好的程序进行调试,主要是检查语法错误。在此
28、过程中,发现了好多错误。要耐心调试。5.1.3 联调 将调试好的仿真电路和程序进行联调,主要调试系统的实现功能。只要程序调试完成,线路连好,本步没有困难。5.2 仿真结果在Proteus软件中运行仿真。按下K0键时,示波器输出锯齿波;按下K1键时输出梯形波;按下K2键时输出三角波;按下K3键时输出方波;按下K4键时输出正弦波。具体波形见附录二。结论本次的设计中利用AT89C51和DAC0832以及放大器完成电路的设计,用开关来控制各种波形的发生及转换,用单片机输出后,经过模数转换器生成波形,最终能够经过示波器观察。在这次的软件设计中,程序设计采用的是汇编语言。汇编语言具有速度快,能够直接对硬件
29、进行操作的优点,它能够极好的发挥硬件的功能。可是汇编语言也存在编写的代码非常难懂,不好维护,很容易产生bug,难于调试的缺点。因此,在大型程序的设计中,多采用C语言进行程序编译。C语言简洁高效,是最贴近硬件的高级编程语言,经过多年的发展,现在已成熟为专业水平的高级语言。而且,现在单片机产品推出时纷纷配套了C语言编译器,应用广泛。不过就本次课程设计来说,汇编语言还是适用的。由于此次是第一次进行课设,有些软件以及芯片以前从未接触过,因此还不是很得心应手,因此在设计中遇到了很多问题及难点。比如: proteus软件以及wave6000的使用; D/A转换器和锁存器的结构、功能等等,这些都需要自己去查
30、找资料了解这些。经过此次的课程设计,我进一步了解了波形发生器的原理,在实际动手操作过程中,使我接触了许多我以前没接触过的元件,提高了自己的动手能力。而且在编程时重新温习了刚学不久的51单片机以及MATLAB语言,不但让我学习了一些新的知识,而且对以前所学内容进行了巩固,让我懂得理论知识的重要性,没有理论的指导一切实际行动都是盲目的,且实际操作是所学的理论知识得到验证,更能加深对理论知识的理解,让我受益匪浅。参考文献1陈志旺,李亮。51单片机快速上手。机械工业出版社。2薛定宇。控制系统计算及辅助设计MATLAB语言与应用(第2版)。清华大学出版社。3邹虹。单片机波形发生器的设计。重庆邮电学院学报
31、。4毅刚,彭喜元。单片机原理与应用设计。电子工业出版社。5杨素行.模拟电子技术基础简明教程(第三版)M.北京:高等教育出版社, . 6 Altium Designer原理图与PCB设计 M.北京:电子工业出版社 . 7谭浩强.C程序设计(第2版) M .北京:清华大学出版社1999. 8陈明义.电子技术教程设计实用教程(第3版)M.长沙:中南大学, . 9马晓.函数信号发生器的设计 D.河南 .10李华.MCS-51系列单片机实用接口技术 M.11何立民.单片机应用技术选编 M. 12阎石.模拟电子技术基础 M.附录一 程序ORG 0000H LJMP MAIN ORG 0003H 外部中断0
32、 LJMP INT00 ORG 0040H MAIN:MOV SP,60H; 更改堆栈指针,避免堆栈与工作寄存器区发生冲突SETB IT0; 外部中断请求0为下降沿触发方式SETB EA; 中断允许总开关打开SETB EX0; 允许外部中断0中断INT00:CLR EA ; 关中断PUSH PSW; 现场保护PUSH Acc SETB EA; 开中断JNB P1.0,IR0; 如果K0键闭合,则跳转至IR0输出锯齿波 JNB P1.1,IR1; 如果K1键闭合,则跳转至IR1输出梯形波JNB P1.2,IR2; 如果K2键闭合,则跳转至IR2输出三角波JNB P1.3,IR3; 如果K3键闭合
33、,则跳转至IR3输出方波JNB P1.4,IR4; 如果K4键闭合,则跳转至IR4输出正弦波INTIR: CLR EA; 关中断POP Acc; 现场恢复POP PSW SETB EA ; 开中断RETI锯齿波发生子程序如下:IR0:MOV R0,#0FEH 设置端口地址MOV A,#00H LOOP:MOVX R0,A ; 写入JB P1.0,INTIR; 如果k0键已经断开,则返回INC A ; A加一SJMP LOOP; 循环LJMP INTIR; 返回梯形波发生子程序如下: IR1:MOV R0,#0FEH; 设置端口地址MOV A,#00H UP: MOVX R0,A; 写入JB P
34、1.1,INTIR; 如果k1键已经断开,则返回INC A; A加一JNZ UP ; 循环DEC A; 如果已经溢出,则减一,减一之后A的值为255 LCALL DELAY; 延时 JB P1.1,INTIR; 如果k1键已经断开,则返回DOWN:DEC A; MOVX R0,A; 写入JB P1.1,INTIR; 如果k1键已经断开,则返回JNZ DOWN ; 循环SJMP UP; 如果减到0,则跳转至UP,继续执行加一操作LJMP INTIR; 返回DELAY:MOV R7,#100; 延时子程序DELAY1: MOV R6,#10 NOP DELAY2:DJNZ R6,DELAY2 DJ
35、NZ R7,DELAY1 RET三角波发生子程序如下:IR2: MOV R0,#0FEH; 设置端口地址MOV A,#00H UP2:MOVX R0,A; 写入JB P1.2,INTIR; 如果k2键已经断开,则返回INC A; A加一JNZ UP2; 循环DOWN2:DEC A; A减一MOVX R0,A; 写入JB P1.2,INTIR; 如果k2键已经断开,则返回JNZ DOWN2; 循环SJMP UP2; 如果减到0,则跳转至UP2,继续加一操作LJMP INTIR; 返回方波发生子程序如下:IR3: MOV R0,#0FEH; 设置端口地址POSI: MOV A,#00H; 给A赋值
36、0x00 MOVX R0,A; 写入LCALL DELAY ; 延时JB P1.3,INTIR; 如果k3键已经断开,则返回NEGA: MOV A,#0FFH ; 给A赋值0xFF MOVX R0,A; 写入LCALL DELAY; 延时JB P1.3,INTIR; 如果k3键已经断开,则返回SJMP POSI; 跳转至POSI,继续下一个波形的输出LJMP INTIR; 返回正弦波发生子程序如下:IR4: MOV R0,#0FEH; 设置端口地址MOV R1,#00HXX: MOV A,R1 LCALL HANSHU; 调用查表函数MOVX R0,A; 写入JB P1.4,INTIR; 如果
37、k4键已经断开,则返回INC R1 SJMP XX; 继续查表LJMP INTIR ; 返回HANSHU:MOV DPTR,#TAB1 MOVC A,A+DPTR RETTAB1: db 080h,083h,086h,089h,08ch,090h,093h,096h,099h,09ch,09fh,0a2h,0a5h,0a8h,0abh,0aeh db 0b1h,0b3h,0b6h,0b9h,0bch,0bfh,0c1h,0c4h,0c7h,0c9h,0cch,0ceh,0d1h,0d3h,0d5h,0d8h db 0dah,0dch,0deh,0e0h,0e2h,0e4h,0e6h,0e8h,
38、0eah,0ebh,0edh,0efh,0f0h,0f1h,0f3h, 0f4h db 0f5h,0f6h,0f8h,0f9h,0fah,0fah,0fbh,0fch,0fdh,0fdh,0feh,0feh,0feh,0ffh,0ffh,0ffh db0ffh,0ffh,0ffh,0ffh,0feh,0feh,0feh,0fdh,0fdh,0fch,0fbh,0fah,0fah,0f9h,0f8h,0f6h db 0f5h,0f4h,0f3h,0f1h,0f0h,0efh,0edh,0ebh,0eah,0e8h,0e6h,0e4h,0e2h,0e0h,0deh, 0dch db 0dah,0d
39、8h,0d5h,0d3h,0d1h,0ceh,0cch,0c9h,0c7h,0c4h,0c1h,0bfh,0bch,0b9h,0b6h,0b3h db0b1h,0aeh,0abh,0a8h,0a5h,0a2h,09fh,09ch,099h,096h,093h,090h,08ch,089h,086h,083h db 080h,07dh,07ah,077h,074h,070h,06dh,06ah,067h,064h,061h,05eh,05bh,058h,055h,052h db 04fh,04dh,04ah,047h,044h,041h,03fh,03ch,039h,037h,034h,032h
40、,02fh,02dh,02bh,028h db 026h,024h,022h,020h,01eh,01ch,01ah,018h,016h,015h,013h,011h,010h,00fh,00dh,00ch db 00bh,00ah,008h,007h,006h,006h,005h,004h,003h,003h,002h,002h,002h,001h,001h,000h db 000h,000h,001h,001h,002h,002h,002h,003h,003h,004h,005h,006h,006h,007h,008h,00ah db 00bh,00ch,00dh,00fh,010h,01
41、1h,013h,015h,016h,018h,01ah,01ch,01eh,020h,022h,024h db026h,028h,02bh,02dh,02fh,032h,034h,037h,039h,03ch,03fh,041h,044h,047h,04ah,04dh db 04fh,052h,055h,058h,05bh,05eh,061h,064h,067h,06ah,06dh,070h,074h,077h,07ah,07dh附录二 仿真效果图锯齿波梯形波三角波方波正弦波东北石油大学课程设计成绩评价表课程名称单片机课程设计题目名称函数波形发生器设计学生姓名任建伟学号指导教师姓名路敬祎张岩职称副教授讲师序号评价项目指 标满分评分1工作量、工作态度和出勤率按期圆满的完成了规定的任务,难易程度和工作量符合课程设计要求,工作努力,遵守纪律,工作作风严谨,善于与她人合作。202课程设计质量课程设计方案选择合理,设计过程简练准确,分析问题思路清晰,结构严谨,文理通顺,撰写规范,图表完备正确。453创新工作中有创新意识,对前人工作有一些改进或有一定应用价值。54答辩能正确回答指导教师所提出的问题。30总分评语:指导教师: 年 月 日