方波发生器说明书.docx

上传人:b****8 文档编号:9755012 上传时间:2023-02-06 格式:DOCX 页数:26 大小:389.59KB
下载 相关 举报
方波发生器说明书.docx_第1页
第1页 / 共26页
方波发生器说明书.docx_第2页
第2页 / 共26页
方波发生器说明书.docx_第3页
第3页 / 共26页
方波发生器说明书.docx_第4页
第4页 / 共26页
方波发生器说明书.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

方波发生器说明书.docx

《方波发生器说明书.docx》由会员分享,可在线阅读,更多相关《方波发生器说明书.docx(26页珍藏版)》请在冰豆网上搜索。

方波发生器说明书.docx

方波发生器说明书

燕山大学

课程设计说明书

 

题目:

方波发生器

 

学院:

电气工程学院

年级专业:

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

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

当前位置:首页 > 外语学习 > 其它语言学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1