方波发生器说明书.docx
《方波发生器说明书.docx》由会员分享,可在线阅读,更多相关《方波发生器说明书.docx(26页珍藏版)》请在冰豆网上搜索。
方波发生器说明书
燕山大学
课程设计说明书
题目:
方波发生器
学院:
电气工程学院
年级专业:
10级检测2班
学号:
学生姓名:
指导教师:
孟宗
教师职称:
教授
燕山大学课程设计(论文)任务书
院(系):
电气工程学院基层教学单位:
仪器科学与工程系
学号
学生姓名
专业(班级)
10检测2班
设计题目
方波发生器
设
计
技
术
参
数
设计一个以单片机为核心的方波发生器,通过键盘可以改变方波的占空比和频率,并显示波形的频率。
设
计
要
求
设计键盘输入电路、波形的输出电路、显示电路(4位数码管);编制相应的程序。
工
作
量
设计的内容满足课程设计的教学目的与要求,设计题目的难度和工作量适合学生的知识和能力状况,工作量饱满。
工
作
计
划
查阅资料进行设计准备、设计硬件电路、编制程序,编制程序、验证设计、撰写任务书。
参
考
资
料
单片微型计算机接口技术及其应用张淑清国防工业出版社
单片机原理及应用技术张淑清国防工业出版社
单片机应用技术汇编
指导教师签字
基层教学单位主任签字
说明:
此表一式四份,学生、指导教师、基层教学单位、系部各一份。
目录
摘要························································2第一章设计要求及整体思路···································3
1.1设计要求·········································3
1.2设计思路·········································3
第2章相关原理介绍·········································4
2.1LED显示器及接口·································4
2.2键盘及接口······································6
2.38051定时器/计数器······························8
第3章设计说明············································10
第四章程序设计············································10
4.1程序流程········································10
4.2方波发生器汇编程序······························11
4.3结果显示········································20
第五章总结与体会··········································21
参考文献···················································22
摘要
作为微型计算机的一个重要分支,单片机自20世纪70年代问世以来在工业控制、机电一体化、家电等领域的应用越来越普遍。
社会对掌握单片机应用技术人才的需求越来越多,相应的单片机技术的开发应用也逐渐成为高等院校仪器仪表、数控、电气自动化以及机电一体化等专业学生必须掌握的技术之一。
单片机有两种基本结构形式:
一种是在通用微型计算机中广泛采用的,将程序存储器和数据存储器合用一个存储器空间的结构,称为普林斯顿结构。
另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,一般需要较大的程序存储器,目前的单片机以采用程序存储器和数据存储器截然分开的结构为多。
本课题讨论的方波发生器的核心是前应用极为广泛的51系列单片机。
本设计是一个以80C51单片机为核心的方波发生器,通过对键盘输入电路、波形的输出电路、显示电路的设计已经程序的编程,实现通过键盘改变方波占空比和频率,并显示波形频率的功能。
关键字:
单片机80C51方波发生器键盘
第一章设计要求及整体思路
1.1设计要求
根据任务书要求,设计要求如下:
(1)设计一个以单片机为核心的方波发生器。
(2)通过键盘可以改变方波的占空比和频率。
(3)使用LED显示器显示波形的频率和占空比。
(4)用汇编语言设计键盘输入、波形的输出、显示(5位数码管),编制相应的程序。
1.2设计思路
基于MCS—51单片机8051芯片所设计的可以实现键位与数字动态显示的一种频率,占空比可调方波发生器。
设四位数码管显示频率范围为1HZ-9999HZ,可在键盘上自定义50HZ,100HZ,200HZ,300HZ等频率,占空比任意取20%,40%,50%,60%,80%等值,然后在这些范围内,通过对键盘特定按键的功能设定,达到使单片机通过对响应键盘的动态扫描,输出可调对应频率和占空比方波的目的,并使用单片机伟福2000仿真实验箱LED七段数码管显示。
根据程序设计要求,数码管显示频率以及占空比改变后当前的数值,方波发生器输出以数码管显示对应频率和占空比的方波。
根据实验室伟福2000仿真实验箱条件,键盘使用的是4*6键盘,使用其中的四个按键,分别设定功能频率+,频率-,占空比+,占空比-。
实验箱有6个LED数码管,使用其中3个显示频率,2个显示占空比。
按键每按下一次,当前频率或占空比转向下一选定的频率或占空比值。
数码管显示当前所调换到的频率及占空比,并把该数值当做方波发生器的输入频率及输入占空比。
单片机控制该方波发生器以该数值作为频率和占空比显示方波,从而得到我们想要频率及占空比的方波。
最后,可采用示波器观察方波波形,也可通过连接发光二极管,观察其频闪和亮度,大致估算。
第二章相关原理介绍
2.1LED显示器及接口
一、LED显示器的结构及显示码
共阴极连接:
把七个发光二极管的阴极连在一起构成公共阴极,使用时公共阴极接地。
每个发光二极管的阳极通过电阻与输入端连接,阳极端输入高电平时,发光二极管点亮,输入低电平时则不亮。
连接方法如图1b。
共阳极接法:
把七个发光二极管的阳极连在一起构成公共阳极,使用时阳极接+5V电源,每个发光二极管的阴极通过电阻与输入端连接,阴极输入低电平时,发光二极管点亮,输入高电平则不亮。
连接方法如图1c。
a外形图b共阴极c共阳极
图1七段LED显示器结构及外形
为了显示字符,要为LED显示器提供显示段码,组成一个“8”字形字符的七段,加上一个小数点位,共八段,所以提供给LED显示器的显示段码为1个字节,对应关系如表1。
共阴极LED数码管字型码如表2。
表2共阴极LED显示器字形码
字型
共阴极字形代码
字型
共阴极字形代码
字型
共阴极字形代码
0
3FH
6
7DH
C
39H
1
06H
7
07H
d
5EH
2
5BH
8
7FH
E
79H
3
4FH
9
6FH
F
71H
4
66H
A
77H
灭
00H
5
6DH
b
7CH
2、LED显示器控制方式
1.静态显示
当显示器显示某个字符时,相应的发光二极管恒定的导通或截止。
亮度大,硬件、软件相对简单,字符不闪烁,可以用并行或串行方式。
图2并行输出的静态显示
2.动态显示
用扫描的方法一位一位轮流点亮显示器的各位,对于显示器的每一位来说,每隔一段时间点亮一次,在保证足够快的扫描速度下,利用人眼的视觉暂留效应可以看到整个动态显示,字符也不会闪烁。
分时使各数码管轮流点亮,硬件简单。
图3动态扫描式显示电路
2.2键盘及接口
一、独立式键盘
一个具有4个按键的独立式键盘,每一个按键的一端都接地,另一端接MEGA16的I/O口。
独立式键盘每一按键都需要一根I/O线,占用MEGA16的硬件资源较多。
因此独立式键盘只适合按键较少的场合。
键盘是一组按键或开关的集合,键盘接口向计算机提供被按键的代码。
特点:
使用方便、结构复杂、成本高。
图4独立式键盘接口
二、矩阵式键盘
在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
当键盘上没有键闭合时,所有的行线与列线断开,行线呈高电平。
当键盘上某一键闭合时,该键所对应的行线与列线短路。
图5矩阵式键盘接口
矩阵式键盘识别过程(以4*4键盘为例):
1.先判断有无键按下,列线输出0000,然后输入行线状态,若没有键按下,则行线状态为全1(1111);若有任一键按下,则行线状态不为全(1111)。
2.再确认哪个键被按下,列线逐行输出0(如1110),然后输入行线状态,若没有键按下,则行线状态为全1(1111);若有任一键按下,则行线状态不为全为1(如0111,说明右上角那个键被按下)。
2.38051定时器/计数器
一、基本概念
计数:
计数是指对外部事件的个数进行计量。
其实质就是对外部输入脉冲的个数进行计量。
实现计数功能的器件称为计数器。
定时:
8051单片机中的定时器和计数器是一个部件,只不过计数器记录的是外界发生的事件,而定时器则是由单片机内部提供一个非常稳定的计数源进行定时的。
这个计数源是由单片机的晶振经过12分频后获得的一个脉冲源。
所以定时器计数脉冲的时间间隔与晶振有关。
图6定时器/计数器的结构
2、工作方式控制寄存器TMOD
TMOD用于控制定时器/计数器的工作模式及工作方式,其字节地址为89H,格式如下。
其中,低4位用于决定T0的工作方式,高4位用于决定T1的工作方式。
表3TMOD格式
三、定时器/计数器的控制寄存器TCON
设定好了定时器/计数器的工作方式后,它还不能进入工作状态,必须通过设置控制寄存器TCON中的某些位来启动它工。
要使定时器/计数器停止运行,也必须通过设置TCON中的某些位来实现。
当定时器/计数器计满溢出,或有外部中断请求时,TCON能标明溢出和中断情况。
下面介绍控制寄存器TCON每位的含义:
表4TCON格式
4、确定时时/计数器初值
因为在不同工作方式下计数器位数不同,因而最大计数值也不同。
现假设最大计数值为M,那么各方式下的最大值M值如下:
方式0:
M=213=8192
方式1:
M=216=65536
方式2:
M=28=256
方式3:
定时器0分成两个8位计数器,所以两个M均为256。
因为定时器/计数器是作“加1”计数,并在计数满溢出时产生中断,因此初值可以这样计算:
X=2n-fosc/12×T
假设晶振频率为12MHZ,则最大定时时间为
方式0:
TMAX=213×1us=8.192ms
方式1:
TMAX=216×1us=65.536ms
方式2和方式3:
TMAX=28×1us=0.256ms
第3章设计说明
设计频率可调范围是50HZ,100HZ,200HZ,250HZ,300HZ,对应占空比可调范围是20%,40%,50%,60%,80%。
本设计采用的是矩阵式键盘,通过定义四个功能键,实现对占空比和频率的调整。
由于要求用5位LED显示器显示占空比和频率,为节省CPU空间,采用动态扫描方式。
在按键释放后,显示器显示对应的频率和占空比。
其中数码管从左边起,前三位显示频率,后两位显示占空比。
对应功能键:
A占空比等级+
B占空比等级-
C频率等级+
D频率等级-
对应频率显示码:
3FH,6DH,3FH;050HZ
06H,3FH,3FH;100HZ
5BH,3FH,3FH;200HZ
5BH,6DH,3FH;250HZ
66H,3FH,3FH;300HZ
对应占空比显示码:
5BH,3FH;20%
66H,3FH;40%
6DH,3FH;50%
7DH,3FH;60%
7FH,3FH;80%
第4章程序设计
4.1程序流程
初始化后单片机产生初值,将初值以动态扫描的方式显示于八段数码管,同时还对键盘进行实时扫描。
在扫描后,单片机读取键值,并将键值通过数码管模块显示出来,方波发生器输出该频率,占空比的方波。
图7程序流程图
4.2方波发生器汇编语言程序
FREQUENCYEQU30H;定义频率等级缓冲区
TH0_HIGHEQU32H;定义高电平计数缓冲区,给定时器TH0赋值
TL0_HIGHEQU33H;定义高电平计数缓冲区,给定时器TL0赋值
TH0_LOWEQU34H;定义低电平计数缓冲区,给定时器TH0赋值
TL0_LOWEQU35H;定义低电平计数缓冲区,给定时器TL0赋值
DUTYEQU31H;定义占空比等级缓冲区
FLAGEQU36H;定义高电平低电平转换标志
OFFSETEQU37H;定义用来存储偏移量
ORG0000H;定义程序的初始地址
LJMPINIT
ORG000BH
LJMPTIMER0
ORG0070H
DUTYMAP:
DB5BH,66H,6DH,7DH,7FH;数码管上显示的占空比数字20%40%50%60%80%
FRENQMAP:
;频率转换表格
DB3FH,6DH,3FH;50HZ
DB06H,3FH,3FH;100HZ
DB5BH,3FH,3FH;200HZ
DB5BH,6DH,3FH;250HZ
DB66H,3FH,3FH;300HZ
DELAY:
;延时子程序
MOVR7,#00H
DELAYLOOP:
DJNZR7,DELAYLOOP
DJNZR6,DELAYLOOP
RET
INIT:
MOVSP,#40H;更改堆栈指针,避免堆栈与工作寄存器区发生冲突
MOVTMOD,#01H;定时器0方式1
MOVTH0_HIGH,#0F0H
MOVTL0_HIGH,#070H
MOVTH0_LOW,0C2H
MOVTL0_LOW,080H
MOVTH0,#TH0_LOW;先输出低电平定时器初值
MOVTL0,#TL0_LOW
MOVFREQUENCY,#00H;频率初值为50HZ
MOVDUTY,#00H;占空比初值为20%
SETBEA;允许中断开放
SETBET0;定时器T0溢出中断允许
SETBTR0
MAIN:
CALLDISPLAYLED;显示
CALLTESTKEY;是否有键键入
JZMAIN;无键键入,继续显示
CALLGETKEY;有键键入,读入键码
CALLKEYFUNC;有键键入,调用相应的功能
CALLCHANGESTATE;根据占空比等级,频率等级的改LJMPMAIN变转变状态
OUTBITEQU08002H;位控制口
OUTSEGEQU08004H;段控制口
INEQU08001H;键盘读入口
LEDBUFEQU60H;显示缓冲区
DISPLAYLED:
;LED显示子程序
MOVR0,#LEDBUF;显示缓存区
MOVR1,#06H;共6个八段管
MOVR2,#20H;从左边开始显示
DISPIAYLOOP:
MOVDPTR,#OUTBIT;位控制口
MOVA,#00H
MOVX@DPTR,A;关所有八段管
MOVA,@R0
MOVDPTR,#OUTSEG;段控制口
MOVX@DPTR,A
MOVDPTR,#OUTBIT
MOVA,R2
MOVX@DPTR,A;显示一位八段管
MOVR6,#01H;延时1ms
CALLDELAY
MOVA,R2;显示下一位
RRA
MOVR2,A
INCR0
DJNZR1,DISPIAYLOOP
RET
TESTKEY:
;键盘是否有键按下
MOVDPTR,#OUTBIT
MOVA,#00H
MOVX@DPTR,A;输出线(列线)置为0
MOVDPTR,#IN;输入线(行线)
MOVXA,@DPTR;读入键状态
CPLA
ANLA,#0FH;高四位不用,四根行线
RET
KEYTABLE:
;键码定义
DB16H,15H,14H,0FFH
DB13H,12H,11H,10H
DB0DH,0CH,0BH,0AH;0AH定义占空比等级+,对应键盘A
DB0EH,0CH,0BH,09H;0BH定义占空比等级-,对应键盘B
DB0FH,02H,05H,08H;0CH定义频率等级+,对应键盘C
DB00H,01H,04H,07H;0DH定义频率等级-,对应键盘D
GETKEY:
;有键按下读取键值
MOVDPTR,#OUTBIT
MOVP2,DPH;定义输出线地址
MOVR0,#LOW(IN)
MOVR1,#20H;从最左边的列线开始扫描
MOVR2,#06H;共六根列线,扫描6次
KEYLOOP:
;判断行线电平
MOVA,R1
CPLA
MOVX@DPTR,A;给Y0低电平
CPLA
RRA
MOVR1,A;为扫描Y1准备
MOVXA,@R0;开始行扫
CPLA
ANLA,#0FH;判断行线电平
JNZGETKEYNUM;行线有高电平,有键按下
DJNZR2,KEYLOOP;没有,则开始扫描下一列
MOVR2,#0FFH;没有键按下,返回0FFH
SJMPEXIT
GETKEYNUM:
MOVR1,A;键值=列X4+行
MOVA,R2
DECA
RLA
RLA
MOVR2,A;R2=(R2-1)*4
MOVA,R1;R1中为读入的行值
MOVR1,#04H
GETKEYNUMLOOP:
RRCA;移位找出所在行
JCEXIT
INCR2;R2=R2+行值
DJNZR1,GETKEYNUMLOOP
EXIT:
;查表找键码
MOVA,R2
MOVDPTR,#KEYTABLE
MOVCA,@A+DPTR
MOVR2,A;取出键码保存在R2中
WAITRELEASE:
;等待按键释放
MOVDPTR,#OUTBIT
CLRA;清零
MOVX@DPTR,A
MOVR6,#06H;调用延时,延时6ms
CALLDELAY
CALLTESTKEY
JNZWAITRELEASE
MOVA,R2
RET
KEYFUNC:
MOVB,A;保存返回的键值
ANLA,#0FH;屏蔽掉高四位
CLRCY
SUBBA,#0AH;求出偏移量给A
ANLA,#03H;屏蔽掉其他键的干扰
MOVDPTR,#KEYFUNC;转移指令表的基地址送数据指针DPTR
JMP@A+DPTR;散转指令
KEYFUNC:
AJMPKey1;A键占空比调高
AJMPKey2;B键占空比调低
AJMPKey3;C键频率调高
AJMPKey4;D键频率调低
Key1:
;定义A键功能
MOVA,DUTY
XRLA,#04H;占空比等级是否到最大
JZKEY1_1
INCDUTY;占空比等级+1
JMPKeyEnd
Key1_1:
MOVDUTY,#04H;占空比等级为4,不能再提高
JMPKeyEnd
Key2:
MOVA,DUTY
XRLA,#00H;占空比等级是否到最小
JZKEY2_1
DECDUTY;占空比等级-1
JMPKeyEnd
Key2_1:
MOVDUTY,#00H
JMPKeyEnd
Key3:
MOVA,FREQUENCY
XRLA,#04H;频率等级是否到最大
JZKEY3_1
INCFREQUENCY;频率等级+1
JMPKeyEnd
KEY3_1:
MOVFREQUENCY,#04H;频率等级为4,不能再提高
JMPKeyEnd
Key4:
MOVA,FREQUENCY
XRLA,#00H;频率等级是否到最小
JZKEY4_1
DECFREQUENCY;频率等级-1
JMPKeyEnd
KEY4_1:
MOVFREQUENCY,#00H
JMPKeyEnd
KeyEnd:
RET
CHANGESTATE:
MOVA,#FREQUENCY
MOVB,03H;三个数码管显示频率
MULAB;将频率等级乘上3的偏移量
MOVDPTR,#FRENQMAP
MOVCA,@A+DPTR;查找各频率等级对应的显示码
MOVLEDBuf+4,A;显示最高位
INCDPTR
MOVCA,@A+DPTR;次一位显示码
MOVLEDBuf+3,A
MOVLEDBuf+2,#3FH;最低位均显示为0
MOVA,#DUTY;查找各占空比等级对应显示码
MOVDPTR,#DUTYMAP
MOVCA,@A+DPTR;查找最高位显示码
MOVLEDBuf+1,A;两位显示占空比
MOVLEDBuf+0,#3FH;最低为显示为0
DUTYCHANGE:
;查找对应频率值的占空比所设定时初值
CLRTR0;禁止T0计时
MOVA,#FREQUENCY
MOVB,14H
MULAB;将频率等级乘上20的偏移量
MOVOFFSET,A;将得到的频率的偏移量保存
MOVA,#DUTY
MOVB,04H