单片机及DSP课程设计报告 波形发生器

时间:2024.4.13

单片机及DSP课程设计报告

专    业:   电子信息工程             

班    级:           

姓    名:            

学    号:             

指导教师:          

时    间:20##-06-11~24

通信与电子工程学院

                                

                 波形发生器

                           

1.引言................................................................................................ 3

2.设计目的........................................................................................ 3

3.设计任务........................................................................................ 3

4. 方案论证....................................................................................... 3

5.原理框图........................................................................................ 4

6.芯片介绍.........................................................................................4

7.程序流程图.....................................................................................6

8.算法及其分析............................................................................... 6

9.仿真结果叙述.................................................................................7

10.解决问题以及心得体会 ........................................................... 8

11.参考文献...................................................................................... 9

1.引言

 随着微电子技术和超大规模集成电路技术的发展,单片微型计算机以其体积小、行价比高、功能强、可靠性高等独有的特点,在各个领域(如工业控制、家电产品、汽车电子、通信、智能仪器仪表)得到了广泛的应用。波形发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。本次课程设计使用的以AT89C51 单片机为核心以及DAC0832构成的简易波形发生器,通过编写程序来产生锯齿波,具有线路简单、结构紧凑等优点。

2.设计目的

为了进一步巩固学习的理论知识,增强对所学知识的实际应用能力和运用所学的知识解决实际问题的能力,开始为期两周的课程设计。通过设计使学生在巩固所学知识的基础之上具有初步的单片机系统设计与应用能力。能够对电子电路、电子元器件、印制电路板等方面的知识有进一步的认识,独立对其进行测试与检查。

1、熟悉8051单片机的内部结构和功能,合理使用其内部寄存器,能够完成相关软件编程设计工作。

2、通过本设计,使学生综合运用《微型计算机技术》、《C语言程序设计》以及《数字电路》、《模拟电路》等课程的内容,为以后从事电子产品设计、软件编程、系统控制等工作奠定一定的基础。

3、学会使用KEIL C和PROTEUS等软件,用C语言或汇编语言编写一个较完整的实用程序,并仿真运行,保证设计的正确性。

4、了解单片机接口应用开发的全过程:分析需求、设计原理图、选用元器件、布线、编程、调试、撰写报告等。

3.设计任务

用D/A完成锯齿波输出,用PROTEUS内带的示波器查看波形

4.方案论证

单片微型计算机简称为单片机,它是把组成微型计算机的各功能部件:中央处理器CPU、随机存取存贮器RAM、只读存贮器ROM、I/O接口电路,定时器/计数器以及串行通讯接口等部件制作在一块集成电路芯片中.构成一个完整的微型计算机。这样的集成电路称得起超大规模集成电路。因此可以说,单片微型计算机与大规模集成电路和超大规模集成电路的发展井驾齐驱。

由于在单片机中设置有只读存贮器,可用来存放控制单片机及外围设备进行工作的程序。于是从外部来看单片机成为一个独立的控制装置,可广泛用于实时控制、数据采集与处理等方而,因此单片机又称为微控制器。本设计课题采用的就是ATMEL的AT89C51。

DAC0832是一个具有两个输入数据寄存器的8位DAC。目前生产的DAC芯片分为两类,一类芯片内部设置有数据寄存器,不需要外加电路就可以直接与微型计算机接口。另一类芯片内部没有数据寄存器,输出信号随数据输入线的状态变化而变化,因此不能直接与微型计算机接口,必须通过并行接口与微型计算机接口。DAC0832是具有20条引线的双列直插式CMOS器件,它内部具有两级数据寄存器,完成8位电流D/A转换,故不需要外加电路。0832是电流输出型,示波器上显示波形,通常需要电压信号,电流信号到电压信号的转换可以由运算放大器实现。单片机向0832发送数字编码,产生不同的输出。先利用采样定理对各波形进行抽样,然后把各采样值进行编码,的到的数字量存入各个波形表,执行程序时通过查表方法依次取出,经过D/A转换后输出就可以得到波形。

5.原理框图

6.芯片介绍

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。

管脚说明:

  VCC:供电电压。

  GND:接地。

  P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

  P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

  P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

  P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

  P3口也可作为AT89C51的一些特殊功能口,如下表所示:

  口管脚 备选功能

  P3.0 RXD(串行输入口)

  P3.1 TXD(串行输出口)

  P3.2 /INT0(外部中断0)

  P3.3 /INT1(外部中断1)

  P3.4 T0(记时器0外部输入)

  P3.5 T1(记时器1外部输入)

  P3.6 /WR(外部数据存储器写选通)

  P3.7 /RD(外部数据存储器读选通)

  P3口同时为闪烁编程和编程校验接收一些控制信号。

  RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

  ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

  /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

  /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

  XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

  XTAL2:来自反向振荡器的输出。

  振荡器特性:

XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

D/A转换器DAC0832 DAC0832是采用CMOS工艺制成的单片直流输出型8位数/模转换器。

管脚说明:

DI0~DI7:数据输入线,TLL电平。

ILE:数据锁存允许控制信号输入线,高电平有效。

CS:片选信号输入线,低电平有效。

WR1:为输入寄存器的写选通信号。

XFER:数据传送控制信号输入线,低电平有效。

WR2:为DAC寄存器写选通输入线。

Iout1:电流输出线。当输入全为1时Iout1最大。

Iout2: 电流输出线。其值与Iout1之和为一常数。

Rfb:反馈信号输入线,芯片内部有反馈电阻。

Vcc:电源输入线 (+5v~+15v)

Vref:基准电压输入线 (-10v~+10v)

AGND:模拟地,摸拟信号和基准电源的参考地。

DGND:数字地,两种地线在基准电源处共地比较好。

7.程序流程图

          

  

8.算法及其分析

ORG   0000H

LJMP  START

ORG   0030H

START:  

         MOV  DPTR,#0FEFFH   ;启动D\A转换

         MOV  A,#00H       ;送初值OOH

LOOP:

        MOVX  @DPTR,A              ;

        INC  A

        LCALL  DELAY    

        CJNE  A,#0FFH,LOOP  ;判断是否为FFH.不是则继续到LOOP,否则往下执行

        SJMP  LOOP

DELAY:                   ;延时程序

MOV  R3,#11

MOV  31H,R3         

D1:NOP

   NOP

   NOP

   NOP

   NOP

   NOP

   NOP

   NOP

   DJNZ  R3,D1

   MOV  R3,31H

   RET

END

(1)程序每循环一次,A加1,因此实际上锯齿波的上升边是由小阶梯构成的,但由于阶梯很小,所以宏观上看就如图中所画的先行增长锯齿波。 

(2)可通过循环程序段的机器周期数,计算出锯齿波的周期。并可根据需要,通过延时的方法来改变波形周期。若要改变锯齿波的频率,可在AJMP MM指令前加入延迟程序即可。延时较短时可用NOP指令实现(本程序就是如此),需要延时较长时,可以使用一个延长子程序。延迟时间不同,波形周期不同,锯齿波的斜率就不同。

(3)通过A加1,可得到正向的锯齿波,反之A减1可得到负向的锯齿波。

(4)如果程序中A的变化范围是0~255,就可以得到满幅度的锯齿波。如要求得到非满幅锯齿波,可通过计算求的数字量的处置和终值,然后在程序中通过置初值和终值的方法实现。

9.仿真结果及叙述

通过keil生成的.hex文件进行电路的仿真。在第一次仿真出现了波形显示器。但是后来却怎么都仿真不出来,以为是软件出现了问题,可是在别的同学的电脑上实验了一下发现还是显示不出结果。于是重新创建工程以及电路的仿真。经过几次的实践才发现原来是在显示出结果之后我的操作不是停止仿真,而是把波形显示器关掉了,所以再次打开的时候就不会出现仿真结果。

10.解决问题以及心得体会

开始的时候由于没有经验,不知如何下手,所以就在网上搜一些相关资料来看,尽管有许多的设计方案,可是总感觉自己还是有许多的东西弄不太清楚,于是就请教同学。他常做一些设计,有一些经验。经过他的解释分析各方案之后,再重新翻看单片机课本,决定采用以书上的例题格式的基本程序算法。这样可以降低一些选仿真元件的难度,初次设计应切合自己的水平。用8031需要扩展ROM,这样还要进行存储器扩展。而且现在8031实际中已经基本上不再使用,实际用的AT89C51芯片有ROM,这样用起来比较方便。我感觉程序应该不大,片内ROM应该够用的。

我以为这些做好了,构思也有了,写程序应该是相对容易的,而且keil在以前也是有用过的。但是在Proteus仿真部分出现了问题。没有接触过这类软件,开始很多都不会,找元件都找不到,不知道名称。于是去实验室请教比较熟悉这方面的同学。在同学的帮助下,同时通过网上的相关资料的查询和学习 ,终于画出的电路图。通过keil生成的.hex文件,把程序和仿真电路联系起来,最终得出了想要的结果。

虽然这次仿真可能会存在一些小小的瑕疵,但是这是和同学讨论的最终结果。毕竟这次是我的第一个设计器件,尽管经历了不少的艰辛,但给我积累了一点设计的经验,最后也有点小小的成就感。后面的路还很长,我还得努力!

11.参考文献

[1] 童诗白,华成英.《模拟电子技术基础〔M〕》.北京:高等教育出版社,2003.345-362

[2] 潘永雄,沙河,刘向阳.《电子线路CAD实用教程〔M〕》.西安:西安电子科技大学出版社,2001.13-118.

[3] 张毅刚,彭喜源,谭晓昀,《曲春波.MCS-51单片机应用设计[M].》哈尔滨:哈尔滨工业大学出版社,1997.53-61.

[4]谢自美《电子线路设计?实验?测试》,华中科技大学出版社

[5] 余永权《单片机在控制系统中的应用》,电子工业出版社

[6] 孙玉德主编《MCS—51单片机原理及接口技术》,哈尔滨工业大学出版社

[7] 冯克编著《MCS—51单片机实用子程序及其应用实例》,黑龙江科学技术出版


第二篇:单片机波形发生器课程设计报告


第一章      概述

课程设计是为了提高学生的动手能力,实践能力,创新能力而开设的一门实践,它充分利用了学校实验室所能提供的各种仪器及器材,根据学生所掌握的知识,从实际情况出发而制定的实践项目。课程设计是一项重要的实践性教育环节,是学生在完成本专业所有课程学习后必须接受的一项结合本专业方向的、系统的、综合的工程训练。在教师指导下,运用工程的方法,通过一个较复杂课题的设计练习,可使学生通过综合的系统设计,熟悉设计过程、设计要求、完成的工作内容和具体的设计方法,掌握必须提交的各项工程文件。其基本目的是:培养理论联系实际的设计思想,训练综合运用电路设计和有关先修课程的理论,结合生产实际分析和解决工程实际问题的能力,巩固,加深和扩展有关电子类方面的知识。通过进行课程设计,提高了学生化知识为能力化能力为创新的素质,巩固了所学习的知识和技能。

本课程的主要任务是运用所学微控制器技术、微机原理等方面的知识,设计出一台以80C32MCU为核心的单片机数据采集、通讯或测控系统,完成信息的采集、处理、输出及人机接口电路等部分的软、硬件设计。

多功能波形发生器设计课题需要充分灵活运用编程语言所提供的各种指令语句,巧妙利用软硬件实现以上所要求的功能,并结合LCD显示技术制作出精美的人机界面,在程序逻辑设计上也要求正确,合理的对项目进行分解分块,合理的逻辑设计可以起到事半功倍的效果,是整个项目当中最富有创新性和挑战性的部分。

第二章 设计任务

本次课程设计要求设计一个由微控制器为核心的多功能波形发生器。具体要求如下。

    ①.该发生器能在操作人员控制下输出正弦波、方波、三角波或锯齿波波形。

    ②.这些波形的极性、周期和占空比(对矩形波而言)等可由操作人员设置和修改(信号频率可调节)。

    ③要求各种波形输入的电压峰值为5V。

④通过LCD液晶显示操作界面和运行参数,通过示波器显示、检验产生的波形。

⑤设计相应的D/A、键盘、显示接口电路,可在线键盘参数设置。

⑥系统的控制输出部分采用D/A0832模拟量输出。

第三章 总体设计方案

总体方案设计是编程工作中重要的一步。优良的总体规划可以使编程工作清晰明了,增强程序的结构合理性和可读性。根据多功能波形发生器的设计要求,该系统主要由以下相关的功能模块通过合理组合而构成一个完整的系统。

3.1 系统主体构造

该系统功能主要由80C51单片机通过相应的软件编程实现程序逻辑功能并结合相关的周围硬件电路而实现。其主要的程序流程框图如图3.1所示:

进入系统后,首先进行程序的初始化任务,将各相关的内存区清空,以消除驻留数据的影响。同时调用显示子程序,显示相应的操作菜单界面。在系统提示下,输入相应的操作键,选择需要输出的波形及相应的频率等参数,并将这些参数存入内存缓冲区,以备程序调用。同时,数码管将输入的数据即时显示出来。

随后,程序对输入的数据进行分析并选择相应的进程。首先读取决定波形输出的数据,并判断所选择的波形是否为矩形波,若是,则系统提示继续输入占空比,占空比为从1到99的十进制数,代表占空比百分数。否则直接进入下一进程。

将内存缓冲区的相关数据分析完成以后,程序将分析结果反馈到LCD液晶屏并显示,显示所选择的波形及输入的频率,以便用户确认。同时根据所选择的波形代号进行程序散转,以使程序跳到相应的波形输出子程序段继续执行,输出所需要的波形。在执行波形输出的子程序的同时,每执行一次相应的循环体,系统检测是否有键按下,如果没有相应的键按下,则继续执行循环体,如果有键按下,则分析所按下的键是否为退出键,若是,则退出系统,否则跳转到程序开始的地方往下执行。

单片机波形发生器课程设计报告                           

              图3.1 系统总体流程图

第四章 硬件设计

4.1 硬件元件概述

   本次设计所采用的硬件资源主要有:

4.1.1        8031

8031单片机采用HMOS制造工艺制造,采用40引脚的直插封装(DIP方式),其引脚图如图4.1所示。

图4.1 8031引脚图

芯片的引脚描述如下:

1、主电源引脚VCC和VSS

VCC——(40脚)接+5V电压;

VSS——(20脚)接地。

2、外接晶体引脚XTAL1和XTAL2

XTAL1(19脚)接外部晶体的一个引脚。在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。当采用外部振荡器时,对HMOS单片机,此引脚应接地;对CHMOS单片机,此引脚作为驱动端。

XTAL2(18脚)接外晶体的另一端。在单片机内部,接至上述振荡器的反相放大器的输出端。采用外部振荡器时,对HMOS单片机,该引脚接外部振荡器的信号,即把外部振荡器的信号直接接到内部时钟发生器的输入端;对XHMOS,此引脚应悬浮。

3、控制或与其它电源复用引脚RST/VPD、ALE/PROG、PSEN和EA/VPP

①RST/VPD(9脚)当振荡器运行时,在此脚上出现两个机器周期的高电平将使单片机复位。推荐在此引脚与VSS引脚之间连接一个约8.2k的下拉电阻,与VCC引脚之间连接一个约10μF的电容,以保证可靠地复位。

VCC掉电期间,此引脚可接上备用电源,以保证内部RAM的数据不丢失。当VCC主电源下掉到低于规定的电平,而VPD在其规定的电压范围(5±0.5V)内,VPD就向内部RAM提供备用电源。

②ALE/PROG(30脚):当访问外部存贮器时,ALE(允许地址锁存)的输出用于锁存地址的低位字节。即使不访问外部存储器,ALE端仍以不变的频率周期性地出现正脉冲信号,此频率为振荡器频率的1/6。因此,它可用作对外输出的时钟,或用于定时目的。然而要注意的是,每当访问外部数据存储器时,将跳过一个ALE脉冲。ALE端可以驱动(吸收或输出电流)8个LS型的TTL输入电路。

对于EPROM单片机(如8751),在EPROM编程期间,此引脚用于输入编程脉冲(PROG)。

③PSEN(29脚):此脚的输出是外部程序存储器的读选通信号。在从外部程序存储器取指令(或常数)期间,每个机器周期两次PSEN有效。但在此期间,每当访问外部数据存储器时,这两次有效的PSEN信号将不出现。PSEN同样可以驱动(吸收或输出)8个LS型的TTL输入。

④EA/VPP(引脚):当EA端保持高电平时,访问内部程序存储器,但在PC(程序计数器)值超过0FFFH(对851/8751/80C51)或1FFFH(对8052)时,将自动转向执行外部程序存储器内的程序。当EA保持低电平时,则只访问外部程序存储器,不管是否有内部程序存储器。对于常用的8031来说,无内部程序存储器,所以EA脚必须常接地,这样才能只选择外部程序存储器。

对于EPROM型的单片机(如8751),在EPROM编程期间,此引脚也用于施加21V的编程电源(VPP)。

4、输入/输出(I/O)引脚P0、P1、P2、P3(共32根)

①P0口(39脚至32脚):是双向8位三态I/O口,在外接存储器时,与地址总线的低8位及数据总线复用,能以吸收电流的方式驱动8个LS型的TTL负载。

②P1口(1脚至8脚):是准双向8位I/O口。由于这种接口输出没有高阻状态,输入也不能锁存,故不是真正的双向I/O口。P1口能驱动(吸收或输出电流)4个LS型的TTL负载。对8052、8032,P1.0引脚的第二功能为T2定时/计数器的外部输入,P1.1引脚的第二功能为T2EX捕捉、重装触发,即T2的外部控制端。对EPROM编程和程序验证时,它接收低8位地址。

③P2口(21脚至28脚):是准双向8位I/O口。在访问外部存储器时,它可以作为扩展电路高8位地址总线送出高8位地址。在对EPROM编程和程序验证期间,它接收高8位地址。P2可以驱动(吸收或输出电流)4个LS型的TTL负载。

④P3口(10脚至17脚):是准双向8位I/O口,在MCS-51中,这8个引脚还用于专门功能,是复用双功能口。P3能驱动(吸收或输出电流)4个LS型的TTL负载。

作为第一功能使用时,就作为普通I/O口用,功能和操作方法与P1口相同。

作为第二功能使用时,各引脚的定义如表所示。

值得强调的是,P3口的每一条引脚均可独立定义为第一功能的输入输出或第二功能。

第二功能描述如下:

P3.0 10 RXD(串行输入口)

P3.1 11 TXD(串行输出口)

P3.2 12 INT0(外部中断0)

P3.3 13 INT1(外部中断1)

P3.4 14 T0(定时器0外部输入)

P3.5 15 T1(定时器1外部输入)

P3.6 16 WR(外部数据存储器写脉冲)

P3.7 17 RD(外部数据存储器读脉冲)

4.1.2  8279键盘

系统利用8279键盘实现参数的输入功能,并利用附带的数码管将相应的数据显示。利用该器件可以实现对键盘/显示器的自动扫描,以减轻CPU的负担,具有显示稳定,程序简单,不会出现误动作等特点。其引脚如图4.2所示。

图4.2 8279键盘显示原理图

4.1.3  LCD液晶显示器件

LCD液晶显示可以显示汉字及各种复杂的图形。利用LCD可以获得更好的显示效果及更完美的人机交互界面。LCD原理图如图4.3所示。

 4.1.4  D/A转换0832芯片

  DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器。DAC0832输出的是电流,一般要求输出是电压,所以还必须经过一个外接的运算放大器转换成电压。其芯片引脚图如图4.4所示

图4.3 LCD液晶原理图

DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。所以这个芯片的应用很广泛,关于DAC0832的引脚功能如下:

D0~D7:数字信号输入端。

ILE:输入寄存器允许,高电平有效。

CS:片选信号,低电平有效。

WR1:写信号1,低电平有效。

XFER:传送控制信号,低电平有效。

WR2:写信号2,低电平有效。

IOUT1、IOUT2:DAC电流输出端。

RfB:是集成在片内的外接运放的反馈电阻。

VREF:基准电压(-10~10V)。

Vcc:是源电压(+5~+15V)。

AGND:模拟地 NGND:数字地,可与AGND接在一起使用。

图4.4 DAC0832引脚图

4.2 硬件连接概述

系统以8031单片机作为核心控制器件,外围主要有数模转换芯片0832、8279键盘显示器件,LCD液晶显示器件等,均为并行通信器件,使得系统线路简单可靠性高。系统结构框图4.5所示。

图4.5系统结构框图

系统采用8031单片机作为控制核心。8031单片机采用了Flash存储器结构,可以在线下载程序,易于日后的升级。它主要负责各个模块的初始化工作;设置定时器、寄存器的初值;输出待转换的二进制数据;处理按键响应;控制液晶实时显示等。

硬件电路连接图见附录2。系统采用6M晶振;P2.0,P2.1,P2.2口为单片机与液晶显示器连接的控制和通信的数据端口;C_RESET和R_RESET组成系统上电复位电路; P2.6和P2.7为单片机与时钟芯片DS1307通信的端口; P2.3为闹铃的控制端口;P1.6为单片机与温度传感器DS18B20的通信端口;P1.0,P1.1为按键模块的接口。

  

第五章 软件设计

系统的软件设计可以分为几个部分,首先是各个模块的底层驱动程序编写,而后是系统联机调试,编写上层系统程序。本系统软件程序主要包括:液晶LCD128*64显示程序模块、各波形发生控制子程序、键盘扫描及显示程序模块,内部数据制式转换模块。

5.1 键盘输入及LED显示程序段

通过8279键盘进行输入操作,其程序流程图如图5.1所示。

单片机波形发生器课程设计报告

图5.1 8279键盘输入程序流程图

开始首先进行程序初始化当有键按下时,程序判断是否和数字键值相同,如果相同,则将键码存入内存中并进行显示,如果和当前键值不相同,则继续判断是否为功能键,如果不是功能键,继续搜索所对应的数字键值。每输入一次数字键,则相应的计数值增1,当计数值到达5后,则跳出输入程序,继续向下进行。

5.2   三角波产生程序

三角波发生程序流程图如图5.2所示。

 

图5.3 三角波程序流程图

程序初始化,对0832写入控制字,并令R6=00H,随后,程序进入循环体,每执行一次循环,将R6增1并送入0832进行D/A转换输出,将R3=FFH时,再进入R6递减的循环体,直至R6=00H,系统执行一次键盘扫描,当有键按下是,退出该程序,否则,继续执行循环过程。

5.3   锯齿波发生程序

锯齿波发生程序流程图如图5.4所示。

 

图5.4 锯齿波发生程序流程图

开始首先进行程序初始化,对0832写入控制字,并令R6=00H,随后,程序进入循环体,每执行一次循环,将R6增1并送入0832进行D/A转换输出,将R3=FFH时,程序跳转到开始处,系统执行一次键盘扫描,当有键按下是,退出该程序,否则,继续执行循环过程。

5.4   正弦波发生程序

正弦波发生程序流程图如图5.5所示。

程序初始化后,令R6=00H,程序进入循环体,每执行一次循环,将R6增1,并令DPTR=TAB,将相应的TAB区数据送入0832进行D/A转换输出,将R6=FFH时,程序跳转到开始处,系统执行一次键盘扫描,当有键按下是,退出该程序,否则,继续执行循环过程。

 

图5.6 正弦波发生程序流程图

5.5   矩形波发生程序

矩形波发生程序流程图如图5.7所示

程序初始化后,令R6=00H,R5=占空比参数,A=FFH,程序进入循环体,每执行一次循环,将R6增1,将(A)数据送入0832进行D/A转换输出,之后比较R5和R6的大小,若R5>R6,则A=FFH,继续执行循环体,若R5>=R6,则令A=00H,并判断R6是否为100,若不是,继续执行循环体,若是,程序跳转到开始处,系统执行一次键盘扫描,当有键按下是,退出该程序,否则,继续执行循环过程。

 

图5.7 矩形波发生程序流程图

第六章 调试问题与解决方法,系统使用说明

6.1 频率参数紊乱及解决方法

在程序调试时,发现波形的频率不正常,而且LCD液晶屏上所显示的数字频率也是乱码。仔细检查后也没有发现问题的原因。

经过分析,认为原因应该是内存中的数据是不正确的,因为波形频率及LCD显示都是不正常的,根据LCD显示情况,三位数据中中间的数据是乱码,而其他的数据都是正常的,在程序中,存储中间数据的内存缓冲区为52H,那么52H中的数据为什么不是输入的值呢?是输入时就没有存正确还是在程序运行过程中被修改了呢?解决方案是试探法。

首先,在调用频率参数之前,强行将52H存入某一数字,这样运行发现频率是正常的,显示也正常,说明波形发生程序是没有问题的,问题能够确定就是52H中没有正确的数字。

然后,在8279键盘输入程序中,将52H存储完毕后,即转存到另一不用的68H,在频率参数调用时,调用68H,运行发现频率及显示皆正常。说明52H在程序运行过程中被篡改。

     因为52H与前后的相连接,没法改变,只能将52H单独转存到另一地点,调用时再转到52H。问题成功解决。

6.2 程序跳转出错

在运行时,发现程序在输出波形时,按键跳出后即处于“死机”状态,继续按键无任何反应,波形发生也已停止。根据以上现象进行分析,可以认为程序已经成功的从波形发生程序中跳了出来,但跳转出现了问题。

   经过排查,并没有发现为啥跳转出错而出现了以上的现象。最后,经过几番试验,终于搞清楚了这个问题的原因,在跳转后一些数据由于没有经过初始赋值的过程,继续沿用上次程序运行时的数据,导致后来运行时这些数据“溢出”而出现“死机”状态,解决方案为将原先跳转目标HA7S3改为HA7S2,问题成功解决。

6.3 正弦波在频率输入数据过大时出现差错

问题症状为当输入过大数据时,如频率为120Hz时,频率就会严重过小,在几Hz左右。这不是误差导致的问题。

     在调用延时子程序时,将频率参数强行更改为120Hz,再运行,发现波形频率是正常的,说明频率参数在程序运算中是不正确的。经过检查,发现了问题的原因是在进行频率延迟参数计算时,由于误差的存在(这种误差是允许出现的,是正常的),使得在进行减法运算时发生了溢出,即当参数减到0后,仍继续减小,就会产生了较大的数值。

解决方案为减上允许的频率上限,将上限参数定为100Hz,即可以解决问题。

6.4 系统使用操作说明

      系统启动后,首先LCD会显示提示语,提示语如下:

请选择要输出的波形:

1,三角波

2.矩形波

3.锯齿波

4.正弦波

同时LED显示屏上会显示P字母,等待用户输入。

输入格式为:首先输入选择的波形的代号,如2为矩形波,然后依次输入3位频率参数,如果参数不足两位,则补充0,如50Hz,输入为050,当输入结束后,程序自动执行输入的命令,输出波形值,通过示波器就可以检验输出的波形。 同时,LCD会显示输入的命令反馈,格式如下(以矩形波为例,频率50Hz):

您选择的波形为:

矩形波

您输入的频率为:050Hz

需要说明的是,如果选择的是矩形波,则在输入完频率值后,再继续输入两位数字的占空比,如占空比为20%,频率50Hz,则输入格式为:205020,输入完毕,自动输出对应波形。

    在波形输出过程中,可随时修改或重新输入数值。当按下键后,波形输出立即停止,重新回到输入等待状态。当按下的键为退出键时,系统退出。

第七章 总结

本次课程设计所用到的程序除LCD显示部分及8279键盘显示部分参考了其他的程序外全系独立编写,通过这一课程设计,使在课堂上所学习的单片机语言应用能力获得了大的提高,也极大的增强了编写调试程序和硬件连接的能力。

编程工作是一项繁重,系统的脑力劳动,需要编程者具有足够的耐心和毅力,耐心细致的工作态度和严谨务实的工作作风。本次所编写的多功能波形发生器的源程序总共将近一千行,系统庞大而且繁杂,在编写过程中,所遇到的问题非常多,整个编写过程就是一个不断面临问题,不断解决问题的过程,这一过程充满了挑战性,也充满了各种困难,但不断的追踪错误的来源也是很有趣味的一件事情。出现了运行错误后,就处处添加显示代码,让LCD将它的运算过程中的数据显示出来,追踪错误的源头,最终会发现在运算过程的某一步上出现了异常,然后分析问题为什么会出在这里,找到程序中隐藏的逻辑错误并修改,找到错误的所在并解决掉是非常具有吸引力的。

通过这次课程设计使对单片机语言的理解和掌握上有了很大的进步,以前所了解的单片机语言仅限于一些片面的知识,通过这次编程,将这些零零碎碎的知识汇集起来,编写出了一个完整的系统,并且对单片机语言的应用能力有了极大的提高,对于硬件接口的问题也有了深刻的了解,体会到了单片机的独具一格的思想。

当然,本次课程设计也不足不处,这一程序的不足之处在于没有实现旋纽调节控制波形频率的功能 ,如果能够将这一功能实现出来,必然会使程序更加完美。

附录1:系统源程序

       ORG 08F0H              ;?

      ORG 0000H

KON EQU 59H

FRQ EQU 64H

BAI EQU 63H

DAT1  EQU 42H            ;第一参数存放地址

DAT2  EQU 43H            ;第二参数存放地址/数据存放地址

COM   EQU 32H            ;指令代码存放地址

C_ADD EQU 8001H          ;指令通道地址(片选Y1端口地址8000H开始)

D_ADD EQU 8000H          ;数据通道地址

S_ADD_H EQU 33H          ;LCD显示指针地址高位

S_ADD_L EQU 34H          ;LCD显示指针地址低位

S_ADD_HF EQU 35H         ;LCD显示指针地址高位备份

S_ADD_LF EQU 36H         ;LCD显示指针地址低位备份

SEL_FONT EQU 37H         ;LCD字体选者,16X16则为#16H,8X16则为#8H

WORD_NUM EQU 38H         ;已经显示的字数

ATTR     EQU 39H         ;字符属性码(低四位有效)

CODED    EQU 40H         ;字符代码

CGR_NUM  EQU 41H         ;CGRAM显示程序显示的字数

MAIN:

      MOV SP,#60H

      LCALL INT_LCD      ;液晶初始化

      MOV WORD_NUM,#00H  ;实现字数清零

      LCALL CLEAR        ;清屏

HA7S:   MOV SP,#53H

       MOV DPTR,#0B001H

       MOV A,#00H

       MOVX @DPTR,A

       MOV A,#32H

       MOVX @DPTR,A

       MOV A,#0DFH

       MOVX @DPTR,A

HA7S1: MOVX A,@DPTR

       JB ACC.7,HA7S1

 GG: MOV DPTR,#0B001H

 MOV A,#80H

  MOVX @DPTR,A

 MOV DPTR,#0B000H

       MOV A,#0C8H

       MOVX @DPTR,A

       INC DPTR

       MOV A,#80H

       MOVX @DPTR,A

;----------------------------显示方式二

;在区1显示,以单个字循环方式显示“请输入波形及频率:”,16X16字体,一般用于汉字显示

      MOV S_ADD_H,#00H       ;设置第一个字的显示起始地址高位

      MOV S_ADD_L,#00H       ;低位

      MOV SEL_FONT,#16H      ;采用16X16字体

      MOV DPTR,#TAB0

      MOV R7,#08H            ;显示字的个数

ER:   LCALL SHOW_A_WORD

      DJNZ R7,ER

;--------------------------------------------------------

;在区二显示,以单个字循环方式显示“1:三角波”,16X16字体,一般用于汉字显示

      MOV S_ADD_H,#01H       ;设置第一个字的显示起始地址高位

      MOV S_ADD_L,#00H       ;低位

      MOV SEL_FONT,#16H      ;采用16X16字体

      MOV DPTR,#TAB1

      MOV R7,#04H            ;显示字的个数

ER1:   LCALL SHOW_A_WORD

      DJNZ R7,ER1

;--------------------------------------------------------

;--------------------------------------------------------

;在区二显示,以单个字循环方式显示“2:方波”,16X16字体,一般用于汉字显示

      MOV S_ADD_H,#02H       ;设置第一个字的显示起始地址高位

      MOV S_ADD_L,#00H       ;低位

      MOV SEL_FONT,#16H      ;采用16X16字体

      MOV DPTR,#TABF

      MOV R7,#03H            ;显示字的个数

ER2:   LCALL SHOW_A_WORD

      DJNZ R7,ER2

;--------------------------------------------------------

;--------------------------------------------------------

;在区二显示,以单个字循环方式显示“3:锯齿波"?16X16字体,一般用于汉字显示

      MOV S_ADD_H,#03H       ;设置第一个字的显示起始地址高位

      MOV S_ADD_L,#00H       ;低位

      MOV SEL_FONT,#16H      ;采用16X16字体

      MOV DPTR,#TABJ

      MOV R7,#04H            ;显示字的个数

ER3:   LCALL SHOW_A_WORD

      DJNZ R7,ER3

;--------------------------------------------------------

;--------------------------------------------------------

;在区二显示,以单个字循环方式显示“4:正弦波”,16X16字体,一般用于汉字显示

      MOV S_ADD_H,#03H       ;设置第一个字的显示起始地址高位

      MOV S_ADD_L,#08H       ;低位

      MOV SEL_FONT,#16H      ;采用16X16字体

      MOV DPTR,#TABZX

      MOV R7,#04H            ;显示字的个数

ER4:   LCALL SHOW_A_WORD

      DJNZ R7,ER4

;--------------------------------------------------------

HA7S2:  MOV 48H,#60H

        MOV 30H,#80H

       MOV 31H,#50H

HA7S3: MOV DPTR,#0B001H

       MOVX A,@DPTR

       ANL A,#07H

       CJNE A,#00H,HA7S4

       AJMP HA7S3

HA7S4: MOV DPTR,#0B000H

       MOVX A,@DPTR

       MOV B,A

       MOV R1,#00H

       MOV DPTR,#KEYTAB

HA7S5: MOV A,#00H

       MOVC A,@A+DPTR

       CJNE A,B,HA7S6

       AJMP HA7SA

HA7S6: INC DPTR

       INC R1

       MOV A,R1

       JB ACC.4,HA7S7

       AJMP HA7S5

HA7S7:

MOV R1,#00H

       MOV DPTR,#KEYTAB1

HA7S8: MOV A,#00H

       MOVC A,@A+DPTR

       CJNE A,B,HA7S9

       LJMP HA7SC

HA7S9: INC DPTR

       INC R1

       MOV A,R1

       JNB ACC.2,HA7S8

       AJMP HA7SD

HA7SD:       LJMP HA7S

;DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDddd数字键显示

HA7SA:

MOV A,30H

      CJNE A,#80H,YOU

 LCALL CLEARLED

YOU:    MOV A,30H

        MOV DPTR,#0B001H

       MOVX @DPTR,A

       MOV A,R1

       MOV DPTR,#CDATA

 MOV R0,31H

 MOV @R0,A

       MOVC A,@A+DPTR

       MOV DPTR,#0B000H

       MOVX @DPTR,A

        INC 31H

       INC 30H

       MOV A,30H

CJNE A,#84H,HA7SB

;MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

MOV A,50H

CJNE A,#02H,WLM

;=====================================

WLM3: MOV DPTR,#0B001H

       MOVX A,@DPTR

       ANL A,#07H

       CJNE A,#00H,WLM4

       AJMP WLM3

WLM4: MOV DPTR,#0B000H

       MOVX A,@DPTR

       MOV B,A

       MOV R1,#00H

       MOV DPTR,#KEYTAB

WLM5: MOV A,#00H

       MOVC A,@A+DPTR

       CJNE A,B,WLM6

       AJMP WLMA

WLM6: INC DPTR

       INC R1

       MOV A,R1

       ;;;;;;;;;;;;;;;;;;JB ACC.4,WLM7

       AJMP WLM5

;==========================================

WLMA:

        MOV A,30H

        MOV DPTR,#0B001H

       MOVX @DPTR,A

       MOV A,R1

       MOV DPTR,#CDATA

        MOV R0,48H

        MOV @R0,A

       MOVC A,@A+DPTR

       MOV DPTR,#0B000H

       MOVX @DPTR,A

        INC 48H

       INC 30H

       MOV A,30H

CJNE A,#86H,WLMB

;MMMMMMMMMMMMMMMMMMMMMM

   MOV 30H,#80H

   MOV 31H,#50H

   MOV 48H,#60H

   LJMP MYFUNC

WLMB: AJMP WLM3

;===========================================

WLM:

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   MOV 30H,#80H

   MOV 31H,#50H

   MOV 48H,#60H

   LJMP MYFUNC

;MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM修改的地方,建议后面子程序直接跳到HA7S

HA7SB:       AJMP HA7S3

;DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDddd数字键显示结束

HA7SC:

MOV DPTR,#KJP

       MOV A,R1

       RL A

       ADD A,R1

       JMP @A+DPTR

KJP:LJMP FUNC1

       LJMP FUNC2

       LJMP FUNC3

 FUNC1:LCALL CLEARLED

 LJMP HA7S

 FUNC2:

 FUNC3:

 MYFUNC:

LCALL CLEAR;mmmmmmmmmmmmmmmmmmmmmmMA此处修改

;-----------------------------------------------------------------------------------

;在区1显示,以单个字循环方式显示“您选择的波形为“?16X16字体,一般用于汉字显示

      MOV S_ADD_H,#00H       ;设置第一个字的显示起始地址高位

      MOV S_ADD_L,#00H       ;低位

      MOV SEL_FONT,#16H      ;采用16X16字体

      MOV DPTR,#TAB4

      MOV R7,#08H            ;显示字的个数

ERR:   LCALL SHOW_A_WORD

      DJNZ R7,ERR

;--------------------------------------------------------

;在区3显示,以单个字循环方式显示“输入频率:"16X16字体,一般用于汉字显示

      MOV S_ADD_H,#02H       ;设置第一个字的显示起始地址高位

      MOV S_ADD_L,#00H       ;低位

      MOV SEL_FONT,#16H      ;采用16X16字体

      MOV DPTR,#TAB3

      MOV R7,#05H            ;显示字的个数

ERR1:   LCALL SHOW_A_WORD

      DJNZ R7,ERR1

;--------------------------------------------------------

;----------------------------显示方式四

;在区四显示,使用内部字符

       MOV 54H,#0BH

       MOV DAT1,#59H      ;

       MOV DAT2,#10H      ;TEXT HOME ADDRESS高位

       MOV COM,#24H

       LCALL PR1

       MOV COM,#0B0H          ;设置自动写方式

       LCALL PR12

       MOV R0,#51H          ;11个字符

       MOV R2,#05H

       MOV DPTR,#DTAB      ;送字码表首地址

       CLR A

       PUSH DPH

       PUSH DPL

WRTEXT:LCALL ST3

       POP DPL

       POP DPH

MOV R1,55H

       MOV 55H,#0CH

       MOV A,@R0

       MOVC A,@A+DPTR

MOV 55H,R1

       PUSH DPH

       PUSH DPL

       LCALL PR13          ;写数据

       INC R0

       DJNZ R2,WRTEXT

       MOV COM,#0B2H          ;设置自动写方式

       LCALL PR12

;***************************************************************参数调整

 MOV 58H,#00H

        MOV A,51H

        MOV B,#100

        MUL AB

        MOV 63H,A

        MOV A,52H

        MOV B,#10

        MUL AB

        MOV R0,63H

        ADD A,R0

        MOV 63H,A

        MOV A,53H

        MOV R0,63H

        ADD A,R0

        MOV 63H,A

 ;***************************************************************参数调整结束

        MOV DPTR,#KJPADDR

        MOV R0,50H

        DEC R0

       MOV A,R0

       RL A

       ADD A,R0

       JMP @A+DPTR

KJPADDR:LJMP LOOP0

       LJMP LOOP1

       LJMP LOOP2

        LJMP LOOP3

 ;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 三角波

LOOP0:

HA6S:   MOV SP,#53H

;----------------------------------------------------------------------

;在区二显示,以单个字循环方式显示”三角波“,16X16字体,一般用于汉字显示

      MOV S_ADD_H,#01H       ;设置第一个字的显示起始地址高位

      MOV S_ADD_L,#00H       ;低位

      MOV SEL_FONT,#16H      ;采用16X16字体

      MOV DPTR,#TAB2

      MOV R7,#03H            ;显示字的个数

ERR2:   LCALL SHOW_A_WORD

      DJNZ R7,ERR2

;________________________________________________

 MOV A,#0FFH

 MOV B,63H

 DIV AB

 MOV R0,A

 MOV R1,B

 MOV A,#57

 MOV B,63H

 DIV AB

 ADD A,R0

 MOV FRQ,A

 MOV A,B

 ADD A,R1

 MOV R1,A

 CLR C

 SUBB A,63H

 JNB CY,ZS1

LJMP ZS2

 ZS1:INC FRQ

     MOV R1,A

 ZS2:MOV A,63H

 RR A

 CLR C

 SUBB A,R1

 JNB CY,ZS3

 INC FRQ

 ZS3:

 DEC FRQ

 DEC FRQ

;----------------------------------------------------------------------

HA6S1: MOV R6,#00H

        MOV DPTR,#0B001H

       MOVX A,@DPTR

       ANL A,#07H

       CJNE A,#00H,X1

       LJMP HA6S2

X1:LJMP HA7S4

 HA6S2:MOV DPTR,#8000H

       MOV A,R6

       MOVX @DPTR,A

     MOV R2,FRQ

       LCALL DE

       INC R6

       CJNE R6,#200,HA6S2

HA6S3: MOV DPTR,#8000H

       DEC R6

       MOV A,R6

       MOVX @DPTR,A

      MOV R2,FRQ

       LCALL DE

       CJNE R6,#00H,HA6S3

       SJMP HA6S1

;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&三角波结束

LOOP1:

;FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF方波

FANG:  MOV SP,#53H

;在区二显示,以单个字循环方式显示”方波"16X16字体,一般用于汉字显示

      MOV S_ADD_H,#01H       ;设置第一个字的显示起始地址高位

      MOV S_ADD_L,#00H       ;低位

      MOV SEL_FONT,#16H      ;采用16X16字体

      MOV DPTR,#TABF1

      MOV R7,#02H            ;显示字的个数

XZM:   LCALL SHOW_A_WORD

      DJNZ R7,XZM

;BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

MOV A,#0FFH

 MOV B,63H

 DIV AB

 MOV R0,A

 MOV R1,B

 MOV A,#162

 MOV B,63H

 DIV AB

 ADD A,R0

 MOV FRQ,A

  MOV A,B

 ADD A,R1;A为余数

 MOV R1,A

 CLR C

 SUBB A,63H

 JNB CY,ZSN1

LJMP ZSN2

 ZSN1:INC FRQ

     MOV R1,A

 ZSN2:MOV A,63H

 RR A

 CLR C

 SUBB A,R1

 JNB CY,ZSN3

 INC FRQ

 ZSN3:

 DEC FRQ

 DEC FRQ

;RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR

;3333333333333333333333333333333 计算占空比

MOV A,60H

MOV B,#10

MUL AB

ADD A,61H

MOV KON,A

;3333333333333333333333333333333

         MOV R0,#0FFH

FANG1:       MOV R6,#00H

        MOV DPTR,#0B001H

       MOVX A,@DPTR

       ANL A,#07H

       CJNE A,#00H,X0

FANG2:       MOV DPTR,#8000H

       MOV A,R0

       MOVX @DPTR,A

MOV R2,FRQ

       LCALL DE

 MOV R2,FRQ

       LCALL DE

 MOV R2,FRQ

       LCALL DE

        INC R6

        MOV A,R6

        CLR C

       SUBB A,KON

       JNB CY,PP

       MOV R0,#0FFH

        CJNE R6,#100,FANG2

        SJMP FANG1

     PP:

        MOV R0,#00H

        CJNE R6,#100,FANG2

       SJMP FANG1

 ;FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF方波over

 X0:LJMP HA7S4

LOOP2:

;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ锯齿波

 JVCHI:      MOV SP,#53H

 ;在区二显示,以单个字循环方式显示”锯齿波"16X16字体,一般用于汉字显示

      MOV S_ADD_H,#01H       ;设置第一个字的显示起始地址高位

      MOV S_ADD_L,#00H       ;低位

      MOV SEL_FONT,#16H      ;采用16X16字体

      MOV DPTR,#TABJ1

      MOV R7,#03H            ;显示字的个数

XZM1:   LCALL SHOW_A_WORD

      DJNZ R7,XZM1

      ;-------------------------------------------------------

;QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ

MOV A,#0FFH

 MOV B,63H

 DIV AB

 MOV R0,A

 MOV R1,B

 MOV A,#58

 MOV B,63H

 DIV AB

 ADD A,R0

 MOV FRQ,A

 MOV A,B

 ADD A,R1

 MOV R1,A

 MOV A,63H

 RR A

 CLR C

 SUBB A,R1

 JNB CY,ZSN4

 INC FRQ

 ZSN4:

 DEC FRQ

 DEC FRQ

;QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ

JVCHI1:      MOV R6,#00H

        MOV DPTR,#0B001H

       MOVX A,@DPTR

       ANL A,#07H

       CJNE A,#00H,X0

JVCHI2:      MOV DPTR,#8000H

       MOV A,R6

       MOVX @DPTR,A

     MOV R2,FRQ

       LCALL DE

       MOV R2,FRQ

       LCALL DE

       INC R6

       CJNE R6,#200,JVCHI2

       SJMP JVCHI1

;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ锯齿波over

LOOP3:

   ;*********正弦波*********************************************************

ZZXBO:

;在区二显示,以单个字循环方式显示”正弦波*"16X16字体,一般用于汉字显示

      MOV S_ADD_H,#01H       ;设置第一个字的显示起始地址高位

      MOV S_ADD_L,#00H       ;低位

      MOV SEL_FONT,#16H      ;采用16X16字体

      MOV DPTR,#TABZX1

      MOV R7,#03H            ;显示字的个数

XZM2:   LCALL SHOW_A_WORD

      DJNZ R7,XZM2

      ;-------------------------------------------------------

      ;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV

      MOV A,#0FFH

 MOV B,63H

 DIV AB

 MOV R0,A

 MOV R1,B

 MOV A,#235

 MOV B,63H

 DIV AB

 ADD A,R0

 MOV FRQ,A

 MOV A,B

 ADD A,R1;A为余数

 MOV R1,A

 CLR C

 SUBB A,63H

 JNB CY,ZSN5

LJMP ZSN7

 ZSN5:INC FRQ

     MOV R1,A

 ZSN7:MOV A,63H

 RR A

 CLR C

 SUBB A,R1

 JNB CY,ZSN6

 INC FRQ

 ZSN6:

 MOV A,FRQ

 MOV R0,#04H

 CLR C

 SUBB A,R0

 MOV FRQ,A

;KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

DA01 :  MOV DPTR,#0B001H

       MOVX A,@DPTR

       ANL A,#07H

       CJNE A,#00H,X2

         LJMP ZSN8

       X2:LJMP HA7S4

    ZSN8: MOV R7,#0FFH

         MOV DPTR ,#TABZ

DA02 :

         MOV A , #0H

         MOVC A , @A+DPTR

         MOV R0,DPL

         MOV R1,DPH

         MOV DPTR,#8000H

         MOVX @DPTR, A

         MOV R2,FRQ

        LCALL DE

         MOV  DPL,R0

         MOV  DPH,R1

                 INC   DPTR

         DJNZ  R7,DA02

         AJMP DA01

TABZ :

     DB 80H,83H,86H,89H,8DH,90H,93H,96H

     DB 99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH

     DB 0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H

     DB 0C7H,0CAH,0CCH,0CFH,0D1H, 0D4H,0D6H,0D8H

     DB 0DAH,0DDH,0DFH,0E1H,0E3H, 0E5H,0E7H,0E9H

     DB 0EAH,0ECH,0EEH,0EFH,0F1H, 0F2H,0F4H,0F5H

     DB 0F6H,0F7H,0F8H,0F9H,0FAH, 0FBH,0FCH,0FDH

     DB 0FDH,0FEH,0FFH,0FFH,0FFH, 0FFH,0FFH,0FFH

     DB 0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH,0FEH,0FDH

     DB 0FDH,0FCH,0FBH,0FAH,0F9H, 0F8H,0F7H,0F6H

     DB 0F5H,0F4H,0F2H,0F1H,0EFH, 0EEH,0ECH,0EAH

     DB 0E9H,0E7H,0E5H,0E3H,0E1H, 0DEH,0DDH,0DAH

     DB 0D8H,0D6H,0D4H,0D1H,0CFH, 0CCH,0CAH,0C7H

     DB 0C5H,0C2H,0BFH,0BCH,0BAH, 0B7H,0B4H,0B1H

     DB 0AEH,0ABH,0A8H,0A5H,0A2H, 9FH, 9CH, 99H

     DB 96H, 93H, 90H, 8DH, 89H, 86H, 83H, 80H

     DB 80H, 7CH, 79H, 78H, 72H, 6FH, 6CH, 69H

     DB 66H, 63H, 60H, 5DH, 5AH, 57H, 55H, 51H

     DB 4EH, 4CH, 48H, 45H, 43H, 40H, 3DH, 3AH

     DB 38H, 35H, 33H, 30H, 2EH, 2BH, 29H, 27H

     DB 25H, 22H, 20H, 1EH, 1CH, 1AH, 18H, 16H

     DB 15H, 13H, 11H, 10H, 0EH, 0DH, 0BH, 0AH

     DB 09H, 08H, 07H, 06H, 05H, 04H, 03H, 02H

     DB 02H, 01H, 00H, 00H, 00H, 00H, 00H, 00H

     DB 00H, 00H, 00H, 00H, 00H, 00H, 01H, 02H

     DB 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H

     DB 0AH, 0BH, 0DH, 0EH, 10H, 11H, 13H, 15H

     DB 16H, 18H, 1AH, 1CH, 1EH, 20H, 22H, 25H

     DB 27H, 29H, 2BH, 2EH, 30H, 33H, 35H, 38H

     DB 3AH, 3DH, 40H, 43H, 45H, 48H, 4CH, 4EH

     DB 51H, 55H, 57H, 5AH, 5DH, 60H, 63H, 66H

     DB 69H, 6CH, 6FH, 72H, 76H, 79H, 7CH, 80H

RET

;***********************************************************正弦波over

DE:NOP

 NOP

 DJNZ R2,DE

 RET

  ;###########################################清屏子程序

 CLEARLED:

 MOV R0,#81H

 CLEARLED1:MOV R2,#0FFH

 MOV A,R0

 MOV DPTR,#0B001H

 MOVX @DPTR,A

  MOV DPTR,#0B000H

 MOV A,R2

MOVX @DPTR,A

 INC R0

 CJNE R0,#88H,CLEARLED1

 RET

 ;###########################################清屏结束

;----------------------------延时子程序

DELAY:

      MOV R5,#00H

      MOV R6,#00H

DELAY1:NOP

      DJNZ R5,DELAY1

      DJNZ R6,DELAY1

      RET

;----------------------------清屏子程序

CLEAR:

      MOV DAT1,#00H           ;GRAPHIC HOME ADDRESS

      MOV DAT2,#00H

      MOV COM,#24H

      LCALL PR1              ;设置起始地址指针

      MOV COM,#0B0H          ;设置自动写方式

      LCALL PR12

      MOV R0,#00H            ;分四个区清屏,每个区256个字节

      MOV R1,#04H            ;有四个区

CLEARG:

      CLR A

      MOV DPTR,#8000H

      MOVX @DPTR,A

      DJNZ R0,CLEARG          ;清256个字节

      DJNZ R1,CLEARG

      MOV COM,#0B2H          ;设置自动写结束指令

      LCALL PR12

       MOV DAT1,#00H      ;TEXT HOME ADDRESS

       MOV DAT2,#10H

       MOV COM,#24H

       LCALL PR1

       MOV COM,#0B0H          ;设置自动写方式

       LCALL PR12

       MOV R0,#80H            ;16COLUMNS*8LINES=128=80H

CLEART:

      MOV A,#00H

      MOV DPTR,#8000H

      MOVX @DPTR,A

      DJNZ R0,CLEART          ;

      MOV COM,#0B2H          ;设置自动写结束指令

      LCALL PR12

      RET

;--------------------------显示一个16X16或8X16的字体子程序

;要求-调用该程序前要将被显示的字的字码表地址送DPTR,显示指针

;地址送S_ADD_H显示地址高位,S_ADD_L显示地址低位

;SEL_FONT显示字体控制,#16H为16X16,#8H为8X16

;[S_ADD_HF显示地址高位备份,S_ADD_LF显示地址低位备份]

;[WORD_NUM已经显示的字数]

SHOW_A_WORD:                ;16x16或8x16显示程序

      SETB 0D4H

      PUSH DPH              ;;开始循环的第一个字符的地址设置

      PUSH DPL

      MOV DAT1,S_ADD_L      ;重新设置显示地址指针

      MOV DAT2,S_ADD_H

      MOV COM,#24H

      LCALL PR1             ;--------------------

      POP DPL

      POP DPH               ;开始循环的第一个字符的地址设置结束

      MOV R0,#10H           ;行控制

      MOV S_ADD_HF,S_ADD_H  ;高位备份

      MOV S_ADD_LF,S_ADD_L  ;低位备份

      PUSH DPH            ;存字库指针

      PUSH DPL

      MOV COM,#0B0H         ;设置自动写方式

      LCALL PR12            ;-------------------

      POP DPL             ;取出字库指针

      POP DPH

LINE_STA:

      CLR A

      MOVC A,@A+DPTR        ;A暂存左半行字码

      INC DPTR              ;字码表指针加1,指向下一个字节

      PUSH DPH            ;保存字库指针

      PUSH DPL

      MOV DPTR,#8000H

      MOVX @DPTR,A          ;写入左半行字码

      MOV A,SEL_FONT

      CJNE A,#16H,FONT_8

      POP DPL             ;取出字库指针

      POP DPH

      CLR A

      MOVC A,@A+DPTR        ;A暂存右半行字码

      INC DPTR              ;字码表指针加1,指向下一个字节

      PUSH DPH              ;保存字码表指针

      PUSH DPL

      MOV DPTR ,#8000H

      MOVX @DPTR,A          ;写入右半行字码,写完一个字的一行(1/16)

FONT_8:

      MOV A,S_ADD_L         ;改变显示RAM低位地址到下一行

      ADD A,#10H

      MOV S_ADD_L,A

      MOV A,S_ADD_H         ;低位满FFH,则显示RAM高位地址加1

      ADDC A,#0H

      MOV S_ADD_H,A

      MOV COM,#0B2H         ;设置自动写结束指令

      LCALL PR12            ;-----------------

      MOV DAT1,S_ADD_L      ;重新设置显示地址指针

      MOV DAT2,S_ADD_H

      MOV COM,#24H

      LCALL PR1             ;--------------------

      MOV COM,#0B0H         ;设置自动写方式

      LCALL PR12            ;-------------------

      POP DPL             ;取出字库指针

      POP DPH

      DJNZ R0,LINE_STA      ;没有完成一个字(16行),则继续

      INC WORD_NUM          ;已经显示的字数加一

EE:   MOV A,S_ADD_LF        ;调整显示RAM区下一个字的起始地址

      MOV R0,SEL_FONT

      CJNE R0,#16H,DD

      ADD A,#2H             ;一个字为两个字节宽(16x16)

      SJMP ASDF

DD:   ADD A,#1H             ;一个字为一个字节宽(8x16)

ASDF: MOV S_ADD_LF,A

      MOV A,S_ADD_HF

      ADDC A,#0H

      MOV S_ADD_HF,A

N_ENTER:

      MOV S_ADD_L,S_ADD_LF

      MOV S_ADD_H,S_ADD_HF

      PUSH DPH

      PUSH DPL

      MOV COM,#0B2H         ;设置自动写结束指令

      LCALL PR12            ;-----------------

      MOV DAT1,S_ADD_L      ;重新设置显示地址指针

      MOV DAT2,S_ADD_H

      MOV COM,#24H

      LCALL PR1             ;--------------------

      POP DPL

      POP DPH

      CLR 0D4H

      RET

;--------------------------液晶模块初始化子程序

INT_LCD:

      MOV DAT1,#00H      ;设置图形显示区域首地址

      MOV DAT2,#00H      ;或为文本属性区域首地址

      MOV COM,#42H       ;[0000H]

      LCALL PR1

      MOV DAT1,#00H      ;设置文本显示区域首地址

      MOV DAT2,#10H      ;[1000H]

      MOV COM,#40H

      LCALL PR1

      MOV DAT1,#10H      ;设置图形显示区域宽度

      MOV DAT2,#00H      ;或为文本属性区域宽度

      MOV COM,#43H       ;即一行显示所占字节数

      LCALL PR1

      MOV DAT1,#10H      ;设置文本显示区域宽度

      MOV DAT2,#00H      ;即一行显示所占字节数

      MOV COM,#41H

      LCALL PR1

      MOV COM,#0A7H      ;光标形状设置

      LCALL PR12

      MOV COM,#80H       ;显示方式设置,逻辑“或”合成,使用内部字符

      LCALL PR12

      MOV COM,#9CH       ;显示开关设置,文本开,图形开,光标闪烁及显示均打开

      LCALL PR12

      RET

;------------------------读状态字子程序

R_ST: MOV DPTR,#C_ADD    ;设置指令通道地址

      MOVX A,@DPTR

      RET

;-----------------------判断STA1,STA0子程序,在指令和数据的读写之前这两个标志位必须同时为1

ST01: LCALL R_ST

      JNB ACC.0,ST01

      JNB ACC.1,ST01

      RET

;-----------------------判断STA2(数据自动读状态)子程序,在连续读过程中每读一次之前都要确认STA2=1

ST2:  LCALL R_ST

      JNB ACC.2,ST2

      RET

;-----------------------判断STA3(数据自动写状态)子程序

ST3:  LCALL R_ST

      JNB ACC.3,ST3

      RET

;-----------------------写指令和写数据子程序

PR1:  LCALL ST01        ;双字节参数指令写入入口

      MOV A,DAT1        ;取第一参数

      LCALL PR13        ;写入参数

PR11: LCALL ST01        ;1字节参数指令写入入口

      MOV A,DAT2        ;取第二参数

      LCALL PR13        ;写入参数

PR12: LCALL ST01        ;无参数指令写入入口

      MOV A,COM         ;取指令代码

      LJMP PR14         ;写入指令代码

PR13: MOV DPTR,#D_ADD   ;设置数据通道地址/数据写入入口

PR14: MOVX @DPTR,A      ;写入操作

      RET

;------------------------读数据子程序

PR2:  PUSH ACC

      PUSH DPH

      PUSH DPL

      LCALL ST01        ;判断状态位

      MOV DPTR,#D_ADD   ;设置数据通道地址

      MOVX A,@DPTR      ;读数据操作

      MOV DAT2,A        ;数据存入第二参数/数据的存放地址

      POP DPL

      POP DPH

      POP ACC

      RET

 TAB:DB  000H,000H,000H,000H,000H,000H,018H,018H,000H,000H,000H,000H,018H,018H,000H,000H;:

TAB0:

DB  000H,040H,047H,0FCH,030H,040H,023H,0F8H,000H,040H,007H,0FEH,0F0H,000H,013H,0F8H;请

DB  012H,008H,013H,0F8H,012H,008H,013H,0F8H,016H,008H,01AH,008H,012H,028H,002H,010H

DB  020H,040H,020H,040H,0FCH,0A0H,021H,018H,043H,0F6H,054H,000H,0FCH,004H,053H,0D4H;输

DB  012H,054H,01FH,0D4H,0F2H,054H,013H,0D4H,012H,054H,012H,054H,013H,044H,012H,08CH

DB  00CH,000H,006H,000H,002H,000H,001H,000H,003H,000H,002H,080H,002H,080H,004H,040H;入

DB  004H,020H,008H,020H,008H,010H,010H,008H,020H,00EH,040H,004H,080H,000H,000H,000H

DB  020H,040H,010H,040H,010H,040H,007H,0FEH,084H,044H,054H,040H,054H,040H,017H,0F8H;波

DB  025H,008H,024H,090H,0E4H,090H,024H,060H,028H,060H,028H,098H,031H,00EH,026H,004H

DB  000H,004H,07FH,086H,012H,00CH,012H,010H,012H,020H,012H,008H,0FFH,0CCH,012H,018H;形

DB  012H,020H,012H,044H,012H,086H,012H,00CH,022H,010H,022H,020H,042H,040H,080H,080H

DB  000H,000H,03FH,0E0H,004H,020H,004H,020H,004H,040H,004H,040H,004H,0F8H,00AH,050H;及

DB  00AH,010H,009H,020H,011H,020H,010H,0C0H,021H,020H,042H,018H,08CH,00EH,030H,004H

DB  008H,000H,008H,0FEH,04EH,020H,048H,040H,048H,0FCH,0FEH,084H,000H,0A4H,008H,0A4H;频

DB  04AH,0A4H,04AH,0A4H,084H,0A4H,008H,050H,010H,048H,020H,086H,0C3H,002H,000H,000H

DB  002H,000H,001H,000H,07FH,0FEH,041H,000H,022H,028H,017H,0D0H,004H,080H,011H,010H;率

DB  022H,048H,047H,0C4H,001H,020H,0FFH,0FEH,001H,000H,001H,000H,001H,000H,001H,000H

DB  000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,018H,000H,018H,000H ;:

DB  000H,000H,000H,000H,000H,000H,000H,000H,018H,000H,018H,000H,000H,000H,000H,000H

TAB1: ;1:三角波

DB  000H,000H,000H,000H,000H,000H,010H,000H,070H,000H,010H,000H,010H,018H,010H,018H ;1:

DB  010H,000H,010H,000H,010H,000H,010H,000H,010H,018H,07CH,018H,000H,000H,000H,000H

TAB2:

DB  000H,000H,000H,000H,07FH,0FCH,000H,000H,000H,000H,000H,000H,000H,000H,03FH,0F8H ;三

DB  000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,07FH,0FEH,000H,000H,000H,000H

DB  004H,000H,007H,0F8H,004H,010H,008H,020H,01FH,0FCH,030H,084H,050H,084H,01FH,0FCH ;角

DB  010H,084H,010H,084H,01FH,0FCH,010H,084H,010H,084H,020H,084H,020H,094H,040H,088H

DB  020H,040H,010H,040H,010H,040H,007H,0FEH,084H,044H,054H,040H,054H,040H,017H,0F8H;波

DB  025H,008H,024H,090H,0E4H,090H,024H,060H,028H,060H,028H,098H,031H,00EH,026H,004H

TABF:

 DB  000H,000H,000H,000H,000H,000H,03CH,000H,042H,000H,042H,000H,042H,018H,004H,018H ;2:

DB  004H,000H,008H,000H,010H,000H,020H,000H,042H,018H,07EH,018H,000H,000H,000H,000H

TABF1:

DB  002H,000H,001H,000H,000H,080H,0FFH,0FEH,002H,000H,002H,000H,003H,0F0H,002H,010H ;方

DB  004H,010H,004H,010H,008H,010H,008H,010H,010H,010H,020H,090H,0C0H,060H,000H,000H

 DB  020H,040H,010H,040H,010H,040H,007H,0FEH,084H,044H,054H,040H,054H,040H,017H,0F8H;波

DB  025H,008H,024H,090H,0E4H,090H,024H,060H,028H,060H,028H,098H,031H,00EH,026H,004H

TABJ:

DB  000H,000H,000H,000H,000H,000H,03CH,000H,042H,000H,042H,000H,004H,018H,018H,018H ;3:

DB  004H,000H,002H,000H,002H,000H,042H,000H,044H,018H,038H,018H,000H,000H,000H,000H

TABJ1:

DB  010H,000H,011H,0FEH,021H,002H,03DH,002H,041H,0FEH,07DH,010H,091H,010H,011H,0FEH ;锯

DB  0FDH,010H,011H,010H,011H,07EH,011H,042H,011H,042H,016H,042H,01AH,07EH,014H,042H

DB  001H,000H,001H,000H,011H,0F8H,011H,000H,011H,000H,0FFH,0FEH,001H,000H,021H,008H ;齿

DB  021H,008H,022H,088H,022H,048H,024H,028H,028H,028H,020H,008H,03FH,0F8H,000H,000H

DB  020H,040H,010H,040H,010H,040H,007H,0FEH,084H,044H,054H,040H,054H,040H,017H,0F8H;波

DB  025H,008H,024H,090H,0E4H,090H,024H,060H,028H,060H,028H,098H,031H,00EH,026H,004H

TABZX:

DB  000H,000H,000H,000H,000H,000H,004H,000H,00CH,000H,014H,000H,024H,018H,024H,018H ;4:

DB  044H,000H,044H,000H,07EH,000H,004H,000H,004H,018H,01EH,018H,000H,000H,000H,000H

TABZX1:

DB  000H,000H,07FH,0FEH,000H,080H,000H,080H,000H,080H,000H,080H,010H,080H,010H,0FCH ;正

DB  010H,080H,010H,080H,010H,080H,010H,080H,010H,080H,0FFH,0FEH,000H,000H,000H,000H

DB  000H,040H,0F8H,020H,00BH,0FEH,008H,000H,078H,040H,048H,048H,040H,08CH,041H,078H ;弦

DB  0FBH,0D0H,048H,020H,008H,040H,008H,088H,009H,004H,04BH,0FEH,029H,004H,010H,000H

DB  020H,040H,010H,040H,010H,040H,007H,0FEH,084H,044H,054H,040H,054H,040H,017H,0F8H;波

DB  025H,008H,024H,090H,0E4H,090H,024H,060H,028H,060H,028H,098H,031H,00EH,026H,004H

TAB3:  ;输入的频率为 :

DB  020H,040H,020H,040H,0FCH,0A0H,021H,018H,043H,0F6H,054H,000H,0FCH,004H,053H,0D4H;输

DB  012H,054H,01FH,0D4H,0F2H,054H,013H,0D4H,012H,054H,012H,054H,013H,044H,012H,08CH

DB  00CH,000H,006H,000H,002H,000H,001H,000H,003H,000H,002H,080H,002H,080H,004H,040H;入

DB  004H,020H,008H,020H,008H,010H,010H,008H,020H,00EH,040H,004H,080H,000H,000H,000H

DB  008H,000H,008H,0FEH,04EH,020H,048H,040H,048H,0FCH,0FEH,084H,000H,0A4H,008H,0A4H;频

DB  04AH,0A4H,04AH,0A4H,084H,0A4H,008H,050H,010H,048H,020H,086H,0C3H,002H,000H,000H

DB  002H,000H,001H,000H,07FH,0FEH,041H,000H,022H,028H,017H,0D0H,004H,080H,011H,010H;率

DB  022H,048H,047H,0C4H,001H,020H,0FFH,0FEH,001H,000H,001H,000H,001H,000H,001H,000H

DB  000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,018H,000H,018H,000H ;:

DB  000H,000H,000H,000H,000H,000H,000H,000H,018H,000H,018H,000H,000H,000H,000H,000H

TAB4:

DB  008H,000H,009H,000H,011H,0FEH,012H,004H,034H,040H,032H,050H,052H,048H,094H,044H ;--  您

DB  011H,044H,010H,080H,000H,000H,029H,004H,028H,092H,068H,012H,007H,0F0H,000H,000H

DB  000H,040H,022H,040H,012H,040H,013H,0F8H,004H,040H,000H,040H,0F7H,0FCH,011H,020H ;选

DB  011H,020H,012H,024H,012H,024H,014H,01CH,010H,000H,028H,000H,047H,0FEH,000H,000H

DB  020H,000H,023H,0F8H,021H,010H,0FCH,0A0H,020H,040H,020H,0A0H,02BH,058H,030H,046H ;择

DB  063H,0F8H,0A0H,040H,020H,040H,027H,0FEH,020H,040H,020H,040H,0A0H,040H,040H,040H

DB  010H,080H,010H,080H,020H,080H,07CH,0FCH,045H,004H,045H,004H,046H,004H,07CH,084H ;的

DB  044H,044H,044H,064H,044H,024H,044H,004H,07CH,004H,044H,028H,040H,010H,000H,000H

 DB  020H,040H,010H,040H,010H,040H,007H,0FEH,084H,044H,054H,040H,054H,040H,017H,0F8H;波

DB  025H,008H,024H,090H,0E4H,090H,024H,060H,028H,060H,028H,098H,031H,00EH,026H,004H

DB  000H,004H,07FH,086H,012H,00CH,012H,010H,012H,020H,012H,008H,0FFH,0CCH,012H,018H;形

DB  012H,020H,012H,044H,012H,086H,012H,00CH,022H,010H,022H,020H,042H,040H,080H,080H

DB  000H,080H,010H,080H,00CH,080H,004H,084H,07FH,0FEH,001H,004H,001H,004H,001H,084H ;为

DB  001H,044H,002H,024H,002H,024H,004H,004H,008H,044H,010H,028H,020H,010H,000H,000H

DB  000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,018H,000H,018H,000H ;:

DB  000H,000H,000H,000H,000H,000H,000H,000H,018H,000H,018H,000H,000H,000H,000H,000H

DTAB:

DB 10H,11H,12H,13H,14H,15H,16H,17H,18H,19H,1AH,28H,5AH;WELCOME YOU

KEYTAB: DB 0C1H,0C8H,0C9H,0D0H,0D8H,0E0H,0C2H,0CAH,0D1H,0D9H

       DB 0DAH,0C3H,0CBH,0D2H,0D3H,0DBH

KEYTAB1:DB 0E3H,0E2H,0E1H

CDATA:       DB 0CH,9FH,4AH,0BH,99H,29H,28H,8FH,08H,09H,88H,38H

       DB 6CH,1AH,68H,0E8H

       END

参考文献

[1]  凌玉华.单片机原理及应用系统设计.长沙:中南大学出版社,2006

[2]  吴同茂.微型控制器技术实验及课程设计指导书. 长沙:中南大学出版社,2007.3

更多相关推荐:
简易波形发生器课程设计报告

课程设计报告设计题目简易波形发生器学院理学院专业班级08电子信息科学与技术1班学号20xx31120xx220xx31120xx220xx31120xx1姓名陈建泽纪婧如蔡国英电子邮件811781675qqco...

单片机课程设计报告书波形发生器

目录1课程设计目的12课程设计题目和实现目标13设计方案14Proteus仿真原理图15程序流程图16程序代码17调试总结18设计心得体会19参考文献11课程设计目的单片机原理及应用课程设计是与单片机原理及应用...

电子课程设计-多种波形发生器报告

课题名称多种波形发生器课题代码院系专业电气工程及其自动化班级学生时间指导教师签名教研室主任系主任签名一设计目的1了解并掌握电子电路的一般设计方法具备初步的独立设计能力2通过查阅手册和文献资料进一步熟悉常用电子器...

波形发生器课程设计报告

单片机及DSP课程设计报告专业电子信息工程班级信息101姓名史延凯学号指导教师何香铃时间20xx061728通信与电子工程学院1目录一设计目的及意义311设计目的312设计意义3二方案论证321设计要求错误未定...

波形发生器课设报告

西北工业大学课程设计报告题学专班日目波形发生器院自动化学院业自动化级09031201期20xx年1月15日摘要21题目本次实验主要是以FPGA作为基础制作一个简易波形发生器不仅可以显示学号同时可以通过按键输入产...

模电课程设计报告(波形发生器)

课程设计课程名称模拟电子技术基础课程设计题目名称波形发生电路学生学院物理与光电工程学院专业班级电子科学与技术5班学号学生姓名指导教师20xx12171摘要和关键词摘要用RC桥式正弦波振荡电路产生正弦波正弦波频率...

波形发生器设计报告2

电子技术课程设计报告课题名称学院专业班级姓名学号时间波形发生器昆明学院自机学院机械设计制造及自动化3班李飞飞王祥武20xx1401011120xx0410012620xx年7月10日摘要本文主要介绍能产生正弦波...

模电设计报告_波形发生器

模拟电子技术课程设计了可看看扬州大学能源与动力工程学院本科生课程设计题目函数发生器的设计课程模拟电子技术基础专业班级学号姓名指导教师纪晓华蒋步军完成日期20xx年11月模拟电子技术课程设计第一部分任务及指导书含...

函数信号发生器课程设计报告

漳州师范学院模拟电子技术课程设计函数信号发生器姓名学号系别专业年级指导教师20xx年4月3日1函数信号发生器摘要利用集成电路LM324设计并实现所需技术参数的各种波形发生电路根据电压比较器可以产生方波方波再继续...

DAC0832波形发生器课程设计实验报告1

微机原理与接口技术课程设计报告书题目DAC0832波形发生器学院名称湖南科技大学潇湘学院班级电子信息工程001班指导老师欧青立陈君宋芳学号0954030110姓名赵翔潇湘学院电子信息001班学号09540301...

波形发生器课程设计任务书

20xx20xx学年第2学期模拟电子技术基础课程设计报告题目波形发生器电路设计专业通信工程班级09通信二班姓名江飞指导教师吴慧电气工程系20xx年5月26日摘要本次课程设计的目的是利用已学的模电知识制作一种函数...

简易波形发生器设计报告

电子信息工程学院硬件课程设计实验室课程设计报告题目波形发生器设计年级专业学号学生姓名指导教师13级电子信息工程学院20xx21111126覃凤素罗伟华20xx年11月1日课程设计报告书波形发生器设计波形发生器亦...

波形发生器课程设计报告(19篇)