
课 程 单片机原理及应用课程设计
题 目 波形发生器的设计
院 系
专业班级
学生姓名
学生学号
指导教师
2010年3月 19日
课程设计任务书
课程 单片机原理及应用课程设计
题目 波形发生器的设计
专业 电子信息工程 姓名 学号
主要内容、基本要求、主要参考资料等
1、主要内容:
根据单片机课程所学内容,结合其他相关课程知识,设计一个波形发生器,以加深对单片机知识的理解,锻炼实践动手能力,为以后的毕业设计和工作打下坚实基础。
2、基本要求:
本设计以MCS-51系列单片机为核心,采用常用电子器件设计。可以产生正弦波、方波、三角波等常用标准波形,由按键选择并显示。
3、主要参考资料:
[1] 张毅坤,陈善久.单片微型计算机原理及应用.西安:西安电子科技大学出版社,2002.
[2] 张友德,赵志英,徐时亮.单片微机原理应用与实验.上海:复旦大学出版社,2000.
[3] 伟福Lab2000P系列单片机仿真实验系统说明书.
完成期限 2010.3.15-2010.3.19
指导教师
专业负责人
2010年3 月 13 日
第一章概述.........................................................1
第二章系统设计.....................................................2
2.1 系统原理设计.............................................. 2
第三章硬件设计.....................................................3
3.1单片机电路设计..............................................3
3.2 键盘/显示接口电路设计......................................4
3.3 D/A转换电路设计............................................5
第四章 软件设计....................................................5
4.1 主程序及中断程序...........................................5
4.2 显示系统程序...............................................6
4.3 键盘处理程序...............................................6
第一章概述
单片机是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的抗干扰能力,较低的成本,这也是和离线式计算机的(比如家用PC)的主要区别。
单片机是靠程序的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性!波形发生器是一种数据信号发生器,在调试硬件时,常常需要加入一些信号,以观察电路工作是否正常。用一般的信号发生器,不但笨重,而且只发一些简单的波形,不能满足需要。例如用户要调试串口通信程序时,就要在计算机上写好一段程序,再用线连接计算机和用户实验板,如果不正常,不知道是通讯线有问题还是程序有问题。用E2000/L的波形发生器功能,就可以定义串口数据。通过逻辑探勾输出,调试起来简单快捷。
第二章系统设计
2.1 系统原理设计
系统设计的原理方框图如图1所示。MCS-51系列的8051单片机是整个波形发生器的核心部分,他从程序存储器读取程序,从键盘接收数据,经过处理送到LED数码管,并产生相应的数字信号送到D/A转换器,转换成模拟信号也就是所需要的波形输出。4×4键盘可使8051接收用户输入的波形选择、波形频率和幅值电压信息,LED数码管则将这些信息显示出来,8051单片机执行存储的程序指令,产生相应的不同频率和幅值的波形。
图2.1系统原理方框图
波形发生器通电后,系统进行初始化,数码将显示显示6个‘-’,等待输入设置命令。键盘上除了0-9这十个数字键外,还有按“幅值”、“频率”、“方波”、“正弦波”、“三角波”进行相应设置的键,以及“Enter”键。输入相应的参数后,LED数码管上将显示参数值,全部设置完毕后,按“Enter”键,LED数码管显示波形的编码、电压幅值、频率。要停止使用波形发生器,可按下复位按钮将系统复位,然后关闭电源。
第三章 硬件设计
单片机电路设计
单片机是整个波形发生器的核心部件,本次设计采用了应用广泛的MCS-51系列的8051单片机。单片机在整个系统中的作用是形成扫描码,进行键值识别、键处理、参数设置;形成显示段码;产生定时中断;形成波形的数字编码,并输出到D/A接口电路。
电路如图2所示。8051单片机的P1口作为4×4键盘的接口。P2口作为LED数码显示管的位选择接口。用定时/计数器作为中断源。不同的频率值对应不同的定时初值,允许定时器溢出中断。定时器中断的特殊功能寄存器设置如下:
定时控制寄存器TCON=20H;工作方式选择寄存器TMOD=00H;中断允许控制寄存器IE=82H。
8051执行指令的时间以及定时器/计数器记数的频率都与震荡源的周期有关,为了提高波形频率的精度,采用了6MHz的晶振与外部时钟的方式,晶振的两个引脚分别与8051单片机的外接晶振引脚X1和X2相连。另外还设计了复位电路。
图3.1 键盘/显示接口电路
键盘/显示接口电路设计
整个键盘/显示接口电路由反向驱动器ULN2803A、6位共阴极数码管和4×4键盘组成。它的作用是驱动6位数码管动态显示,扫描键盘,根据输入的参数执行相应的程序。电路设计如图二所示。P0口作为数码管的段选口,P2口作为位选口,与UNL2803A相连接。P1口的低四位作为键盘的行状态的输入,高四位作为输出扫描。
转换电路设计
整个电路由两片DAC0832数模转换器和两块LM324运放组成。
单片机8051产生的是数字信号,要想得到所需要的波形,就要把8051单片机产生的数字信号转换成模拟信号,这就需要一种能把数字信号转换成模拟信号的器件,这种器件就是数模转换器DAC。实际上,DAC输出的电量也不是真正能联续可调,而是以DAC的绝对分辨率为单位递增,这实际上是准模拟量输出。本次设计的波形发生器选用价格低廉、接口简单、转换控制容易的8位分辨率的数模转换器DAC0832。DAC0832转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路组成,它具有两个输入数据寄存器,能直接与8051单片机接口相连。图3是实际设计的D/A转换电路。这个电路将波形样值的编码转换成模拟值;完成单极性的波形输出。
DAC0832(1)提供参考电压,单片机向0832(1)送数字编码,产生不同的输出。本波形发生器可输出1V、2V、3V、4V、5V五个电压。0832(1)输出电压作为的0832(2)的参考电压,因此本波形发生器的幅值是可调的。0832(2)产生各种波形,生成波形样值码,经D/A转换得到各种模拟样值点。假如N个点构成波形的一个周期,则0832(2)输出N个样值点后,样值点形成运动轨迹,即一个周期。重复输出N个点,成为第二个周期。如此循环就形成了一定周期的信号波形。
两片DAC0832数模转换器的地址分配如下:0832(1):BFFFH, 0832(2):7FFFH。
图3.2 D/A转换电路
第四章 软件设计
主程序及中断程序
实现系统的波形输出。单片机的片内RAM有128字节,30~3FH作为堆栈区,40~45H为显示缓冲区,40H存放波形编码,42H~45H存放频率值,42H存放参考电压值,46H为设置标志区。
图4.1 主程序流程 图4.2 定时器中断程序流程
显示系统程序
片内RAM的40H~45H是显示缓冲区。采用查表方式形成显示的段码,显示码表存于ROM中。R1存位选信号,R2存显示次数,R0存显示缓冲区地址。单片机先向P2口送位选信号;从显存中取数字,通过查表,得到显示段码,送P0口;延时,保持显示;修改R0;判断是否已显示6次,不满6次,转开始处执行,已执6次,则结束显示。
键盘处理程序
键识别作为主程序,键处理作为子程序。波形发生器开机后,首先扫描键盘,获得列扫描码和行状态码,确定键值,然后根据键值,通过散转表,转到相应的键处理程序,最后进入键处理,执行键功能。键盘的功能键可分为“0~9”数字键、“幅值”键、“频率”键、“方波”键、“正弦波”键、“三角波”键、“Enter”键。下面介绍的是对各个功能键的处理
4.3.1“幅值”键处理
进入PRO2子程序,将设置标志位区46H置为02H,表示设定参考电压;将46H单元置为#0AH,使相应的数码管显示“-”。
4.3.2“频率”键处理
进入“PRO3”子程序,将设置标志区置为01H,表示频率参数设定;42H是频率值显示缓冲区首址;向42H、43H、44H、45H单元送#0AH,使数码管显示“―――”,返回键盘主程序。
4.3.3“方波”键处理
进入“PRO4”程序,给40H单元送方波编码01H,使数码管显示“1”,返回键盘主程序。
4.3.4“正弦波”键处理
进入“PRO5”子程序,给40H单元送正弦波编码02H,使数码管显示“2”,返回键盘主程序。
4.3.5“三角波”键处理
进入“PRO6”子程序,给40H单元送三角波编码03H,使数码管显示“3”,返回键盘主程序。
4.3.6“Enter”键处理
进入“PRO6”子程序,查缓冲区,看所有参数是否已全部设置完毕,若全部设置,则按下述步骤执行:1)从42H单元中取出参考电压值,查表获得电压的数字编码,送0832(1),并作为0832(2)参考电压;2)从42H~45H单元中取频率值并进入相应的程序段,实现频率与定时初值的转换,完成TMOD的设定和初值的设定;3)开启定时中断,向R6赋样值初始编码并返回主程序。
4.3.7“0~9”键处理
进入“PRO1”子程序,查设置标志区46H的内容,有无设置,若有设置,则进入设定操作,将数字0~9送显示缓冲区。若无设置,则返回主程序。
将一个周期为T的信号分成32个点(按X轴等份),两点间的时间间隔△T由单片机的定时器产生。一个周期分成32个点,对应三种波形的32个数据存放在以FBO_TAB、XIN_TAB、JCHB_TAB为起始地址的存储器中。
总 结
课程设计是我们理论联系实际的最好的途径之一,让我们有机会把课本上学到的知识运用到实际生活中。目前单片机在工业检测领域中得到了广泛的应用,在我们平常的生活中也是随处可见,包括我们日常生活中随处可见的交通灯、闹钟等都含有单片机作为一个主要的部件,懂得并熟悉掌握单片机的运用技术是非常有用的。
由于真正意义上的程序设计还不多,因此还不是很得心应手,所以在设计中遇到一些问题和一些难点。比如:在程序设计中如何实现程序结构的最优化,以达到较高的质量。这是以后设计中要注意的问题。但也多到了很学实践知识。
参考文献
[1] 张毅坤,陈善久.单片微型计算机原理及应用:西安电子科技大学出版社。
[2] 张友德,赵志英,徐时亮.单片微机原理应用与实验:复旦大学出版社。
[3] 伟福Lab2000P系列单片机仿真实验系统说明书。
[4] 张毅刚,彭喜圆,谭晓昀.MCS-51单片机应用设计:哈尔滨工业大学出版社。
[5]康华光、华中理工大学电子学教研室《电子技术基础》高等教育出版社。
[6]张洪润、易涛编著《单片机应用技术教程 》清华大学出版社。
附录1:总电路图
附录2 主要源代码
MAIN
主程序
MOV A,#00H ;初始化主程序
MOV 40H,A ;给显示缓冲区送#00H
LOOP: CALL LED_DISPLAY
LOOP
这是定时中断服务程序,通过对40单元的内容的检测,判断调用哪个波形输出
MOV A,40H ;读波形设置标志位
这是显示程序,对显示缓冲取的数据进行扫描显示
LED_DISPLAY: PUSH R1
MOV R1,#FEH ;存位选信号
MOV R2,#06H ;存显示次数
MOV R3,#40H ;存显示缓存区首址
MOV A,@R3 ;取缓冲区显示数据
LCALL DELAY1 ;调用延时
DELAY1: PUSH R1 ;延时程序
这是对键盘的扫描程序,通过扫描获取键值,并对其进行处理
S判断有无键闭合
JZ NS ;A等于0,无键闭合,返回主程序
ACALL DELAY ;延时12ms
ACALL KS1 ;判断有无键闭合
JZ NS ;无键闭合,放回主程序
SCAN: MOV R0,#00H ;按键初始值
MOV R1,#04H ;扫描行数
MOV R2,#FEH ;送扫描值
MOV P1,A ;扫描,并设定输入模式
WTF: ACALL DELAY ;等待按键释放
CALL KEY_DEAL ;调用键功能处理
NS: RET
KS1: MOV A,#0FH ;按键闭合判断子程序
MOV P1,A ;扫描,并设定输入模式
MOVX A,P1 ;把P1口的值读回A
ANL A,#0FH ;A不为0,有键闭合
MOV R7,#40 ;延时约6ms
按键功能处理,当按数字键,检测设置标志区,看是否是要送显示缓冲去的数,不是就返回主程序
当按幅值键时,把设置标志区置为02H,表示设定参考电压,将42单元置为#0AH
当按频率键时,把设置标志区置为01H,表示频率参数设定,42H时缓冲区首址,向42H,43H,44H,45H单元
送#0AH,返回键盘主程序
当按ENTER键,检查是否已全部设置完毕,是的话1、送从45H中取参考电压,查表获得电压的数字编码
送0832(1);2、从42H~45H中取频率值并进入相应的程序段,实现频率与设定初值的转换,完成TMOD的
设定和初值设定;3、开启定时中断,向R1赋样值初始编码并返回主程序
送散转表首地址
MOV A,46H ;0~9号功能键处理
频率存储的一个循环
不等于#0AH,说明已经有数字存储,转移到下一单元
F_SEND1: INC R5
不是幅值就转移
JMP OVER ;PRO1结束返回
PRO2: MOV A,#02H ;幅值功能键处理
PRO3: MOV A,#01H ;频率功能键处理
PRO4: MOV A,#01H ;方波功能键处理
PRO5: MOV A,#02H ;正弦波功能键处理
PRO6: MOV A,#03H ;三角波功能键处理
PRO7: MOV R2,#06H ;ENTER功能键处理
P检查缓冲区看是否已全部设置
MOVX A,41H ;把幅值送给0832(1)
MOV DPTR,#V_TAB ;把幅值表的首地址送给DPTR
MOV DPTR,#0BFFFH ;把0832(1)的地址送给DPTR
MOVX A,42H ;对频率和定时器初值的转换
CJNE A,#01H,NEXT ;不是1K转移
MOV R7,#0CH ;用R7存相应频率的查表值
NEXT: CJNE A,#00H,ERROR ;所设频率超出所要求频率范围,跳到错误处理
NEXT3: CJNE A,#00H,ERROR ;所设频率超出所要求频率范围,跳到错误处理
PUSH R7 ;把R7进栈,以便中断时使用
NEXT6: MOV TMOD,#01H ;设定定时器工作在方式0
MOV DPTR,#F_TAB ;把频率表的首地址送给DPTR
MOV A,@A+DPTR ;把频率初值的低位送给TL
MOV TL0,A
MOV A,@A+DPTR ;把频率初值的高位送给TH
MOV IE,#82H ;设置中断控制
MOV R6,#00H ;给R6赋样值初值编码
SETB TR0 ;开启定时器0
TAB: JMP PRO1 ;散转表
JMP PRO2 ;转到幅值键处理程序
JMP PRO3 ;转到频率键处理程序
JMP PRO4 ;转到方波键处理程序
JMP PRO5 ;转到正弦波键处理程序
JMP PRO6 ;转到三角波键处理程序
JMP PRO7 ;转到ENTER键处理程序
ERROR: JMP PRO3 ;跳到PRO3进行清除缓冲区处理
方波函数:
把方波值表首地址送给DPTR
FB: CALL INIT_T ;调用定时器初值初始化
正弦波函数:
XINEW: MOV DPTR,#XIN_TAB ;把正弦波值表首地址送给DPTR
XW: CALL INIT_T ;调用定时器初值初始化
三角波函数:
JUCHIBO: MOV DPTR,#JCHB_TAB
给TH0,TL0送初值:
把频率表的首地址送给DPTR
MOV A,@A+DPTR ;把频率初值的低位送给TL
MOV TL0,A
MOV A,@A+DPTR ;把频率初值的高位送给TH
幅值,频率,波形表值:
8F0H,0EC78H,0F63CH,0FC18H,0FE0CH
FBO_TAB: DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
XIN_TAB: DB 98H,0BOH,0C6H,0D9H,0E9H,0F5H,0FCH,0FFH
0F5H,0E9H,0D9H,0C6H,0BOH,98H,7FH
JCHB_TAB: DB 00H,0FH,1FH,2FH,3FH,4FH,5FH,6FH
课程设计成绩评价表
| 课程名称 | 单片机原理及应用课程设计 | ||||||||
| 题目名称 | 波形发生器的设计 | ||||||||
| 学生姓名 | 学号 | 指导教师姓名 | 职称 | ||||||
| 序号 | 评价项目 | 指 标 | 满分 | 评分 | |||||
| 1 | 工作量、工作态度和出勤率 | 按期的完成了规定的任务,难易程度和工作量符合教学要求,工作努力,遵守纪律,出勤率高,工作作风严谨,善于与他人合作。 | 20 | ||||||
| 2 | 课程设计质量 | 课程设计选题合理,计算过程简练准确,分析问题思路清晰,结构严谨,文理通顺,撰写规范,图表完备正确。 | 45 | ||||||
| 3 | 创新 | 工作中有创新意识,对前人工作有一些改进或有一定应用价值。 | 5 | ||||||
| 4 | 答辩 | 能正确回答指导教师所提出的问题。 | 30 | ||||||
| 总分 | |||||||||
| 评语: | |||||||||
