嵌入式微控课程设计-多功能信号发生器讲解.docx

上传人:rrsccc 文档编号:9515056 上传时间:2021-03-02 格式:DOCX 页数:28 大小:207.16KB
返回 下载 相关 举报
嵌入式微控课程设计-多功能信号发生器讲解.docx_第1页
第1页 / 共28页
嵌入式微控课程设计-多功能信号发生器讲解.docx_第2页
第2页 / 共28页
嵌入式微控课程设计-多功能信号发生器讲解.docx_第3页
第3页 / 共28页
嵌入式微控课程设计-多功能信号发生器讲解.docx_第4页
第4页 / 共28页
嵌入式微控课程设计-多功能信号发生器讲解.docx_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《嵌入式微控课程设计-多功能信号发生器讲解.docx》由会员分享,可在线阅读,更多相关《嵌入式微控课程设计-多功能信号发生器讲解.docx(28页珍藏版)》请在三一文库上搜索。

1、课程: 嵌入式微控制器技术题目: 多功能信号发生器设计指导老师:专业班级: 自动化班姓名:学号:完成日期: 2015 年 1 月 24 日中南大学信息科学与工程学院综合设计报告目录一、课程设计名称及要求3二、设计思想和实施方案32.1 总体设计思路32.2 总体设计框图42.3 实施方案42.4 硬件原理图6三、典型程序模块63.1 矩阵键盘部分63.2 波形产生部分93.3 数码管显示部分103.4 蜂鸣器报警部分123.5D/A 转换部分133.6 软件设计14四、课程设计中遇到的问题及解决方法154.1 波形产生部分154.2D/A 转换部分154.3 调频调幅部分154.4 键盘扫描部

2、分154.5 上限报警部分15五、主程序流程图165.1 主程序流程16六、收获与体会16七、参考文献18八、程序清单182 / 26中南大学信息科学与工程学院综合设计报告一、设计课题名称及要求题目:多功能信号发生器设计设计要求:(1)、使用汇编语言 和 C语言(必做);(2)、程序功能要求 (必做):通过小键盘和开关给定,实现信号源启动 / 停止、输出不同类型信号波形(正弦波、三角波、方波、锯齿波等)、具备调压、调频功能、数码管(或液晶屏)显示当前信号源状态及相关参数,简单故障诊断与报警。(3)、上位机监控功能要求(选做) :通过串口或 USB口实现上 / 下位机通信,能够显示信号发生器当前

3、状态和相关参数信息, 能够从上位机控制下位机的工作。二、设计思想和实施方案题目要求是通过小键盘和开关给定,实现信号源启动 / 停止、输出正弦波、三角波、方波、锯齿波等波形并且可调压调频,用数码管或液晶屏显示当前信号源的状态及相关参数, 具备故障诊断和报警功能。2.1 总体设计思路根据题目的要求,经过仔细的考虑各种要素,制定了整体方案:以 AT89C51单片机为控制核心, P0 口接共阳极数码管显示器, P1 口接矩阵键盘, P2 口接串行接口 D/A 转换器 TLC5615和蜂鸣器报警电路,在 TLC5615输出引脚接示波器, P3 口接数码管位选控制信号。由矩阵键盘按键及按键次数控制产生波形

4、的种类及频率和幅值在一定范围内可调和显示波形参数,波形参数由 P0 口输入到数码管,由 P3 口循环位选数码管,由程序控制 P2 口产生波形(分别是锯齿波、三角波、方波和正弦波) ,在调压调频达到上限时蜂鸣器响报警并清零至下限。波形的合成:为了波形的合成,我们在采样的时候,对锯齿波、三角波、方波、正弦波都只取 20 个点。3 / 26中南大学信息科学与工程学院综合设计报告2.2 总体设计框图本系统总体框图如图1 所示AT89C51P0.0数码管段选系统时钟P0.7示系统复位P2.0波TLC5615P2.2器P2.7蜂鸣器P1.0P3.4矩阵键盘数码管位选P1.7P3.7图 1 系统总体框图2.

5、3 实施方案2.3.1 矩阵键盘部分在单片机 P3 口端口接有矩阵式键盘,矩阵式键盘由4 条行线和4 条列线所组成, 16 个按键设置在行、列线交点上,其中4 条行线的一端分别与单片机 P1 口的 P1.0、P1.1、P1.2、P1.3 相接,另一端通过上拉电阻接到 +5V上,平时使行线处于高电平状态;而4 条列线一段分别与 P1.4、 P1.5、P1.6 、P1.7 相接。当扫描开始时,首先将行设置为低电平,在判断有键被按下后、读入列状态,如果列状态出现并非全部为 1 状态,这时 0 状态的列与行相交的键就是被按下的键。2.3.2 波形产生部分波形产生可以通过增加步长并延时,外加循环的方式来

6、实现, 这4 / 26中南大学信息科学与工程学院综合设计报告种方式对于锯齿波、三角波和方波都易实现,但是对于正弦波,由于它是非线性的,实现起来较为困难。若用 C语言编程,可以直接调用C语言自带的 sin 函数来实现,由于汇编语言不带 sin 函数,所以在汇编编程产生正弦波比较容易实现的方式为查表方式, 预先将正弦采样点数值存储在表中,通过指针调用显示 ( 采样点数值可以通过数学计算得出,也可以通过 MATLAB采样得出 ) 。其他三种波也可以通过查表方式,这样四种波形可只使用同一函数段实现。 由于本程序使用汇编语言编写,故使用查表方式。2.3.3 数码管显示部分单片机实现显示功能需要做的步骤有

7、: 将计算好的十六进制的波形幅度数值、周期数值转换成适应 LED数码管显示的数据, 即进行十进制处理,并存入数码管显示内存中 (事先设置的存放显示器数据单元)。再经扫描显示程序使之能在数码管上显示数据。扫描显示子程序动态显示送入 4 位 LED数码管数据。所谓的动态显示是指一位一位轮流点亮 LED数码管,每一位停留 4ms,利用人的视觉暂留消除闪烁现象。2.3.4 蜂鸣器报警部分在调幅调周期达到上限以后通过软件将 P2.7 口置 1,使之高低电平交替延时,即可使蜂鸣器产生鸣叫。2.3.5D/A 转换部分D/A 转换可用的芯片有 DAC0832、TLC5615等,DAC0832芯片的 8 位数字

8、量采用并行输入, 占用端口较多, 在初步设计时决定采用通过 3 根串行总线就可以完成 10 位数据串行输入的 TLC5615。2.3.6 调幅调频部分调频调幅原理相同,一个是改变延时,一个是改变步长。在确定延时和步长基值的基础上, 通过乘以调频调幅倍数即可得到各个幅度和各个周期值得波形。 对于如何确定调频调幅的倍数, 有两种方式实现,一是通过 A/D 转换芯片 TLC549可以得到 00H-0FFH 范围内的数值,但是电压上限时 +5V,TLC549产生的绝大部分数据作为基值乘以的倍数显然是不符合实际使用的, 会造成波形削顶现象, 对此可以通过将每次 A/D 产生的数据除以一个常数,如 #50

9、,即可使之减小,同时产生的弊端是 A/D 转换的数据只有几个特定值, 无极调幅无极调频变成了有极调频有极调幅。 鉴于上述原因, 本次设计直接采用有极调频,预先设定一个存储单元存储要输入的倍数即可, 实现起来较为简5 / 26中南大学信息科学与工程学院综合设计报告单。2.4 硬件原理图幅值(V)周期(ms )R2R3R4R51001001001007654C1U1. . . .PP P P333319XTAL1P0.0/AD03938P0.1/AD130pF37P0.2/AD21836XTAL2P0.3/AD335P0.4/AD434R1P0.5/AD5C2P0.6/AD6332k932RSTP

10、0.7/AD7U5AP2.0/A8212SCLKOUT7B30pF2236P2.1/A9CSREFIN231P2.2/A10DINC29244PSENP2.3/A11DOUTD230ALEP2.4/A1225TLC5615C(L)DD锯齿波三角波方波正弦波31EAP2.5/A13261N400727U2(D0)P2.6/A1428P2.7/A15幅度 +1幅度-1周期 +1周期 -11P1.0/T2P3.0/RXD10211P1.1/T2EXP3.1/TXD312P1.2P3.2/INT0U2显示读数413P1.3P3.3/INT1LS1514P3.4P1.4P3.4/T0615P3.5P1.

11、5P3.5/T1716P3.6P1.6P3.6/WR817P3.7P1.7P3.7/RDANDAT89C52SOUNDERNET=P3.11三、典型程序模块3.1 矩阵键盘部分6 / 26中南大学信息科学与工程学院综合设计报告29PSE30ALE锯齿波三角波方波正弦波31EA幅度 +1幅度 -1周期 +1周期 -11P1.02P1.13P1.24显示读数P1.35P1.46P1.57P1.68P1.7AT89NET=程序:KEYSCAN:MOV R4,#00HKEY_L1:MOV R3,#0F7H; 扫描初值( P3.3=0)MOV R1,#00H; 取码指针KEY_L2:MOV A,R3;

12、开始行扫描MOV P1,AMOV A,P1MOV R4,ASETB CMOV R5,#04HKEY_L3:RLC AJNC KEY_KEYINC R1DJNZ R5,KEY_L37 / 26中南大学信息科学与工程学院综合设计报告MOV A,R3SETB CRRC AMOV R3,AJC KEY_L2JMP KEY_L1KEY_KEY:ACALL KEY_DELAYKEY_D1:MOV A,P1XRL A,R4JZ KEY_D1MOV A,R1CJNE A,#00H,M1JMP JUCHIM1:CJNE A,#01H,M2JMP SANJIAOM2:CJNE A,#02H,M3JMP FANGB

13、OM3:CJNE A,#03H,M4JMP ZHENGXIANM4:CJNE A,#04H,M5JMP TLC549_AD1M5:CJNE A,#05H,M68 / 26中南大学信息科学与工程学院综合设计报告JMP TLC549_AD2M6:CJNE A,#06H,M7JMP TLC549_AD3M7:CJNE A,#07H,M8JMP TLC549_AD4M8:CJNE A,#08H,KEY_L1JMP CONV_DISPKEY_DELAY:MOV R7,#60MOV R6,#248KEY_DLY1:DJNZ R6,$DJNZ R7,KEY_DLY1RET.0/AD0波形产生部分3.238.

14、1/AD137.2/AD236.3/AD335.4/AD4R134.5/AD533.6/AD62k32.7/AD7U5A21272.0/A8SCLKOUTB22362.1/A9CSREFIN231.2/A10DINC244.3/A11DOUTD225.4/A12TLC5615C(L)DD.5/A13261N400727程序(仅列出正弦波,其他相似) :ZHENGXIAN:MOV P1,#0F0HMOV R0,#AMPMOV DPTR,#TABLE4MOV R7,#09 / 26中南大学信息科学与工程学院综合设计报告ZHENGXIAN_L1: MOV A,R7MOVC A,A+DPTRMOV B

15、,R0MUL ABACALL DA_CONACALL DELAYZHENGXIANINC R7CJNE R7,#20,ZHENGXIAN_L1MOV A,P1CJNE A,#0F0H,ZHENGXIAN_L2JMP ZHENGXIANZHENGXIAN_L2: LJMP KEYSCANDELAYZHENGXIAN: MOV R1,FREZHENGXIAN_L3: MOV R6,#24DJNZ R6,$DJNZ R1,ZHENGXIAN_L3RETTABLE4:DB13,16,18,19,20,19,18,16,13,10,7,4,2,1,0,1,2,4,7,10,133.3 数码管显示部分10

16、 / 26中南大学信息科学与工程学院综合设计报告幅值( V)周期( ms )R2R3R4R51001001001007654. . . .3333P P P PP0.0/AD03938P0.1/AD137P0.2/AD236P0.3/AD335P0.4/AD4P3.2/INT0342kP0.6/AD633P0.5/AD513U5R1P0.7/AD732P3.3/INT1A14P3.4P3.4/T015P3.5P3.5/T116P3.6P3.6/WR17P3.7P3.7/RD程序:DISP:MOV P1,#0F0HDISP_L1:MOV R0,#BUFMOV R2,#4MOV ACC,#1000

17、0000BS1:PUSH ACCMOV A,R0MOV P0,A11 / 26中南大学信息科学与工程学院POP ACCMOV P3,ACCMOV R5,#40ACALL DELAYCONV_DISPRR AINC R0DJNZ R2,S1MOV A,P1CJNE A,#0F0H,DISP_L2JMP DISP_L1DISP_L2:LJMP KEYSCANA123.426蜂鸣器报警部分TLC5615C(L)DA1327U2(D0)A1428A15RXD1011TXD12NT0U213NT1P3.4144/T015P3.55/T116P3.6WR17P3.7/RDANDMOV R4,#100EXT

18、0_D21:MOV R5,#10ACALL DELAYEXT01综合设计报告D2D1N4007LS1SOUNDER12 / 26中南大学信息科学与工程学院SETB P2.7MOV R5,#10ACALL DELAYEXT01CLR P2.7DJNZ R4,EXT0_D213.5D/A 转换部分U52SCLKOUT3CSREFIN1DIN4DOUTTLC5615C(L)D综合设计报告76DA_CON:MOV R4,A;把表值赋给高位R4MOV R5,#0; 把 0 赋给低位 R5MOV R2,#08H; 高位转换循环次数MOV R3,#04H;低位转换循环次数CLR CCLR SCKSETB C

19、SNOPCLR CS13 / 26中南大学信息科学与工程学院综合设计报告MOV A,R4LOOPH:NOP; 高位转换RLC AMOV DI,CSETB SCKNOPCLR SCKDJNZ R2,LOOPHMOV A,R5LOOPL:NOP; 低位转换RLC AMOV DI,CSETB SCKNOPCLR SCKDJNZ R3,LOOPLSETB CSRET3.6 软件设计主程序和子程序都存放在 AT89C51单片机中。主程序的功能是:开机以后负责查键, 即做出键盘扫描及显示工作, 然后根据用户所按的键转到相应的子程序进行处理。 子程序的功能有:按键扫描子程序、14 / 26中南大学信息科学与

20、工程学院综合设计报告延时子程序、显示子程序、调频调幅子程序、 D/A 转换子程序、十六进制数转化为十进制数子程序, 其中调频调幅子程序中包含上限报警程序段。主程序的流程图如图所示:完成全部硬件和软件过后, 将程序下载到单片机中进行测试, 通过反复测试,反复的修改函数的功能,同时完善硬件的功能,使系统达到最优控制。四、课程设计中遇到的问题及解决方法4.1 波形产生部分初步预定是通过程序自增自减并加延时的方式产生波形, 但是在产生正弦波这一模块遇到了困难,所以统一全部用查表的方式4.2D/A 转换部分TLC5615转换的是 12 位数据(其中最低两位为 0),而单片机产生的数据是 8 位数据,在转

21、换时决定将数据统一送入高位寄存器, 转换 8 次,而将低位寄存器统一移入 0 转换 4 次,总共 12 次循环,分为高位部分和低位部分分别进行转换。4.3 调频调幅部分利用 TLC459芯片 A/D 转换可用得到一个数据作为幅度、周期基值的倍数,但实际运用时调试程序总是达不到预期效果, 而且将转换后的数值同除以一个固定数后和有极调频调幅效果相同, 所以决定直接在软件中实现调频调幅。4.4 键盘扫描部分参照资料书上的键盘扫描程序, 键盘一直处于扫描中, 在作为主程序需要找到分支入口, 所以在扫描键盘生成键值后增加了比较不等转移语句,以指向分支结构。4.5 上限报警部分上限报警部分原准备利用外部中

22、断实现,但是外部中断P3.2 口利用软件清零是不能触发外部中断的,直接利用按键又失去了报警的15 / 26中南大学信息科学与工程学院综合设计报告价值,于是直接将报警程序段嵌入调幅调频部分部分,也可达到目的。此外,蜂鸣器在程序运行开始就鸣叫,所以在主程序中加入 P2.7 清零语句。五、主程序流程图5.1 主程序流程图主程序流程图如图2 所示开始键盘扫描输出键值03478波形产生调频调幅显示状态是否有键按下结束图 2 主程序流程图六、收获与体会16 / 26中南大学信息科学与工程学院综合设计报告本次课程设计,让我感受到了理论与实践相结合的重要性和困难性。要想深入地学习到一门知识的内容,仅仅停留在理

23、论层面是不够的,不仅理解不透,而且也不利于进一步的深入。而在理论与实践直接建立连接,也不是很容易的。从软件方面来说,一个大的完整的程序肯定不是放在一起调试的,是将其分成几个模块后分别调试,调试成功后再组合在一起再整体调试。在模块调试过程中, 经常遇到的一个问题就是: 程序看似合情合理, 但就是不出结果或者结果不是预期想要的,这是一件非常苦恼的事, 一些错误可以在调试过程中找出来,但调试过程并不能找出所有的错误,对于这种情况,就需要改变思路,或者重新编写程序段,改变软件,或者换用其他芯片,改变硬件。从硬件方面来说, 仿真得出结果并不意味着实际电路连接也可以同样得到结果,得考虑根据仿真电路里显示的

24、电平高低一点点去排查实际电路里各个点的电平是否正确等等问题,能利用实际电路得出结果意味着理解又深入了一层。在编程语言方面,本次课程设计我选择通过汇编语言来实现。汇编语言和 C语言只是语言不通, 而他们需要实现的目标是一致的。就像到达同一目的地的两条道路,不通之处在于: 利用 C 语言写比较简单、容易实现、速度较快;而利用汇编语言实现比较困难,但是汇编语言对于人思路的启发是非常有帮助的,更能锻炼人的思想。 我们在实际运用中,以后的学习中,可能大部分程序都是用C 语言,但不能17 / 26中南大学信息科学与工程学院综合设计报告因此而摈弃汇编语言。总的来说,本次课程设计我收获颇丰!不仅是知识方面的理

25、解,更多的是学习态度方面的, 学好一门知识既需要坚持不懈又需要选取捷径或者避重就轻,具体如何需要我们自己把握。七、参考文献1 王守中 .51 单片机开放入门与典型实例 . 北京:人民邮电出版社, 20072 高玉芹 . 单片机原理与应用及 C51编程技术 . 北京:机械工业出版社, 20113 网络八、程序清单;-;文件名称: keshezonghe.asm;程序功能:多功能信号发生器;-;- 程序初始化 -;定义调幅调周期、显示数据单元地址BUF EQU 30H;3034H 连续 4 个字节存放显示器数据FRE EQU 34H;存放调周期基值倍数变量AMP EQU 35H;存放调幅度基值倍数

26、变量FREQ EQU 36H; 存放周期变量18 / 26中南大学信息科学与工程学院综合设计报告AMPQ EQU 37H; 存放幅值变量;DA 转换 TLC5615 芯片引脚定义DI BIT P2.2; 芯片 DIN 引脚定义CS BIT P2.1; 芯片 CS 引脚定义SCK BIT P2.0 ;芯片 SCLK 引脚定义;程序开始执行地址ORG 0000H; 程序代码由地址0 开始执行JMP START;-主程序 -START:MOV FRE,#15;调周期倍数赋初值 15MOV AMP,#3; 调幅度倍数赋初值3CLR P2.7; 清零蜂鸣器引脚;-键盘扫描子程序 -KEYSCAN:MOV

27、 R4,#00HKEY_L1:MOV R3,#0F7H; 扫描初值( P3.3=0)MOV R1,#00H;取码指针KEY_L2:MOV A,R3; 开始行扫描MOV P1,AMOV A,P1MOV R4,ASETB CMOV R5,#04HKEY_L3:RLC AJNC KEY_KEYINC R1DJNZ R5,KEY_L3MOV A,R3SETB CRRC AMOV R3,AJC KEY_L2JMP KEY_L1KEY_KEY:ACALL KEY_DELAYKEY_D1:MOV A,P1XRL A,R4JZ KEY_D1MOV A,R1CJNE A,#00H,M1JMP JUCHIM1:C

28、JNE A,#01H,M2JMP SANJIAOM2:CJNE A,#02H,M3JMP FANGBOM3:CJNE A,#03H,M419 / 26中南大学信息科学与工程学院综合设计报告JMP ZHENGXIANM4:CJNE A,#04H,M5JMP TLC549_AD1M5:CJNE A,#05H,M6JMP TLC549_AD2M6:CJNE A,#06H,M7JMP TLC549_AD3M7:CJNE A,#07H,M8JMP TLC549_AD4M8:CJNE A,#08H,KEY_L1JMP CONV_DISPKEY_DELAY:MOV R7,#60MOV R6,#248KEY_DL Y1:DJNZ R6,$DJNZ R7,KEY_DL Y1RET;- 锯齿波生成部分-JUCHI:MOV P1,#0F0HMOV R0,#AMPMOV DPTR,#TABLE1MOV R7,#0JUCHI_L1:MOV A,R7MOVC A,A+DPTRMOV B,R0MUL ABACALL DA_CONACALL DELAYJUCHIINC R7CJNE R7,#20,JUCHI_L1MOV A,P1CJNE A,#0F0H,KEYSCANJMP JUCHI;- 锯齿波延时子程序-DELAYJUCHI:MOV R1,FREJUCHI_L2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1