毕业设计(论文)基于单片机的函数信号发生器的设计.doc

上传人:laozhun 文档编号:3980411 上传时间:2023-03-30 格式:DOC 页数:28 大小:572KB
返回 下载 相关 举报
毕业设计(论文)基于单片机的函数信号发生器的设计.doc_第1页
第1页 / 共28页
毕业设计(论文)基于单片机的函数信号发生器的设计.doc_第2页
第2页 / 共28页
毕业设计(论文)基于单片机的函数信号发生器的设计.doc_第3页
第3页 / 共28页
毕业设计(论文)基于单片机的函数信号发生器的设计.doc_第4页
第4页 / 共28页
毕业设计(论文)基于单片机的函数信号发生器的设计.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《毕业设计(论文)基于单片机的函数信号发生器的设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于单片机的函数信号发生器的设计.doc(28页珍藏版)》请在三一办公上搜索。

1、 毕业论文题 目:基于单片机的函数信号 发生器设计系 别:电气工程系专 业:应用电子技术班 级:学生姓名:指导教师:完成日期摘 要本课题是采用低成本的 MCS-51 系列单片机构成具有高可靠性的函数信号发生器设计。系统利用 AT89S52 作为主控芯片设计的一个函数信号发生器,详细说明了其实现过程。本系统使用C语言编写,用 AT89S52 单片机来实现各模块功能,使用 PROTEUS 进行仿真。本文描述使用C语言和 PROTEUS 仿真实现函数信号发生器的基本功能,本设计通过MAX038在硬件电路上实现了方波、三角波、正弦波、锯齿波的产生,通过单片机控制输出的波形,并通过液晶屏1602 显示其

2、各自的类型以及数值。关键词: MAX038,函数信号发生器,AT89S52,液晶1602 目 录1.引言41.1 单片机概述41.2 信号发生器的分类41.3 研究内容52. 方案的设计与选择62.1系统设计62.2方案的比较62.3方案选择73MAX038芯片介绍73.1MAX038简介73.2芯片引脚排布及功能93.3MAX038内部工作原理104系统设计概述124.1 系统原理框图124.2 频段调节控制144.3频率、幅值、占空比控制164.4 输出信号的放大处理185系统硬件的设计195.1 系统总体的设计195.2电源电路设计205.3 AT89S52单片机及外围电路介绍215.3

3、.1 AT89S52单片机介绍215.3.2 按键接口电路245.3.3 时钟电路245.3.4 1602液晶显示电路255.3.5按键复位电路265.4频率占空比调节265.5 输出信号的放大处理296系统软件设计30结束语31附件1:电路原理图33附件2:部分源程序代码341.引言1.1 单片机概述现代科技随着大规模集成电路技术的发展,中央处理器(CPU)、随机存取存储器 (RAM)、只读存储器(ROM)、(I/O)接口、定时器/计数器和串行通信接口,以及其他一些计算机外围电路等均可集成在一块芯片上构成单片微型计算机,简称为单片机。单片机具有体积小、成本低,性能稳定、使用寿命长等特点。其最

4、明显的优势就是可以嵌入到各种仪器、设备中,这是其他计算机无法做到的。1.2 信号发生器的分类信号发生器应用广泛,种类繁多,性能各异,分类也不尽一致。按照频率范围分类可以分为:超低频信号发生器、低频信号发生器、视频信号发生器、高频波形发生器、甚高频波形发生器和超高频信号发生器。按照输出波形分类可以分为:正弦信号发生器和非正弦信号发生器,非正弦信号发生器又包括:脉冲信号发生器、函数信号发生器、扫频信号发生器、数字序列波形发生器、图形信号发生器、噪声信号发生器等。按照信号发生器性能指标可以分为一般信号发生器和标准信号发生器。前者指对输出信号的频率、幅度的准确度和稳定度以及波形失真等要求不高的一类信号

5、发生器;后者是指其输出信号的频率、幅度、调制系数等在一定范围内连续可调,并且读数准确、稳定、屏蔽良好的中、高档信号发生器。1.3 研究内容本文是做基于单片机的信号发生器的设计,将采用编程的方法来控制硬件电路来实现三角 波、锯齿波、矩形波、正弦波的发生。根据设计的要求,对各种波形的频率进行控制,并将所写程序装入单片机的程序存储器中。在程序运行中,当接收到来自键盘的命令,需要输出某种波形时再调用相应的中断服务子程序控制硬件电路改变输出波形。2. 方案的设计与选择2.1系统设计本设计通过程序在单片机里的运行来控制信号产生电路,不断的控制输出的波形,产生三角波、正弦波和方波等信号波形,波形输出可以通过

6、键盘进行选择,波形的频率可以通过电位器进行调节,同时在 LCD上显示出来,设计的信号发生器结构简单易操作,可方便大众的使用。频率可从几个赫兹到几十兆赫,除了供通信,仪表和自动控制系统测试用外,设计的电路还可广泛用于其他非电测量领域。2.2方案的比较方案一:采用单片机函数发生器(如 8038),8038可同时产生正弦波、方波等,而且方法简单易行,用D/A转换器的输出来改变调制电压,也可以实现数控调整频率,但产生信号的频率稳定度不高。 方案二:采用锁相式频率合成器,利用锁相环,将压控振荡器(VCO)的输出频率锁定在所需频率上,该方案性能良好,但难以达到输出频率范围的要求,且电路复杂。 方案三:利用

7、AT89S52单片机的智能控制功能,实现对信号产生芯片MAX038 器件的控制,产生不同频率的三角波、正弦波和方波等信号波形,波形输出可以通过键盘输入进行选择,波形的频率可以通过电位器进行调节,同时在 1602上显示出来。2.3方案选择鉴于方案一的信号频率不够稳定和方案二的电路复杂,频率覆盖系数难以 达标等缺点,所以决定采用方案三的设计方法。它不仅采用软硬件结合,软件控制硬件的方法来实现,使得信号频率的稳定性和精度的准确性得以保证,而且它使用的几种元器件都是常用的元器件,容易得到,且价格便宜,使得硬件的开销达到最省。主要是该方案基本满足了设计的要求。3MAX038芯片介绍3.1MAX038简介

8、MAX038是MAXIM公司生产的一种具有高频、高精度、地输出电阻而且驱动能力很强的函数信号发生器。内部主要由振荡器、震荡频率控制器、2.5V基准电源、正弦波发生器、比较器、多路模拟开关、相位比较器组成。MAXA038主要性能特点:1、能精密的产生正弦波、方波、矩形波、三角波;2、频率范围:0.1Hz20MHz,最高可达40M,各种波形的输出幅度为2V;3、占空比调节范围宽,占空比和频率均可单独调节,二者互不影响,占空比最大调节范围:10%90%;4、波形失真率小,正弦波失真率小于0.75%,占空比调节的非线性度低于2%;5、内设2.5V电压基准,可利用该电压设置FADJ,DADJ的电压值,从

9、而实现频率微调和占空比调节;6、采用5V双电源供电,允许5%的变化范围,电源电流为80mA,功耗小;3.2芯片引脚排布及功能图3.1 MAX038引脚排布序号名称功能1REF2.50 V带隙电压参考输出2、6、9、11、18GND地3A0选择输入波形;TTL / CMOS兼容4A1选择输入波形;TTL / CMOS兼容5COSC外部电容器连接7DADJ工作液循环调整输入8FADJ频率调整输入10IIN当前的输入频率控制12PDO相位检测器的输出13PDI相位探测器基准时钟输入14SYNCTTL / CMOS-compatible输出,引用DGND和DV +。 允许内部振荡器在外部信号同步。如果

10、不用打开15DGND数字地,使SYNC无效16DV+数字+ 5 V电源输入17V+ 5 V电源输入19OUT正弦、方波、锯齿波或三角形输出20V-5 V电源输入表3.1 MAX038引脚及功能3.3MAX038内部工作原理MAX038内部电路框图如图3.2所示,芯片采用5V供电方式供电,功耗在400mA。内部提供2.5V电压基准,通过外接电阻R3,R1向震荡电流发生器的IIN和FADJ端提供频率粗调电流和频率细调电压,通过R2向DADJ端提供脉冲占空比调节电压。这三种参数经振荡电流发生器处理后,向振荡器提供充电电流,该电流对外接电容CF充电,形成震荡,产生三角波信号A、B、C。信号A送向正弦波

11、产生电路,产生正弦波。将信号B、C送向比较器1产生方波。此两路信号波形连同A路输出的三角波同时送入混合器,由A0、A1控制端选择其中的一种波形进行控制,其逻辑关系如表3.2所示。另外信号A送入比较器2,产生同步信号SYNC,供外围电路使用;信号B、C送入相位检波器,产生PD0信号和PD1信号,供锁相环电路使用。图3.2 MAX038内部电路MAX038内部还有正弦整形电路、比较器、复用器以及鉴相器电路,他们共同实现了正弦比、三角波、锯齿波、矩形波和脉冲波的产生。A0A1输出波形X1正弦波00方波,脉冲波10三角波,锯齿波表3.2 A0、A1与输出波形关系逻辑表鉴相器作为锁相环的备用单元,为异或

12、门电路结构,输入信号一路来自内部差动矩形波OSCA和OSCB,另外一路来自外部引脚的PD1。鉴相器的输出信号为电流,有PD0引脚输出平均值变化范围为:0550uA。当两路输入信号的相位差为900时,输出电流的占空比为50%,平均值为250uA。如果构成锁相环电路,则PD0和FADJ相连,并且对地连接一个电阻RPD,同时并联一个电容CPD。RPD决定鉴相器的灵敏度,CPD用于滤除电流中的高频成分。4系统设计概述4.1 系统原理框图如图4.1所示,采用AT89S52单片机对主信号进行智能化控制,对MAX038产生的波形信号进行频率的高低、占空比的大小、幅度范围的控制,以及产生波形的控制。图4.1系

13、统原理框图MAX038的输出频率主要受振荡电容CF,IIN端电流和FADJ端电压的控制,其中前二者与输出频率的关系如图4.2所示。选择一个CF值,对应IIN端电流的变化,将产生一定范围的输出频率。另外,改变FADJ端的电压,可以在IIN端的控制基础上,对输出频率可以进行微调控制。为实现输出频率的数控调整,在IIN端和FADJ端分别连接连接一个电压输出端的DAC。首先,通过DACB产生0V到2.5V的输出电压,经电压/电流转换网络,产生0uA到748uA的电流,叠加上网络本身产生的2uA电流,最终对IIN端形成2uA到750uA的工作电流,使之产生相应的输出频率范围。DACB将此工作电流范围分为

14、256级步进间隔,输出频率范围也被分为256级步进间隔。所以,IIN端的电流对输出频率实现粗调。第二步,通过DACA在FADJ端产生一个从-2.3V到+2.3V的电压范围,该范围同样包含256级步进间隔,IIN端的步进间隔再次细分为256级步进间隔,从而在粗调的基础上实现细调。4.2 频段调节控制MAX038的输出频率和CF电容与IIN端的电流间的关系如图4.2所示。固定一个CF值,当IIN端的电流从2uA到750uA的变化时,对应产生一个频段的频率范围。经试验调整,我们选择了一系列的CF如表4.1所示,并确定了各CF所对应的频段和频率范围f1f2.由于系统通过DAC控制IIN端电流和FADJ

15、端电压,将各频段的频率范围划分为65536级间隔,因此各频段的输出误差为:f=(f1-f2)/65536图4.2 输出频率与IIN电流及震振荡电容CF的此外,由于相邻频段之间存在着频率重叠现象,并且考虑到各个频段对应的误差大小有所差异,因此设定各频段的实际起止频段范围:f3f4,以便获得最小的误差。频段号CFF2(2uA)f2(750uA)ff3f4110pF200kHz65MHz1kHz600kHz10MHz21nF2kHz650kHz10Hz6kHz600kHz3100nF20Hz6.5kHz0.1Hz60Hz6kHz410uF0.2Hz65Hz0.001Hz0.2Hz60Hz表4.1 输

16、出波形频率范围与CF的关系表在5脚COCS和6脚GND接上电容CF以后以后,10脚IIN是频率控制的电流输入端,利用恒定电流IIN向电容CF充电和放电,便可形成振荡。IIN是受8脚FADJ和7脚DADJ端电压的控制,振荡频率由下式确定。F0=IIN/CF=VREF/RINCF=2.5/RINCF (4.1) 因为我要制作的要求频率范围是在0.2Hz10MHz,分四个频段来满足要求,在每个频段上连续可调,由芯片内部参数可知道,当IIN =2uA750uA时,那么CF的容量范围可以在10pF10uF时,芯片有较好的性能。因此,由(4.1)式可知 RIN=VREF/IIN (4.2)当IIN=2uA

17、时,RIN=2.50V/2uA=1.25MR当IIN=750uA时,RIN=2.50V/750Ua=3.33KR为了使数字控制能够使IIN=2uA750uA实现,我们在D/A转换模块上使用了图所示的电阻连接方法。当数字量为00H时,VOUTb输出0V。MAX038的10脚IIN端有2uA的电流输入。当数字量为FFH时,VOUTb输出为基准电压2.50V。MAX038的10脚IIN端有750uA的电流输入。用公式(4.1)(4.2)可以检验。4.3频率、幅值、占空比控制MAX038核心部分是一个电流控制的振荡器,通过恒定电流对外部电容CF充电和放电,获得三角波、方波和正弦波信号输出。充放电电流由

18、流进MAX038的IIN引脚的电流控制,由加在引脚DADJ、FADJ上的电压调整。电路的振荡频率为:f=f0(1-0.2915VFADJ)=IIN(1-0.2915VFADJ)/CF波形的占空比为:T=0.5-0.174VFADJ。当IIN可设为VFADJ=0V时,IIN可设为2750uA,对应中心频率为350:1的变化;当VFADJ=2.4V时,波形的占空比为70%.VDADJ控制外部电容CF充、放电电流的比值,当VDADJ=0V时,波形的占空比为50%;当VDADJ=2.3V,占空比为10%90%。在FADJ和DADJ端口的内部,设置了250uA的下拉电源流,可简化外部电路设计,仅用电阻R

19、F(连接引脚FADJ和2.5V基准电压的可变电阻)和(连接引脚DADJ和2.5V基准电压的可变电阻)就可以对频偏和占空比进行调整。IIN引脚由内部的运放强制为虚地,故仅用电阻RIN就能调整输入电流IIN,实现中心频率的调节。2.5V的基准电压源主要用于提供IIN电流和VFADJ、VDADJ电压,其温度系数典型值为20ppm/0C,负载电流小于4mA。通过控制8选一模拟开关CD4051来选择CF的电容量,从而确定频率范围。本系统共有8个频段供切换,输出频率范围与CF的对应表如下4.3所示:波段CF电容值频率范围120pF2MHz20MHz2100 pF200KHz2MHz31000 pF20KH

20、z200KHz40.01 uF2KHz20KHz50.1 uF200Hz2KHz61 uF20Hz200Hz710 uF2Hz20Hz8100 uF0.1Hz2Hz表4.2 输出频率范围与CF的对应关系MAX038内部有一个2.5V的基准电压源,有REF引脚输出。基准电压源由两个LF353及电阻电容组成,分别组成放大倍数为+1和-1的缓冲器,因而得到2.5V的基准电源。这个电压源对整机的性能很重要,因为各控制电路均需要该参考输入。在应用中,NAX038通常可以单独承担函数信号输出功能,通过外部的电阻和电容的调节,完成特定频率和幅值的信号输出。4.4 输出信号的放大处理由于MAX038的输出信号

21、为恒定的2V,且输出电流不高,所以必须在输出级至少有一级放大电路来提供足够的输出电压和电流,以满足一般使用的需要要求。有以下几点放大电路设计的几点考虑:首先,放大电路要求具有很高的频宽,因为输出信号最大基频为20MHz,其三角波和矩形波的高次谐波成分很高,只有高宽频才能得到不失真的输出波形。其次,高频大信号放大要求放大电路有足够的输出电压转换速率。另外,要带动低阻负载,放大电路的电流输出能力也是个重要参数。要在1KR负载上输出5V信号,则放大器至少要由的连续输出能力。5系统硬件的设计依据MAX038输出频率的数控调节原理,配合单片机控制,我们可以实现数控的函数信号发生器。5.1 系统总体的设计

22、整机由图5.1所示的七大模块组成,分别是电源产生电路,频段选择电路,按键控制电路,单片机外围控制电路(包括信号的占空比、频率、幅度控制电路)。图5.1 总体设计原理图基于MAX038的单片机多波信号产生器主要由单片机AT89S52、MAX038构成,如图5.1所示。由AT89S52的P2.0和P2.1控制选定波形,AT89S52通过产生控制电压并以近似线性的规律来控制频率和占空比。5.2电源电路设计根据整机要求,电源电路应为信号产生电路提供5V电压,其中5V电压需要稳压输出,为此选用了7805,7905两种三端继承稳压器,这种三端固定电压输出式继承稳压器,使用简单、价格较低、且内部具有过压和过

23、流保护,使整机的电源电路稳定,性能可靠。外接电源流入整流滤波之后经7812和7912(为波形放大驱动电路使用)之后接7805和7905产生5V直流电压。如图5.2所示图5.2系统电源电路5.3 AT89S52单片机及外围电路介绍5.3.1 AT89S52单片机介绍AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多

24、嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。主要性能: 与MCS-51单片机产品兼容 8K字节在系统可编程Flash存储器 1000次擦

25、写周期 全静态操作:0Hz33Hz 三级加密程序存储器 32个可编程I/O口线 三个16位定时器/计数器 八个中断源 全双工UART串行通道 低功耗空闲和掉电模式 掉电后中断可唤醒 看门狗定时器 双数据指针 掉电标识符图5.3 AT89S52引脚排布5.3.2 按键接口电路 图 5.4 按键接口电路图 5.3为键盘接口电路的原理图,图中键盘和 单片机P0口相连,AT89S52的P1口和MAX038的波形选择电路相连,AT89S52不断的扫描键盘,看是否有键按下,如有,则根据相应按键作出反应。5.3.3 时钟电路AT89S52单片机有两个引脚(XTAL1,XTAL2)用于外接石英晶体和微调电容,

26、从而构成时钟电路,其电路图如图 5.4所示。 图 5.5 时钟电路如图 3.5 所示电容 C1、 对振荡频率有稳定作用, C2 其容量的选择为 30pf, 振荡器选择频率为 12MHz 的石英晶体。5.3.4 1602液晶显示电路如图 5.5所示显示电路是用来显示波形信号的频率,使得整个系统更加合理,从经济的角度出发,所以显示器件采用 液晶1602显示。而且液晶1602电路接法采用并行数据通信。图5.6 1602液晶显示电路5.3.5按键复位电路如图5.7按键复位输入。电路才有上电复位方式,晶振工作时,RST脚持续2 个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96 个晶振

27、周期的高电平。特殊寄存器AUXR(地址8EH)上。图5.7 按键复位电路5.4频率占空比调节MAX038的占空比调节有两种方式,一种是利用内部基准电压源调整,另一种是利用外加电源调整,为使电路简单,我采用第二种调整方式。在MAX038的DADJ端应用一个-2.3V+2.3V的电压控制信号,MAX038的DADJ引脚上的电压可控波形的占空比DC(定义输出波形为正时所占时间的百分数),并且能够改善正弦波的波形,可进行脉冲宽度调制和产生锯齿波。当VDADJ接地(既VDADJ=0)时,其占空比为50%,占空比的调整可采用MAC038的一片DAC,输出2.3V范围内的电压,占空比可在10%90%范围内改

28、变,约每伏改变15%,当电压超过2.3V将使频率偏移或引起不稳定。为产生一定占空比而加在DADJ上的电压为:VDADJ=(50%-DC)*0.0575 (5.1)对双极性输出的D/A转换器,基准电源为2.3V时,MAX038接受数据与占空比的关系式为:D=128(1+VDADJ/2.3)=192.6+3.2DC (5.2)其中:VDADJ为DADJ引脚上的电压,DC占空比。这样可完成激励信号的占空比设置。调整CF的充放电时间,在10%90%的范围内调整振荡器输出的三角波,最终产生失真的正弦波,锯齿波和脉冲波。这三种波形同时送入混合器,有A0,A1选择输出。所以为简单起见,关于占空比调节和频率调

29、整,可采用外部电位器调整控制。调节频率调整电路的电位器,改变MAX038输端IIN的电流大小,从而改变频率值;调节展开那个比调节电路中的电位器,改变MAX038输入端DADJ的电压大小,从而改变占空比。图5.8中的芯片为MAXIN公司的信号发生芯片MAX038,其波形选择引脚A0和A1与单片机的P2.0和P2.1引脚相连,在单片机的控制下输出正弦波、矩形波、和三角波3种不同的波形,波形的频率和幅值可以通过外部的可变电阻进行调节。OUT为MAX038的信号波形输出,送至放大电路。MAX038在正弦波输出时,输出的信号频率为:FO=(2*2.5)/(RIN*CF) (5.3)图5.8 MAX038

30、的外围硬件电路5.5 输出信号的放大处理MAX038输出波形的幅值为2V,最大输出电流为20mA,输出阻抗的典型值为0.1R。可直接驱动100R的负载。为了得到更大的输出幅度和驱动能力,就需要对波形信号作进一步,图5.9给出了一个波形输出与驱动电路。波形信号从MAX038的OUT端输出后,可使其通过一个AD811进行电压放大。AD811为电流反馈型宽带运放,其带宽增益面积为140MHz,15V供电,增益为+10的情况下,-3dB带宽达100MHz非常适合本系统的放大要求,有12V的输出摆幅,且输出电流最大可达100mA,完全可以满足峰值要求。后接BUF634P起缓冲器的作用图5.9 输出信号放

31、大驱动电路 6系统软件设计在图6.1中,按键为11对应的是第一列第一行的按键;键码21对应的是第一行第二列的按键;键码31对应的是第一列第三行的按键。图6.1 程序流程图结束语当拿到毕业设计的题目时,我想选一个在硬件电路上比较有挑战性的题目。所以我选择了函数信号发生器,虽然函数信号完全可以通过单片机和ADC0832加上运放完全可以搞定,但是那样硬件电路不是很复杂,加上软件控制不是那么的直观,经过几天的思考、设计和网络资料,我选择了此设计方案。重新拿起书本资料来设计自己的毕业题目,发现自己大学里还真的学了不少的知识,不过,还要再接再厉,相信仅凭现在的知识是很难在社会上立足的。最后谢谢我的专业老师

32、们,为我们付出的心血,老师你们辛苦了。参考文献1 程全.基于 AT89S52 实现的多种波形发生器的设计J.周口师范学院学报,2005.22(5)2 周明德.微型计算机系统原理及应用M.北京:清华大学出版社,2002.3 刘乐善.微型计算机接口技术及应用M.北京:北京航空航天大学出版社,2001.258264.4 童诗白.模拟电路技术基础M.北京:高等教育出版社,20005 杜华.任意波形发生器及应用J.国外电子测量技术,2005.1 6 张友德.单片微型机原理、应用与实践M.上海:复旦大学出版社,20047 程朗.基于 8051 单片机的双通道波形发生器的设计与实现J.计算机工程与应用,20

33、04.88 张永瑞.电子测量技术基础M.西安:西安电子科技大学出版社,20069 李叶紫. MCS-51 单片机应用教程M.北京:清华大学出版社,2004附件1:电路原理图附件2:部分源程序代码#include / 引用标准库的头文件#ifndef _SIGNALGEN_H / 防止SignalGen.h被重复引用 #define _SIGNALGEN_H #define uchar unsigned char uchar key; / 按键值 sbit A0 = P20; / MAX038的波形选择位A0 sbit A1 = P21; / MAX038的波形选择位A1 void delay(

34、); uchar keyscan(); /* 用于键消抖的延时函数 */ void delay() uchar i; for (i=400;i0;i-); /* 键扫描函数 */ uchar keyscan(void) uchar scancode,tmpcode; P1 = 0xf0; / 发全0行扫描码 if (P1&0xf0)!=0xf0) / 若有键按下 delay(); / 延时去抖动 if (P1&0xf0)!=0xf0) / 延时后再判断一次去除抖动影响 scancode = 0xfe; while(scancode&0x10)!=0) / 逐行扫描 P1 = scancode;

35、 / 输出行扫描码 if (P1&0xf0)!=0xf0) / 本行有键按下 tmpcode = (P1&0xf0)|0x0f; /* 返回特征字节码为1的位即对应于行和列 */ return(scancode)+(tmpcode); else scancode = (scancode1)|0x01; / 行扫描码左移一位 return(0); / 无键按下返回值为0 /* 主程序 */ void main() uchar key; while(1) key = keyscan(); / 调用键盘扫描函数 delay(); switch(key) case 0x11: / 第1行第1列选择正弦波输出 A0 = 0; A1 = 1; break; case 0x21: / 第1行第2列选择矩形波输出 A0 = 0; A1 = 0; break; case 0x41: / 第1行第3列选择三角波输出 A0 = 1; A1 = 0; break; default:break;

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号