课程设计波形发生器_第1页
课程设计波形发生器_第2页
课程设计波形发生器_第3页
课程设计波形发生器_第4页
课程设计波形发生器_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、常州大学硬件实习报告 目 录1 波形发生器概述11.1波形发生器的背景11.2波形发生器的发展状况12 设计要求23 硬件设计33.1 设计方案33.1.1 系统总框图33.2 8255可编程通用并行接口芯片43.3 dac0832芯片63.4 adc0832芯片7 3.5 51单片机原理. 3.6 硬件原理图设计.4 软件设计84.1软件框图设计4.2 源程序代码5系统调试及分析175.1 运行结果175.2软件调试错误及处理195.3硬件接线调试196心得体会19参考文献19附录1201.波形发生器概述1.1背景波形发生器也称函数发生器,作为实验信号源,是现今各种电子电路实验设计应用中必不

2、可少的仪器设备之一。目前,市场上常见的波形发生器多为纯硬件的搭接而成,且波形种类有限,多为锯齿波,正弦波,方波,三角波等波形。在电子工程、通信工程、自动控制、遥测控制、测量仪器、仪表和计算机等技术领域,经常需要用到各种各样的信号波形发生器。随着集成电路的迅速发展,用集成电路可很方便地构成各种信号波形发生器。用集成电路实现的信号波形发生器与其它信号波形发生器相比,其波形质量、幅度和频率稳定性等性能指标,都有了很大的提高。1.2波形发生器的发展状况及应用波形发生器是能够产生大量的标准信号和用户定义信号,并保证高精度、高稳定性、可重复性和易操作性的电子仪器。函数波形发生器具有连续的相位变换、和频率稳

3、定性等优点,不仅可以模拟各种复杂信号,还可对频率、幅值、相移、波形进行动态、及时的控制,并能够与其它仪器进行通讯,组成自动测试系统,因此被广泛用于自动控制系统、震动激励、通讯和仪器仪表领域。在 70 年代前,信号发生器主要有两类:正弦波和脉冲波,而函数发生器介于两类之间,能够提供正弦波、余弦波、方波、三角波、上弦波等几种常用标准波形,产生其它波形时,需要采用较复杂的电路和机电结合的方法。这个时期的波形发生器多采用模拟电子技术,而且模拟器件构成的电路存在着尺寸大、价格贵、功耗大等缺点,并且要产生较为复杂的信号波形,则电路结构非常复杂。同时,主要表现为两个突出问题,一是通过电位器的调节来实现输出频

4、率的调节,因此很难将频率调到某一固定值;二是脉冲的占空比不可调节。在 70 年代后,微处理器的出现,可以利用处理器、a/d/和 d/a,硬件和软件使波形发生器的功能扩大,产生更加复杂的波形。这时期的波形发生器多以软件为主,实质是采用微处理器对 dac的程序控制,就可以得到各种简单的波形。 90 年代末,出现几种真正高性能、高价格的函数发生器、但是hp公司推出了型号为 hp770s的信号模拟装置系统,它由 hp8770a任意波形数字化和 hp1776a波形发生软件组成。hp8770a实际上也只能产生8 中波形,而且价格昂贵。不久以后,analogic公司推出了型号为 data-2020的多波形合

5、成器,lecroy 公司生产的型号为9100 的任意波形发生器等。 到了二十一世纪,随着集成电路技术的高速发展,出现了多种工作频率可过 ghz 的dds 芯片,同时也推动了函数波形发生器的发展,2003 年,agilent的产品 33220a能够产生 17 种波形,最高频率可达到 20m,2005 年的产品n6030a 能够产生高达 500mhz 的频率,采样的频率可达 1.25ghz。由上面的产品可以看出,函数波形发生器发展很快近几年来,国际上波形发生器技术发展主要体现在以下几个方面:(1)过去由于频率很低应用的范围比较狭小,输出波形频率的提高,使得波形发生器能应用于越来越广的领域。波形发生

6、器软件的开发正使波形数据的输入变得更加方便和容易。波形发生器通常允许用一系列的点、直线和固定的函数段把波形数据存入存储器。同时可以利用一种强有力的数学方程输入方式,复杂的波形可以由几个比较简单的公式复合成 v=f (t)形式的波形方程的数学表达式产生。从而促进了函数波形发生器向任意波形发生器的发展,各种计算机语言的飞速发展也对任意波形发生器软件技术起到了推动作用。目前可以利用可视化编程语言(如visual basic ,visual c 等等)编写任意波形发生器的软面板,这样允许从计算机显示屏上输入任意波形,来实现波形的输入。 (2)与vxi资源结合。目前,波形发生器由独立的台式仪器和适用于个

7、人计算机的插卡以及新近开发的vxi模块。由于vxi总线的逐渐成熟和对测量仪器的高要求,在很多领域需要使用vxi系统测量产生复杂的波形,vxi的系统资源提供了明显的优越性,但由于开发vxi模块的周期长,而且需要专门的vxi机箱的配套使用,使得波形发生器vxi模块仅限于航空、军事及国防等大型领域。在民用方面,vxi模块远远不如台式仪器更为方便。 (3)随着信息技术蓬勃发展,台式仪器在走了一段下坡路之后,又重新繁荣起来。不过现在新的台式仪器的形态,和几年前的己有很大的不同。这些新一代台式仪器具有多种特性,可以执行多种功能。而且外形尺寸与价格,都比过去的类似产品减少了一半。早在 1978 年,由美国

8、wavetek 公司和日本东亚电波工业公司公布了最高取样频率为 5mhz ,可以形成 256 点(存储长度)波形数据,垂直分辨率为8bit,主要用于振动、医疗、材料等领域的第一代高性能信号源,经过将近30年的发展,伴随着电子元器件、电路、及生产设备的高速化、高集成化,波形发生器的性能有了飞速的提高。变得操作越来越简单而输出波形的能力越来越强。波形操作方法的好坏,是由波形发生器控制软件质量保证的,编辑功能增加的越多,波形形成的操作性越好。2.设计要求2.1设计内容设计一个波形发生器,能产生三角波、方波、正弦波。用按键来选择波形输出(a按键输出三角波,b按键输出方波,c按键输出正弦波),调节电位器

9、能改变输出波形的频率。并用四位led显示,第1位显示目前输出什么波形,后3位显示频率值,即经a/d转换后得到的数字值。2.2设计目的1.了解波形发生器及键盘扫描的基本方法2掌握软硬件的相互配合和相互作用的关系3.硬件设计3.1设计方案3.1.1系统总体框图:8255a单片机键盘输入示波器dac0832数码管显示adc0809电位器系统框图使用51单片机来控制8255输入输出,键盘输入和七段数码管显示由8255控制,按a选择三角波代码为a,按b选择方波代码为b,按下c选择正弦波代码为c。通过软件程序来判断是哪种波形,由dac0832产生波形。通过adc0809,将模拟量转换成数字量,数字量可作为

10、软件中的参数,通过电位器调节模拟量而改变数字量从而改变波形频率。波形的频率可以通过一系列的算法计算出显示在数码管上。 3.2 8255芯片8255是intel公司生产的可编程并行i/o接口芯片,有3个8位并行i/o口。具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。 其各口功能可由软件选择,使用灵活,通用性强。8255可作为单片机与多种外设连接时的中间接口电路。 8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。同时必须具有与外设连接的接口a、b、c口。由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与c

11、pu连接部分、与外设连接部分、控制部分。 1)与cpu连接部分 根据定义,8255能并行传送8位数据,所以其数据线为8根d0d7。由于8255具有3个通道a、b、c,所以只要两根地址线就能寻址a、b、c口及控制寄存器,故地址线为两根a0a1。此外cpu要对8255进行读、写与片选操作,所以控制线为片选、复位、读、写信号。各信号的引脚编号如下: (1)数据总线db:编号为d0d7,用于8255与cpu传送8位数据。 (2)地址总线ab:编号为a0a1,用于选择a、b、c口与控制寄存器。 (3)控制总线cb:片选信号、复位信号rst、写信号、读信号。当cpu要对8255进行读、写操作时,必须先向8

12、255发片选信号选中8255芯片,然后发读信号或写信号对8255进行读或写数据的操作。 2)与外设接口部分 根据定义,8255有3个通道a、b、c与外设连接,每个通道又有8根线与外设连接,所以8255可以用24根线与外设连接,若进行开关量控制,则8255可同时控制24路开关。各通道的引脚编号如下: (1)a口:编号为pa0pa7,用于8255向外设输入输出8位并行数据。 (2)b口:编号为pb0pb7,用于8255向外设输入输出8位并行数据。 (3)c口:编号为pc0pc7,用于8255向外设输入输出8位并行数据,当8255工作于应答i/o方式时,c口用于应答信号的通信。 3)控制器 8255

13、将3个通道分为两组,即pa0pa7与pc4pc7组成a组,pb0pb7与pc0pc3组成b组。如图7.5所示,相应的控制器也分为a组控制器与b组控制器,各组控制器的作用如下: (1)a组控制器:控制a口与上c口的输入与输出。 (2)b组控制器:控制b口与下c口的输入与输出。    8255管脚特性(1)一个并行输入/输出的lsi芯片,多功能的i/o器件,可作为cpu总线与外围的接口. (2)具有24个可编程设置的i/o口,即3组8位的i/o口为pa口,pb口和pc口.它们又可分为两组12位的i/o口,a组包括a口及c口(高4位,pc4pc7),b组包括b口及c口(低4位,p

14、c0pc3).a组可设置为基本的i/o口,闪控(strobe)的i/o闪控式,双向i/o3种模式;b组只能设置为基本i/o或闪控式i/o两种模式,而这些操作模式完全由控制寄存器的控制字决定. 引脚功能reset:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有i/o口均被置成输入方式。 cs:芯片选择信号线,当这个输入引脚为低电平时,即/cs=0时,表示芯片被选中,允许8255与cpu进行通讯;/cs=1时,8255无法与cpu做数据传输. rd:读信号线,当这个输入引脚为低跳变沿时,即/rd产生一个低脉冲且/cs=0时,允许8255通过数据总线向cpu发送数

15、据或状态信息,即cpu从8255读取信息或数据。 wr:写入信号,当这个输入引脚为低跳变沿时,即/wr产生一个低脉冲且/cs=0时,允许cpu将数据或控制字写入8255。 d0d7:三态双向数据总线,8255与cpu数据传送的通道,当cpu 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。 8255具有3个相互独立的输入/输出通道端口,用+5v单电源供电,能在以下三种方式下工作。 方式0基本输入输出方式;方式1选通输入/出方式;方式2双向选通输入/输出方式; pa0pa7:端口a输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入锁存器。

16、工作于三种方式中的任何一种; pb0pb7:端口b输入输出线,一个8位的i/o锁存器, 一个8位的输入输出缓冲器。 不能工作于方式二; pc0pc7:端口c输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入缓冲器。端口c可以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与端口a和端口b配合使用,可作为控制信号输出或状态信号输入端口。'不能工作于方式一或二。 a1,a0:地址选择线,用来选择8255的pa口,pb口,pc口和控制寄存器. 当a1=0,a0=0时,pa口被选择; 当a1=0,a0=1时,pb口被选择; 当a1=1,a0=0时

17、,pc口被选择; 当a1=1.a0=1时,控制寄存器被选择.3.3 dac0832芯片d0d7:8位数据输入线,ttl电平,有效时间应大于90ns(否则锁存器的数据会出错); * ile:数据锁存允许控制信号输入线,高电平有效; * cs:片选信号输入线(选通数据锁存器),低电平有效; * wr1:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。由ile、cs、wr1的逻辑组合产生le1,当le1为高电平时,数据锁存器状态随输入数据线变换,le1的负跳变时将输入数据锁存; * xfer:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效; * wr2:dac寄存

18、器选通输入线,负脉冲(脉宽应大于500ns)有效。由wr2、xfer的逻辑组合产生le2,当le2为高电平时,dac寄存器的输出随寄存器的输入而变化,le2的负跳变时将数据锁存器的内容打入dac寄存器并开始d/a转换。 * iout1:电流输出端1,其值随dac寄存器的内容线性变化; * iout2:电流输出端2,其值与iout1值之和为一常数; * rfb:反馈信号输入线,改变rfb端外接电阻值可调整转换满量程精度; * vcc:电源输入端,vcc的范围为+5v+15v; * vref:基准电压输入线,vref的范围为-10v+10v; * agnd:模拟信号地 dgnd:数字信号地 3.4

19、 adc0809芯片adc0809是美国国家半导体公司生产的cmos工艺8通道,8位逐次逼近式a/d模数转换器。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行a/d转换。是目前国内应用最广泛的8位通用a/d芯片 1主要特性1)8路输入通道,8位a/d转换器,即分辨率为8位。 2)具有转换起停控制端。 3)转换时间为100s(时钟为640khz时),130s(时钟为500khz时) 4)单个+5v电源供电 5)模拟输入电压范围0+5v,不需零点和满刻度校准。 6)工作温度范围为-40+85摄氏度 7)低功耗,约15mw。 2内部结构adc0809

20、是cmos单片型逐次逼近式a/d转换器,内部结构如图所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型a/d转换器、逐次逼近寄存器、逻辑控制和定时电路组成。 3外部特性(引脚功能)adc0809芯片有28条引脚,采用双列直插式封装,如图所示。下面说明各引脚功能。 in0in7:8路模拟量输入端。 2-12-8:8位数字量输出端。 adda、addb、addc:3位地址输入线,用于选通8路模拟输入中的一路 ale:地址锁存允许信号,输入,高电平有效。 start: a/d转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动a/d转换)。

21、 eoc: a/d转换结束信号,输出,当a/d转换结束时,此端输出一个高电平(转换期间一直为低电平)。 oe:数据输出允许信号,输入,高电平有效。当a/d转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。 clk:时钟脉冲输入端。要求时钟频率不高于640khz。 ref(+)、ref(-):基准电压。 vcc:电源,单一+5v。 gnd:地。 adc0809的工作过程首先输入3位地址,并使ale=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。start上升沿将逐次逼近寄存器复位。下降沿启动 a/d转换,之后eoc输出信号变低,指示转换正在进行。直到a/d转

22、换完成,eoc变为高电平,指示a/d转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当oe输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。 转换数据的传送 a/d转换后得到的数据应及时传送给单片机进行处理。数据传送的关键问题是如何确认a/d转换的完成,因为只有确认完成后,才能进行传送。为此可采用下述三种方式。 (1)定时传送方式 对于一种a/d转换器来说,转换时间作为一项技术指标是已知的和固定的。例如adc0809转换时间为128s,相当于6mhz的mcs-51单片机共64个机器周期。可据此设计一个延时子程序,a/d转换启动后即调用此子程序,延迟时间一到,转换肯定已经

23、完成了,接着就可进行数据传送。 (2)查询方式 a/d转换芯片由表明转换完成的状态信号,例如adc0809的eoc端。因此可以用查询方式,测试eoc的状态,即可确认转换是否完成,并接着进行数据传送。 (3)中断方式 把表明转换完成的状态信号(eoc)作为中断请求信号,以中断方式进行数据传送。 不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行数据传送。首先送出口地址并以信号有效时,oe信号即有效,把转换数据送上数据总线,供单片机接受。3.5 51单片机原理结构引脚功能mcs-51是标准的40引脚双列直插式集成电路芯片,引脚分布请参照-单片机引脚图:    8051

24、引脚l p0.0p0.7 p0口8位双向口线(在引脚的3932号端子)。 l p1.0p1.7 p1口8位双向口线(在引脚的18号端子)。 l p2.0p2.7 p2口8位双向口线(在引脚的2128号端子)。 l p3.0p3.7 p3口8位双向口线(在引脚的1017号端子)。 这4个i/o口具有不完全相同的功能,大家可得学好了,其它书本里虽然有,但写的太深,初学者很难理解,这里都是按我自已的表达方式来写的,相信你也能够理解。 四个i/o口:p0口有三个功能1、外部扩展存储器时,当做数据总线(如图1中的d0d7为数据总线接口) 2、外部扩展存储器时,当作地址总线(如图1中的a0a7为地址总线接

25、口) 3、不扩展时,可做一般的i/o使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。 p1口只做i/o口使用:其内部有上拉电阻。 p2口有两个功能1、扩展外部存储器时,当作地址总线使用 2、做一般i/o口使用,其内部有上拉电阻; p3口有两个功能除了作为i/o使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置,具体功能请参考我们后面的引脚说明。 有内部eprom的单片机芯片(例如8751),为写入程序需提供专门的编程脉冲和编程电源,这些信号也是由信号引脚的形式提供的, 即:编程脉冲:30脚(ale/prog) 编程电压(25v):31脚(ea/vpp) 3.6 硬件原

26、理图 见附录单片机的p0口:双向三态i/o口,在外接存储器时,与地址总线的低8位及数据总线复用,能以吸收电流的方式驱动8个ttl负载.p2口:是8位准双向i/o口,在访问外部存储时,它可以作为高8位地址总线送出高8位地址.当p0口做地址总线的低8位时,需要通过一个74ls373进行锁存,再通过74ls138译码器进行译码输出来控制各个功能模块.cs8255接f228h,cs0809接f230h,cs0832接f218h.dac0832模块用来产生波形,将数字量转换成模拟量输出,连接到示波器上.di0到di7接p0口,此时p0口作为数据总线直接与di0到di7相连接.adc0809模块用于产生一

27、个数字量来作延时参数,通过调节电位器来改变参数的值就可以改变时间,8255键盘扫描显示模块,用来显示波形代码以及波形周期.pb作输入口,pc和pa作输出口,pa口地址为f228h,pb口地址为f229h,pc口地址为f22ah.pb口用来判断是否有键按下.pc口与译码器相连,译码用来作位选,pa口用来作段选.4软件设计4.1系统软件框图设计开始8255初始化no扫描第二行有键按下yes判断键值da转换输出波形 主程序框图开始dec a显示波形开启da转换a=#00ha压栈开启da转换开启ad转换查询p3.0等待转换完成a压栈使用转换的值作延时参数开启ad转换扫描键盘判断查询p3.0等待转换完成

28、a出栈扫描键盘判断y有新的波形命令a出栈其他波形no有新的波形输出命令ya等于#0其他波形noy计算显示频率inc a返回再次执行noa等于#44hy 三角波框图开始a=#255r2=#50h开启da转换显示波形代码开启ad转换a=#0h开启da转换查询p3.0等待转换完成开启ad转换使用转换量作延时参数查询p3.0等待转换完成判断键值使用转换的值作延时参数有新的波形输出命令判断键值有新的波形输出命令nodec r2nor2等于#25nor2等于0nyy计算显示频率计算显示频率方波框图注:r2是用来记数,每产生25个方波测一次频率. 开始开始显示波形代码压栈r5=0频率算法设计a=r5显示三位

29、频率值开启da转换出栈开启ad转换返回查询p3.0等待转换完成使用转换值作延时参数频率计算判断键值有新的波形输出命令y其他波形n查表操作正弦波显示计算频率注:r5用来查表.框图说明:主程序:先进行8255的初始化,然后扫描键盘第二行,判断是否有键值按下,若a按下,则输出三角波,b按下输出方波,c按下输出正弦波,在用da转换产生波形的时候也需要不断的扫描键盘判断是否有新的按键,否则按键无法跳出.频率计算:波形的周期是根据ad转换输出的数字量与波形实际周期的关系得出的,需要用肉眼观察示波器上波形的周期,不难发现波形周期与数字量成线形关系,通过一系列的算法即可得到波形大致周期,有误差.再把周期显示在

30、数码管上.三角波:波形先上升再下降,当三角波输出完一个周期时计算三角波的频率.方波:方波只有两个值,可以采用两个极端值0和ffh.每产生25个方波测量一次方波的频率.正弦波:可以利用查表来产生。查表法是事先将正弦波的数据计算出来,列表放在程序中,运行时直接调取数据。用公式y=127.5+127.5sin(360n/m)可计算出正弦波的输出值.每产生一个正弦波测量一次频率.4.2源代码c8255 equ 0f22bh ;8255命令口地址p8255a equ 0f228h ;8255 pa口地址p8255b equ 0f229h ;8255 pb口地址p8255c equ 0f22ah ;825

31、5 pc口地址keyval equ 30h ;读到的键码nums1 equ 31hnums2 equ 32hnums3 equ 33horg 0000hsjmp startorg 0080hstart:mov sp,#60h lcall dingshimov keyval,#00h ;显示初始值mov dptr,#c8255mov a,#82h ;pb口输入,pa,pc口输出movx dptr,amov dptr,#p8255cmov a,#00hmovx dptr,akb_dis:lcall rd_kb ;读键子程序lcall disp ;波形代码显示子程序lcall wave ;波形显示s

32、jmp kb_dis ;循环扫描wave:cjne r6,#7ch,zhengxianfangbo: ;方波发生器 mov r2,#50fangbodi: mov a,#0h mov dptr,#0f218h movx dptr,a setb p3.0 ;初始化 mov dptr,#0f230h movx dptr,a ;启动 a_d jnb p3.0,$ ;等待 eoc变高 jb p3.0,$ ;等待 eoc变低 mov dph,#0f2h movx a,dptr ;读 a_d 数据 mov p1,a ;数据输出 mov r1,a mov r4,a djnz r1,$ lcall rd_kb

33、 ;扫描键盘 lcall disp cjne r6,#7ch,zhengxian ;判断键值 cjne r2,#25,fangbogao lcall dispfangbo ;显示频率 fangbogao: mov dptr,#0f218h mov a,#255 movx dptr,a setb p3.0 mov dptr,#0f230h movx dptr,a ;启动 a_d jnb p3.0,$ ;等待 eoc变高 jb p3.0,$ ;等待 eoc变低 mov dph,#0f2h movx a,dptr ;读 a_d 数据 mov p1,a ;数据输出 mov r1,a mov r4,a

34、djnz r1,$ lcall rd_kb lcall disp cjne r6,#7ch,zhengxian djnz r2,fangbodi lcall dispfangbosjmp fangbozhengxian:cjne r6,#39h,sanjiao ;正弦波发生器mov r5,#00hsin:mov a,r5mov dptr,#tabmovc a,a+dptrmov dptr,#0f218hmovx dptr,a setb p3.0 ;初始化 mov dptr,#0f230h movx dptr,a ;启动 a_d jnb p3.0,$ ;等待 eoc变高 jb p3.0,$ ;等

35、待 eoc变低 mov dph,#0f2h movx a,dptr ;读 a_d 数据 mov p1,a mov r4,a mov r1,a djnz r1,$ inc r5lcall rd_kblcall dispcjne r6,#39h,sanjiaocjne r5,#128,cclcall dispzhengxiancc:cjne r5,#0,ddlcall dispzhengxiandd:sjmp sinsanjiao:cjne r6,#77h,next1 ;三角波发生器mov a,#0sjup:mov dptr,#0f218h movx dptr,a ;三角上升波形 inc a pu

36、sh acc setb p3.0 ;初始化 mov dptr,#0f230h movx dptr,a ;启动 a_d jnb p3.0,$ ;等待 eoc变高 jb p3.0,$ ;等待 eoc变低 mov dph,#0f2h movx a,dptr ;读 a_d 数据 mov p1,a ;数据输出 mov r4,a mov r1,a djnz r1,$ lcall rd_kb lcall disp pop acc cjne r6,#77h,next1 cjne a,#44h,sjuplcall dispsanjiao ;显示频率sjdo: mov dptr,#0f218h movx dptr

37、,a ;三角下降波形 dec a push acc setb p3.0 ;初始化 mov dptr,#0f230h movx dptr,a ;启动 a_d jnb p3.0,$ ;等待 eoc变高 jb p3.0,$ ;等待 eoc变低 mov dph,#0f2h movx a,dptr ;读 a_d 数据 mov p1,a ;数据输出 mov r4,a mov r1,a djnz r1,$ lcall rd_kb lcall disp pop acc cjne r6,#77h,next1 cjne a,#0h,sjdo lcall dispsanjiaosjmp sanjiaonext1:r

38、etdispzhengxian: ;频率显示模块lcall dingshipush accmov a,r4 ;频率显示算法设计mov b,#2div abmov b,#5mul abadd a,#180mov r0,amov a,baddc a,#0mov b,amov a,r0anl a,#0fhmov dptr,#ledsegmovc a,a+dptrmov nums1,amov a,r4mov b,#2div abmov b,#5mul abaddc a,#180mov r0,amov a,baddc a,#0mov b,amov a,r0swap aanl a,#0fhmov dptr

39、,#ledsegmovc a,a+dptrmov nums2,amov a,r4mov b,#2div abmov b,#5mul abaddc a,#180mov r0,amov a,baddc a,#0mov b,amov a,r0anl b,#0fhmov a,bmov dptr,#ledsegmovc a,a+dptrmov nums3,amov dptr,#p8255cmov a,#08hmovx dptr,a ;位选mov dptr,#p8255amov a,nums1movx dptr,a ;段选lcall dingshimov dptr,#p8255cmov a,#10hmov

40、x dptr,amov dptr,#p8255amov a,nums2movx dptr,alcall dingshimov dptr,#p8255cmov a,#18hmovx dptr,amov dptr,#p8255amov a,nums3movx dptr,apop accretdispsanjiao:lcall dingshipush accmov a,r4mov b,#4div abmov b,#5mul abadd a,#100mov r0,amov a,baddc a,#0mov b,amov a,r0anl a,#0fhmov dptr,#ledsegmovc a,a+dpt

41、rmov nums1,amov a,r4mov b,#4div abmov b,#5mul abaddc a,#100mov r0,amov a,baddc a,#0mov b,amov a,r0swap aanl a,#0fhmov dptr,#ledsegmovc a,a+dptrmov nums2,amov a,r4mov b,#4div abmov b,#5mul abaddc a,#100mov r0,amov a,baddc a,#0mov b,amov a,r0anl b,#0fhmov a,bmov dptr,#ledsegmovc a,a+dptrmov nums3,amov

42、 dptr,#p8255cmov a,#08hmovx dptr,amov dptr,#p8255amov a,nums1movx dptr,alcall dingshimov dptr,#p8255cmov a,#10hmovx dptr,amov dptr,#p8255amov a,nums2movx dptr,alcall dingshimov dptr,#p8255cmov a,#18hmovx dptr,amov dptr,#p8255amov a,nums3movx dptr,apop accretdispfangbo:lcall dingshipush accmov a,r4mo

43、v b,#5div abadd a,#12anl a,#0fhmov dptr,#ledsegmovc a,a+dptrmov nums1,amov a,r4mov b,#5div abadd a,#12swap aanl a,#0fhmov dptr,#ledsegmovc a,a+dptrmov nums2,amov dptr,#p8255cmov a,#08hmovx dptr,amov dptr,#p8255amov a,nums1movx dptr,alcall dingshimov dptr,#p8255cmov a,#10hmovx dptr,amov dptr,#p8255am

44、ov a,nums2movx dptr,alcall dingshipop accretdisp:mov dptr,#p8255a ;显示键值mov a,keyvalmovx dptr,aretrd_kb:mov a,#01h ;扫描第二行mov dptr,#p8255cmovx dptr,amov dptr,#p8255bmovx a,dptrcjne a,#0ffh,j_keyl0 ;判断是否有键按下,有键转j-keyl0sjmp nokeyj_keyl0:lcall dingshi ;延时消抖mov dptr,#p8255b ;读键值movx a,dptrmov r7,#08hcjne

45、a,#0ffh,keycal ;计算键值sjmp nokeykeycal:mov r0,#08hshift:rrc ajnc calcinc r7djnz r0,shiftcalc:mov dptr,#ledseg ;换算显示码mov a,r7movc a,a+dptrmov keyval,amov r6,asjmp keywaitnokey: sjmp keyexitkeywait:mov dptr,#p8255b ;等待键释放movx a,dptrcjne a,#0ffh,keywaitkeyexit:retdingshi:mov r0,#5 ;延时程序dingshi1:mov r1,#2

46、7djnz r1,$djnz r0,dingshi1retledseg:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h db 7fh,6fh,77h,7ch,39h,5eh,79h,71htab: 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,

47、 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,0e

48、3h,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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论