ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:243.85KB ,
资源ID:10294855      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-10294855.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(嵌入式微控课程设计多功能信号发生器.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

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

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键盘扫描部分 154.

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

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

4、程序控制P2口产生波形(分别是锯齿波、三角波、方波和正弦波),在调压调频达到上限时蜂鸣器响报警并清零至下限。波形的合成:为了波形的合成,我们在采样的时候,对锯齿波、三角波、方波、正弦波都只取20个点。2.2总体设计框图本系统总体框图如图1所示图1 系统总体框图2.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

5、.7相接。当扫描开始时,首先将行设置为低电平,在判断有键被按下后、读入列状态,如果列状态出现并非全部为1状态,这时0状态的列与行相交的键就是被按下的键。2.3.2波形产生部分波形产生可以通过增加步长并延时,外加循环的方式来实现,这种方式对于锯齿波、三角波和方波都易实现,但是对于正弦波,由于它是非线性的,实现起来较为困难。若用C语言编程,可以直接调用C语言自带的sin函数来实现,由于汇编语言不带sin函数,所以在汇编编程产生正弦波比较容易实现的方式为查表方式,预先将正弦采样点数值存储在表中,通过指针调用显示(采样点数值可以通过数学计算得出,也可以通过MATLAB采样得出)。其他三种波也可以通过查

6、表方式,这样四种波形可只使用同一函数段实现。由于本程序使用汇编语言编写,故使用查表方式。2.3.3数码管显示部分单片机实现显示功能需要做的步骤有:将计算好的十六进制的波形幅度数值、周期数值转换成适应LED数码管显示的数据,即进行十进制处理,并存入数码管显示内存中(事先设置的存放显示器数据单元)。再经扫描显示程序使之能在数码管上显示数据。扫描显示子程序动态显示送入4位LED数码管数据。所谓的动态显示是指一位一位轮流点亮LED数码管,每一位停留4ms,利用人的视觉暂留消除闪烁现象。2.3.4蜂鸣器报警部分在调幅调周期达到上限以后通过软件将P2.7口置1,使之高低电平交替延时,即可使蜂鸣器产生鸣叫。

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

8、顶现象,对此可以通过将每次A/D产生的数据除以一个常数,如#50,即可使之减小,同时产生的弊端是A/D转换的数据只有几个特定值,无极调幅无极调频变成了有极调频有极调幅。鉴于上述原因,本次设计直接采用有极调频,预先设定一个存储单元存储要输入的倍数即可,实现起来较为简单。2.4硬件原理图三、典型程序模块3.1矩阵键盘部分程序:KEYSCAN: MOV R4,#00HKEY_L1: MOV R3,#0F7H ;扫描初值(P3.3=0) MOV R1,#00H ;取码指针KEY_L2: MOV A,R3 ;开始行扫描 MOV P1,A MOV A,P1 MOV R4,A SETB C MOV R5,#

9、04H KEY_L3: RLC A JNC KEY_KEY INC R1 DJNZ R5,KEY_L3 MOV A,R3 SETB C RRC A MOV R3,A JC KEY_L2 JMP KEY_L1 KEY_KEY: ACALL KEY_DELAY KEY_D1: MOV A,P1 XRL A,R4 JZ KEY_D1 MOV A,R1 CJNE A,#00H,M1 JMP JUCHIM1: CJNE A,#01H,M2 JMP SANJIAOM2: CJNE A,#02H,M3 JMP FANGBOM3: CJNE A,#03H,M4 JMP ZHENGXIANM4: CJNE A,

10、#04H,M5 JMP TLC549_AD1M5: CJNE A,#05H,M6 JMP TLC549_AD2M6: CJNE A,#06H,M7 JMP TLC549_AD3M7: CJNE A,#07H,M8 JMP TLC549_AD4M8: CJNE A,#08H,KEY_L1 JMP CONV_DISPKEY_DELAY: MOV R7,#60 MOV R6,#248KEY_DLY1: DJNZ R6,$ DJNZ R7,KEY_DLY1 RET3.2波形产生部分程序(仅列出正弦波,其他相似):ZHENGXIAN: MOV P1,#0F0H MOV R0,#AMP MOV DPTR,

11、#TABLE4 MOV R7,#0ZHENGXIAN_L1: MOV A,R7 MOVC A,A+DPTR MOV B,R0 MUL AB ACALL DA_CON ACALL DELAYZHENGXIAN INC R7 CJNE R7,#20,ZHENGXIAN_L1 MOV A,P1 CJNE A,#0F0H,ZHENGXIAN_L2 JMP ZHENGXIANZHENGXIAN_L2: LJMP KEYSCANDELAYZHENGXIAN: MOV R1,FREZHENGXIAN_L3: MOV R6,#24 DJNZ R6,$ DJNZ R1,ZHENGXIAN_L3 RETTABLE

12、4: DB 13,16,18,19,20,19,18,16,13,10,7,4,2,1,0,1,2,4,7,10,133.3数码管显示部分程序:DISP: MOV P1,#0F0HDISP_L1: MOV R0,#BUF MOV R2,#4 MOV ACC,#10000000BS1: PUSH ACC MOV A,R0 MOV P0,A POP ACC MOV P3,ACC MOV R5,#40 ACALL DELAYCONV_DISP RR A INC R0 DJNZ R2,S1 MOV A,P1 CJNE A,#0F0H,DISP_L2 JMP DISP_L1DISP_L2: LJMP K

13、EYSCAN 3.4蜂鸣器报警部分 MOV R4,#100 EXT0_D21: MOV R5,#10 ACALL DELAYEXT01 SETB P2.7 MOV R5,#10 ACALL DELAYEXT01 CLR P2.7 DJNZ R4,EXT0_D213.5D/A转换部分DA_CON: MOV R4,A ;把表值赋给高位R4 MOV R5,#0 ;把0赋给低位R5 MOV R2,#08H ;高位转换循环次数 MOV R3,#04H ;低位转换循环次数 CLR C CLR SCK SETB CS NOP CLR CS MOV A,R4LOOPH: NOP ;高位转换 RLC A MOV

14、 DI,C SETB SCK NOP CLR SCK DJNZ R2,LOOPH MOV A,R5LOOPL: NOP ;低位转换 RLC A MOV DI,C SETB SCK NOP CLR SCK DJNZ R3,LOOPL SETB CS RET3.6软件设计主程序和子程序都存放在AT89C51单片机中。主程序的功能是:开机以后负责查键,即做出键盘扫描及显示工作,然后根据用户所按的键转到相应的子程序进行处理。子程序的功能有:按键扫描子程序、延时子程序、显示子程序、调频调幅子程序、D/A转换子程序、十六进制数转化为十进制数子程序,其中调频调幅子程序中包含上限报警程序段。主程序的流程图如图

15、所示:完成全部硬件和软件过后,将程序下载到单片机中进行测试,通过反复测试,反复的修改函数的功能,同时完善硬件的功能,使系统达到最优控制。四、课程设计中遇到的问题及解决方法4.1波形产生部分初步预定是通过程序自增自减并加延时的方式产生波形,但是在产生正弦波这一模块遇到了困难,所以统一全部用查表的方式4.2D/A转换部分TLC5615转换的是12位数据(其中最低两位为0),而单片机产生的数据是8位数据,在转换时决定将数据统一送入高位寄存器,转换8次,而将低位寄存器统一移入0转换4次,总共12次循环,分为高位部分和低位部分分别进行转换。4.3调频调幅部分利用TLC459芯片A/D转换可用得到一个数据

16、作为幅度、周期基值的倍数,但实际运用时调试程序总是达不到预期效果,而且将转换后的数值同除以一个固定数后和有极调频调幅效果相同,所以决定直接在软件中实现调频调幅。4.4键盘扫描部分参照资料书上的键盘扫描程序,键盘一直处于扫描中,在作为主程序需要找到分支入口,所以在扫描键盘生成键值后增加了比较不等转移语句,以指向分支结构。4.5上限报警部分上限报警部分原准备利用外部中断实现,但是外部中断P3.2口利用软件清零是不能触发外部中断的,直接利用按键又失去了报警的价值,于是直接将报警程序段嵌入调幅调频部分部分,也可达到目的。此外,蜂鸣器在程序运行开始就鸣叫,所以在主程序中加入P2.7清零语句。五、主程序流

17、程图5.1主程序流程图主程序流程图如图2 所示图2 主程序流程图六、收获与体会本次课程设计,让我感受到了理论与实践相结合的重要性和困难性。要想深入地学习到一门知识的内容,仅仅停留在理论层面是不够的,不仅理解不透,而且也不利于进一步的深入。而在理论与实践直接建立连接,也不是很容易的。从软件方面来说,一个大的完整的程序肯定不是放在一起调试的,是将其分成几个模块后分别调试,调试成功后再组合在一起再整体调试。在模块调试过程中,经常遇到的一个问题就是:程序看似合情合理,但就是不出结果或者结果不是预期想要的,这是一件非常苦恼的事,一些错误可以在调试过程中找出来,但调试过程并不能找出所有的错误,对于这种情况

18、,就需要改变思路,或者重新编写程序段,改变软件,或者换用其他芯片,改变硬件。从硬件方面来说,仿真得出结果并不意味着实际电路连接也可以同样得到结果,得考虑根据仿真电路里显示的电平高低一点点去排查实际电路里各个点的电平是否正确等等问题,能利用实际电路得出结果意味着理解又深入了一层。在编程语言方面,本次课程设计我选择通过汇编语言来实现。汇编语言和C语言只是语言不通,而他们需要实现的目标是一致的。就像到达同一目的地的两条道路,不通之处在于:利用C语言写比较简单、容易实现、速度较快;而利用汇编语言实现比较困难,但是汇编语言对于人思路的启发是非常有帮助的,更能锻炼人的思想。我们在实际运用中,以后的学习中,

19、可能大部分程序都是用C语言,但不能因此而摈弃汇编语言。总的来说,本次课程设计我收获颇丰!不仅是知识方面的理解,更多的是学习态度方面的,学好一门知识既需要坚持不懈又需要选取捷径或者避重就轻,具体如何需要我们自己把握。七、参考文献1王守中.51单片机开放入门与典型实例.北京:人民邮电出版社,20072高玉芹.单片机原理与应用及C51编程技术.北京:机械工业出版社,20113网络八、程序清单;-;文件名称:keshezonghe.asm;程序功能:多功能信号发生器;-;-程序初始化-;定义调幅调周期、显示数据单元地址 BUF EQU 30H ;3034H连续4个字节存放显示器数据 FRE EQU 3

20、4H ;存放调周期基值倍数变量 AMP EQU 35H ;存放调幅度基值倍数变量 FREQ EQU 36H ;存放周期变量 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 ;调周期倍数赋初值15 MOV AMP,#3 ;调幅度倍数赋初值3 CLR P2.7 ;清零蜂鸣器引脚;-键盘扫描子程序-

21、KEYSCAN: MOV R4,#00HKEY_L1: MOV R3,#0F7H ;扫描初值(P3.3=0) MOV R1,#00H ;取码指针KEY_L2: MOV A,R3 ;开始行扫描 MOV P1,A MOV A,P1 MOV R4,A SETB C MOV R5,#04H KEY_L3: RLC A JNC KEY_KEY INC R1 DJNZ R5,KEY_L3 MOV A,R3 SETB C RRC A MOV R3,A JC KEY_L2 JMP KEY_L1 KEY_KEY: ACALL KEY_DELAY KEY_D1: MOV A,P1 XRL A,R4 JZ KEY_

22、D1 MOV A,R1 CJNE A,#00H,M1 JMP JUCHIM1: CJNE A,#01H,M2 JMP SANJIAOM2: CJNE A,#02H,M3 JMP FANGBOM3: CJNE A,#03H,M4 JMP ZHENGXIANM4: CJNE A,#04H,M5 JMP TLC549_AD1M5: CJNE A,#05H,M6 JMP TLC549_AD2M6: CJNE A,#06H,M7 JMP TLC549_AD3M7: CJNE A,#07H,M8 JMP TLC549_AD4M8: CJNE A,#08H,KEY_L1 JMP CONV_DISPKEY_D

23、ELAY: MOV R7,#60 MOV R6,#248KEY_DLY1: DJNZ R6,$ DJNZ R7,KEY_DLY1 RET;-锯齿波生成部分-JUCHI: MOV P1,#0F0H MOV R0,#AMP MOV DPTR,#TABLE1 MOV R7,#0JUCHI_L1: MOV A,R7 MOVC A,A+DPTR MOV B,R0 MUL AB ACALL DA_CON ACALL DELAYJUCHI INC R7 CJNE R7,#20,JUCHI_L1 MOV A,P1 CJNE A,#0F0H,KEYSCAN JMP JUCHI;-锯齿波延时子程序-DELAYJU

24、CHI: MOV R1,FRE JUCHI_L2: MOV R6,#24 DJNZ R6,$ DJNZ R1,JUCHI_L2 RET;-三角波生成部分-SANJIAO: MOV P1,#0F0H MOV R0,#AMP MOV DPTR,#TABLE2 MOV R7,#0SANJIAO_L1: MOV A,R7 MOVC A,A+DPTR MOV B,R0 MUL AB ACALL DA_CON ACALL DELAYSANJIAO INC R7 CJNE R7,#20,SANJIAO_L1 MOV A,P1 CJNE A,#0F0H,SANJIAO_L2 JMP SANJIAOSANJIA

25、O_L2: LJMP KEYSCAN;-三角波延时子程序- DELAYSANJIAO: MOV R1,FRESANJIAO_L3: MOV R6,#24 DJNZ R6,$ DJNZ R1,SANJIAO_L3 RET;-方波生成部分-FANGBO: MOV P1,#0F0H MOV R0,#AMP MOV DPTR,#TABLE3 MOV R7,#0FANGBO_L1: MOV A,R7 MOVC A,A+DPTR MOV B,R0 MUL AB ACALL DA_CON ACALL DELAYFANGBO INC R7 CJNE R7,#20,FANGBO_L1 MOV A,P1 CJNE

26、 A,#0F0H,FANGBO_L2 JMP FANGBOFANGBO_L2: LJMP KEYSCAN;-方波延时子程序- DELAYFANGBO: MOV R1,FREFANGBO_L3: MOV R6,#24 DJNZ R6,$ DJNZ R1,FANGBO_L3 RET;-正弦波生成部分-ZHENGXIAN: MOV P1,#0F0H MOV R0,#AMP MOV DPTR,#TABLE4 MOV R7,#0ZHENGXIAN_L1: MOV A,R7 MOVC A,A+DPTR MOV B,R0 MUL AB ACALL DA_CON ACALL DELAYZHENGXIAN INC R7 CJNE R7,#20,ZHENGXIAN_L1 MOV A,P1 CJNE A,#0F0H,ZHENGXIAN_L2 JMP ZHENGXIANZHENGXIAN_L2: LJMP KEYSCAN;-正弦波延时子程序- DELAYZHENGXIAN: MOV R1,FREZHEN

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2