资源描述
单片机设计报告 广东第二师范学院 单片机课程设计报告 物理 系 09 级 电子信息工程 专业 题目 单片机函数发生器设计 姓名 学号 指导教师 2011-4-5 目录引言3一 设计任务31设计内容32设计要求4二 芯片功能介绍4三 总体功能图和总原理图5四 程序流程图61 锯齿波程序流程图62 三角波程序流程图73 梯形波程序流程图84 方波程序流程图95 正弦波程序流程图116 整体程序流程图12五 程序设计13六 仿真测试16七 总结与体会19八 参考文献19九 致谢19引言信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。这次的设计分为五个模块:单片机控制及显示模块、数模转换模块、波形产生模块、输出显示模块、电源模块。使用AT98C52作为主控台结合芯片DAC0832产生1HZ-10HZ频率可调的五种信号波(锯齿波、三角波、方波、梯形波、正弦波)。这几种波形有几个开关控制,可以随意进行切换,十分方便。另外,波形的频率和振幅也可以通过开关进行更改。可以说这次的设计操作简单,内容丰富,而且电路快捷明了。1设计任务1.1设计内容以单片机为基础,设计并开发能输出多种波形(正弦波、三角波、锯齿波、梯形波等),且频率、幅度可变的函数发生器。1.2设计要求设计借口电路,将这些外设构成一个简单的单片机应用系统,画出接口的连接图和仿真图,并编写出控制波形的程序。2芯片功能介绍 2.1、DAC0832芯片介绍: DAC0832为一个8位D/A转换器,单电源供电,在+5+15V范围内均可正常工作。基准电压的范围为10V,电流建立时间为1s,CMOS工艺,低功耗20mW。DAC0832的内部结构框图如下图所示。图2.1 DAC0832的内部结构框图2.2 DAC0832的外部引脚及功能介绍图如下: 图2.2 DAC0832介绍 2.3 DAC0832的应用:DAC0832一是用作单极性电压输出,二是用作双极性电压输出,最后是用作程控放大器。 2.4 DAC0832与8031的连接方式: DAC0832的与单片机的连接方式有三种方式:(1)单缓冲;(2)双缓冲、(3)直通方式。本程序采用的是方式一即单缓冲方式,ILE为高电平,CS、WR1、WR2、XFER为低电平。 图2.4 DAC0832引脚图3 总体功能图和总原理图函数发生器的设计 K2 键三角波 K3键梯形波 K4键方波 K5键正弦波 K6 调频调幅 K1 键 锯 齿 波 图3.1 总体功能图 图3.2 总原理图4 程序流程图4.1 锯齿波程序流程图锯齿波的实现过程是首先定义一个初值然后进行加法操作,加的步数的多少则根据要求的频率来进行。然后加到某个数之后就再重新设置为初值,再重复执行刚刚的操作,如此循环下去。流程图如下所示:设置初值A MOV A,#00H DPT#8000HMOVX DPTR,A 加上设定的步数,ADD A,步数判断A是否已经满了? 否 重新设置初值A 是 开 始 4.2 三角波程序流程图三角波的实现是设置一个初值,然后进行加数,同样是加到某个数之后再进行减数,减到初值之后就再返回到先前的操作,这个操作跟锯齿波的实现是相似的。此程序输入的VREF的电压是5V,因此该波形输出的最大频率是初值为00H和最终值为0FFH,且步数为1,这样输出的波形是最大的。程序流程图如下图所示:给A设置初值 MOV DPTR,#8000H MOVX DPTR,AADD A,步数 判断A是否已满? 否 是 SUBB A,步数 判断是否等于初值? 否/是 开 始 4.3 梯形波程序流程图梯形波输出跟锯齿波和三角波相似,只不过当加到顶峰后的一段时间内不改变A的值,过了一段时间后再将减少A的值,不过先后的步数可以一样也可以不一样。然后减到初始的值后也要持续一段时间,然后再进行加数,如此循环下去。程序流程图如下图所示:开 始 给A设置初值 MOV A,#00H 是 持续一段时间 SUBB A,步数2 判断是否等于初值? 否 是 持续一段时间 MOVX DPTR,A ADD A,步数1判断A是否已满? 否 4.4 方波程序流程图此波形的实现更加简单,只需开始的时候设置一个初值然后直接输出这个值就行了,输出一段时间后,然后再重新置一个数据,然后再输出这个数据一段时间,但是此时的时间一定要等于前面那段时间。这样才是一个方波,如果两个时间不相同,那就相当于一个脉冲波了。流程图如下图所示:开 始 给A设置初值 MOV DPTR,#8000H MOVX DPTR,A 设置输出的时间 再设置一个初值放入A中MOVX DPTR,A 输出一段时间 4.5 正弦波程序流程图正弦波的实现则相对比较复杂,因为正弦波的实现是输出各个点的值就行了,可是各个点值则要通过正弦函数来求出,不过这些值直接去网上下载下来使用就可以了。输出的数据刚好是256个数据,这样则可以直接相加就行了。流程图如下图所示:4.6 整体程序流程图如下图所示:开 始 判断P1.0是否为1? 判断P1.1是否为1? 判断P1.2是否为1? 判断P1.3是否为1? 判断P1.4是否为1? 否 否 否 否 否 是 是 是 是 是 输出响应的波形 5 程序设计ORG 0000H ;程序开始MOV SP,#60H ;设置堆栈MOV DPTR,#7FFFH ;0832的地址SJMP LOPTPL: MOV R6,#04H ;切换频率和幅度(手动调节) MOV R5,#04H SJMP START LOP: JNB P1.5,TPL ;选择调频 MOV R6,#01H ;设置步长 MOV R5,#01H START: JNB P1.0,BX1 ;输出锯齿波 JNB P1.1,BX2 ;输出三角波 JNB P1.2,BX3 ;输出梯形 JNB P1.3,BX4 ;输出方波 JNB P1.4,BX5 ;输出正弦波 SJMP LOP BX1: MOV A,#00H ;设置初值LOOP:MOVX DPTR,A ;把数据送到端口 ADD A,R6 ;通过步长改变上升波形 CJNE A,#00H,LOOP SJMP START ;返回检测开关情况BX2: MOV A,#00H ;设置初值LOOP3:MOVX DPTR,A ;把数据送到端口转换 ADD A,R6 ;通过步长改变上升波形 CJNE A,#00H,LOOP3 DEC A ;减少步长改变数据下降波形LOOP2:MOVX DPTR,A ;把数据送到端口转换 DEC A ;减少步长改变数据下降波形 CJNE A,#00H,LOOP2 SJMP START ;返回检测BX3: MOV A,#00H ;设置初值LOOP4:MOVX DPTR,A ;把数据送到端口转换 ADD A,R6 ;增加步长改变数据上升波形 CJNE A,#00H,LOOP4 DEC A MOV R7,0EEH ;循环次数LOP2:MOVX DPTR,A ;进行延时 DJNZ R7,LOP2LOOP1:MOVX DPTR,A ;把数据送到端口转换 DEC A CJNE A,#00H,LOOP1 ;是否到最低点 MOV R7,0EEH ;循环次数LOP1:MOVX DPTR,A ;把数据送到端口转换 DJNZ R7,LOP1 ;进行延时 SJMP START ;返回检测BX4: MOV A,#00H ;设置初值最低点 MOV R7,#0EEH ;循环次数LOOP5:MOVX DPTR,A ;进行数据转换 DJNZ R7,LOOP5 ;进行延时 MOV A,#0FFH ;设置最高点 MOV R7,#0EEH ;循环次数LOOP6:MOVX DPTR,A ;进行数据转换 DJNZ R7,LOOP6 ;进行延时 MOV A,#00H SJMP START ;返回检测开关变化BX5: MOV A,#00H ;设置初值LOOP7: MOV R7,A ;保存当前的数据 MOV DPTR,#SIN ;读取表的地址 MOVC A,A+DPTR ;读取表中的数据 MOV DPTR,#7FFFH ;D/A0832的端口地址 MOVX DPTR,A ;进行数据转换 MOV A,R7 ;恢复当前数据 INC A ;为读取表的下一个值做准备 CJNE A,#00H,LOOP7 ;是否读完表的数据 SJMP START ;返回检测开关 SIN: DB 80H,83H,86H,89H,8DH,90H,93H,96H DB 99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH DB 0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H DB 0C7H,0CAH,0CCH,0CFH,0D1H, 0D4H,0D6H,0D8H DB 0DAH,0DDH,0DFH,0E1H,0E3H, 0E5H,0E7H,0E9H DB 0EAH,0ECH,0EEH,0EFH,0F1H, 0F2H,0F4H,0F5H DB 0F6H,0F7H,0F8H,0F9H,0FAH, 0FBH,0FCH,0FDH DB 0FDH,0FEH,0FFH,0FFH,0FFH, 0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH,0FEH,0FDH DB 0FDH,0FCH,0FBH,0FAH,0F9H, 0F8H,0F7H,0F6H DB 0F5H,0F4H,0F2H,0F1H,0EFH, 0EEH,0ECH,0EAH DB 0E9H,0E7H,0E5H,0E3H,0E1H, 0DEH,0DDH,0DAH DB 0D8H,0D6H,0D4H,0D1H,0CFH, 0CCH,0CAH,0C7H DB 0C5H,0C2H,0BFH,0BCH,0BAH, 0B7H,0B4H,0B1H DB 0AEH,0ABH,0A8H,0A5H,0A2H, 9FH, 9CH, 99H DB 96H, 93H, 90H, 8DH, 89H, 86H, 83H, 80H DB 80H, 7CH, 79H, 78H, 72H, 6FH, 6CH, 69H DB 66H, 63H, 60H, 5DH, 5AH, 57H, 55H, 51H DB 4EH, 4CH, 48H, 45H, 43H, 40H, 3DH, 3AH DB 38H, 35H, 33H, 30H, 2EH, 2BH, 29H, 27H DB 25H, 22H, 20H, 1EH, 1CH, 1AH, 18H, 16H DB 15H, 13H, 11H, 10H, 0EH, 0DH, 0BH, 0AH DB 09H, 08H, 07H, 06H, 05H, 04H, 03H, 02H DB 02H, 01H, 00H, 00H, 00H, 00H, 00H, 00H DB 00H, 00H, 00H, 00H, 00H, 00H, 01H, 02H DB 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H DB 0AH, 0BH, 0DH, 0EH, 10H, 11H, 13H, 15H DB 16H, 18H, 1AH, 1CH, 1EH, 20H, 22H, 25H DB 27H, 29H, 2BH, 2EH, 30H, 33H, 35H, 38H DB 3AH, 3DH, 40H, 43H, 45H, 48H, 4CH, 4EH DB 51H, 55H, 57H, 5AH, 5DH, 60H, 63H, 66H DB 69H, 6CH, 6FH, 72H, 76H, 79H, 7CH, 80H END6 仿真测试现在使用软件Proteus进行仿真测试,下面就相应的仿真效果图: 图5 锯齿波仿真效果图 图6 三角波仿真效果图 图7 梯形波仿真效果图 图8 方波仿真效果图 图9 正弦波仿真效果图从仿真的效果来看,这次的信号发生器的设计是很成功的。而且波形也产生的很漂亮和标准。7 总结与体会经过一系列的努力,终于顺利地完成了这个单片机课程的设计。这是一个磨练意志的过程。从课题的选择开始,计算器的设计、硬件和软件系统的设计、到最后的Proteus软件仿真完成,这其中经历了很多困难,但是更重要的是在这个过程中我得到了很大的锻炼。一方面通过C51单片机等一些器件的设计让我学习和掌握了单片机技术的基础知识和技术要点,也使以前学的很多知识都得到了运用;另一方面在用Proteus软件画电路图时,然后再转换成一维的WORD中进行编辑,这个过程中让我掌握了计算机辅助的设计技术。当然,这是一个需要不断的尝试,不断的校核,不断的修改,最后完成一个合理的设计的过程。需要的是细心和耐心。在很大程度上培养了我拼搏的工作精神。使我受益匪浅,更加明确了自己专业的方向。在这一次的设计中,我不仅学到了关于单片机技术方面的许多专业知识,同时也让我感觉到团队合作的重要性。其实如何有效和快速的找到资料也是课设给我的启发,利用好图书馆和网络,是资源的到最好的利用。与他人交流思想是取得成功的关键,在交流中,不仅强化了自己原有的知识体系,也扩展了自己的思维。课设是一个通过思考、发问、自己解惑并动手、提高的过程。我会在以后的学习中不断学习,积累经验,不断完善自己,让自己变得更加出色。参考文献 1、主编:张毅刚,副主编:彭喜元,董继成 单片机原理及应用,高等教育出版社 2、主编:胡辉单片机应用系统设计与训练 中国水利水电出版社3、主编:周航慈单片机应用程序设计技术 北京航空航天大学出版社 致谢在这一次的单片机课程设计中,我特别要感谢我的指导老师谢丽英老师,她教会了我很多关于单片机的知识,给我的指导也是不容质疑的。另外,还要感谢支持和帮助我的同学们,感谢你们!18
展开阅读全文