




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、信号发生器系统设计摘要本系统是基于AT89S52 单片机的数字式低频信号发生器。采用AT89S52 单片机作为控制核心,外围采用数字/ 模拟转换电路(DAC0832)、稳压电路(MC1403)、运放电路(UA741)、按键和液晶显示屏模块等。通过按键控制可产生方波、锯齿波、三角波、正弦波等,并能通过键盘的输入快速改变波的形状和频率,达到人机交互的目的,同时用液晶显示屏显示对应波形的名称和频率。其设计简单、性能优良,可用于多种需要低频信号源的场所,具有一定的实用性。 关键词: 单片机;信号发生器;D/A 转换 一、信号发生器现状 信号发生器又称函数发生器,指用于产生被测电路所需特定参数的电测试信
2、号的仪器。作为当前科研、教学、制造业中一种最常见的通用仪器,市场上常见的信号发生器波形种类有限,输出波形一般固定为正弦波、三角波、锯齿波和方波,不能实现有时在实验或工程应用中需要的特殊信号,给用户使用带来不便。 传统的信号发生器作为一种实验用信号源设备,可以不采用单片机芯片,而完全利用 555 振荡电路由硬件搭接而成,但该结构产生的正弦波信号、矩形波信号和三角波信号却存在波形失真、操控难、频率范围小、结构复杂和体积大等缺陷。在生产实践和科技研究过程中,如工业、农业、通信、生物医学等领域常常要用到低频信号发生器。而由硬件电路构成的低频信号源因其所需的电阻和电容制作上较难,所以参数的精度难以保证;
3、更因其存在体积大、损耗显著、漏电等弱点,在实际应用过程中,电路复杂程度会大大增加,性能往往难以令人满意。 二、单片机在低频信号发生器中的应用单片机是将中央处理器、存储器、定时器/计数器、输入输出接口等主要计算机件集成在一块芯片上,它是在大规模集成电路技术的基础上发展起来的。因其独特的结构形式,单片机承担了许多大中型计算机无法完成的工作,被广泛的应用于工农业生产、科研、国防及日常生活的各个领域。单片机的制造商主要有荷兰的 Philip 公司、日本的 NEC 公司以及美国的 Intel、Motorola 公司等。和通用微型机相比,单片机主要有以下几个方面的优势: (1)使用方便、可靠性高 (2)体
4、积小、低功耗 (3)功能强大、扩展性强 (4)性价比较高、易于产品化采用单片机和 DAC0832 数模转换器生成波形,由于是软件滤波,所以可以有效的滤除高次谐波分量,生成的波形不失真。DAC0832 主要由 8 位 D/A 转换器、8 位DAC 寄存器、8 位输入寄存器以及输入控制电路四部分组成。它的特点是在低频范围内稳定性好、性能高,操作灵活、体积小、价格便宜。三、基本原理 系统框图如图 3-1 所示低频信号发生器系统主要由 CPU、D/A 转换电路、基准电压电路、电流/电压转换电路、按键和波形指示电路、电源等电路组成。其工作原理为当分别按下键盘上的不同按键时就会分别出现方波、锯齿波、三角波
5、、正弦波,并且有液晶显示屏同步显示波的类型和频率。3.1 单片机的介绍 1.AT89S52 的引脚图如图 3-2 所示 2.管脚说明 低频信号发生器采用 AT89S52 单片机作为控制核心,其内部组成包括:一个 8 位的微处理器 CPU 及片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接;片内数据存储器 RAM 低 128 字节,存放读/写数据;高 128 字节被特殊功能寄存器占用;片内程序存储器 4KB ROM;四个 8 位并行 I/O(输入/输出)接口 P3 -P0,每个口可以用作输入,也可以用作输出;两个定时/计数器,每个定时/计数器都可以设置成计数方式,用以对外部事件进行计数,也
6、可以设置成定时方式,并可以根据计数或定时的结果实现计算机控制;五个中断源的中断控制系统;一个全双工 UART(通用异步接收发送器)的串行 I/O 口。 VCC:供电电压。 GND:接地。 RST:复位输入端。当 RST 端持续出现两个机器周期以上的高电平时,实现振荡器器件复位。ALE/PROG:当访问外部程序存储器或数据存储器时, ALE (地址锁存允许)输出脉冲用于锁存地址的低 8 位字节。通常,ALE 仍以时钟振荡频率的 1/6 输出固定的脉冲信号,因此它可用于定时或对外输出时钟目的。要注意的是:每当访问外部数据存储器时将跳过一个 ALE 脉冲。该引脚在 FLASH 存储器编程期间,还用于
7、输入编程脉冲(PROG)。应用中还可通过对特殊功能寄存器(SFR)区中的 8EH 单元的 D0 位置位,可禁止 ALE 操作。该位置位后,只有一条 MOVX 和 MOVC 指令才能将 ALE 激活。此外,单片机执行外部程序时,应设置 ALE 禁止位无效。 /PSEN:程序储存允许( PSEN)输出是外部程序存储器的读选通信号,当 AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次 PSEN 有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次 PSEN 信号。 /EA/VPP:外部访问允许,欲使 CPU 仅访问外部程序存储器(地址为 0000H-FFFFH),EA
8、端必须保持低电平(接地)。需注意的是:如果加密位 LB1 被编程,复位时内部会锁存 EA 端状态。如 EA 端为高电平(接 Vcc 端),CPU 则执行内部程序存储器的指令。FLASH存储器编程时,该引脚加上+12V 的编程允许电源 Vpp。 XTAL1:内部时钟工作电路的输入及反向振荡放大器的输入端。 XTAL2:振荡器反相放大器的输出端。89S52 单片机外部有32 个端口可供用户使用,其功能如下:P0 口:P0 口是一个 8 位漏极开路的双向 I/O 口。作为输出口,每位能驱动8个TTL逻 辑电平。对 P0 端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0 口也被作
9、为低 8 位地址/数据复用。在这种模式下,P0 不具有内部上拉电阻。在 flash 编程时,P0 口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时需要外部上拉电阻。 P1 口:P1 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p1 输出缓冲器能驱动4 个 TTL 逻辑电平。对 P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 P2 口:P2 口为一个内部上拉电阻的 8 位双向 I/O 口,P2 口缓冲器可接收,输出 4个 TTL 门电流,当 P2 口被写“1”时,其管
10、脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2 口的管脚被外部拉低,将输出电流。P2 口当用于外部程序存储器或16 位地址外部数据存储器进行存取时,P2 口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2 口输出其特殊功能寄存器的内容。 P3 口:P3 口管脚是 8 个带内部上拉电阻的双向 I/O 口,可接收输出 4 个 TTL 门电流。当 P3 口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3 口将输出电流(ILL),这是由于上拉的缘故。 3.AT89S52 的晶振及其连接方法CPU 工作时
11、都必须有一个时钟脉冲。有两种方式可以向 89S52 提供时钟脉冲:一是外部时钟方式,即使用外部电路向89S52 提供始终脉冲,见图3-3-(a); 二是内部时钟方式,即使用晶振由 89S52 内部电路产生时钟脉冲。一般常用第二种方法,其电路见图3-3-(b)。图 33 中:J 一般为石英晶体,其频率由系统需要和器件决定,在频率稳定度要求不高时也可以使用陶瓷滤波器。 C1、C2:使用石英晶体时,C1=C2=30(±10)pF 使用陶瓷滤波器时,C1=C2=40(±10)pF 4.AT89S52 的复位 使 CPU 开始工作的方法就是给 CPU 一个复位信号,CPU 收到复位信
12、号后将内部特殊功能寄存器设置为规定值,并将程序计数器设置为“0000H”。复位信号结束后,CPU从程序存储器“0000H”处开始执行程序。89S52 为高电平复位,一般有 3 种复位方法。 上电复位。接通电源时 手动复位。设置一个复位按钮,当操作者按下按钮时产生一个复位信号。 自动复位。设计一个复位电路,当系统满足某一条件时自动产生一个复位信号。 最简单的上电复位和手动复位方法如图 3-4 所示。图 3-4 89S52 的复位电路关于 CPU 的复位电路应当注意,在调试单片机程序时有两种工作方式。一是仿真器方式,主要用于调试程序。此时程序的执行由仿真器控制,复位电路不起作用,系统时钟也经常设置
13、为仿真器产生,此时用户的晶振也不起作用。二是用户方式,即脱离仿真器的实际工作方式,用户的时钟振荡电路和复位电路都必须正常工作。因此,如果系统复位电路或晶振电路有故障,就会出现仿真器方式工作正常,而用户方式不工作的现象,这是许多初学者常遇到的问题。 5.芯片擦除对 EPROM 进行程序固化时,先要用紫外灯照射擦除片内的信息,然后用万能编程器编程。EPROM 在芯片封装时顶部有一个石英玻璃窗口,要擦除片内信息时,将芯片放在专门的紫外灯下通过窗口照射 15-20 分钟,全部存储单元的 0 变为 1,此时表示信息擦除正常,可以重新写入程序。 3.2 资源分配 软、硬件设计是设计中不可缺少的,为了满足功
14、能和指标的要求,资源分配如下: 1.晶振采用 12MHZ 2.内存分配 P1 口的 P1.0-P1.3 分别与四个按键连接,分别控制锯齿波、三角波、正弦波和方波,P1.4-P1.7 与四个发光二极管相连,按键一对应发光二极管一,依次类推,发光二极管四对应按键四,实现输出一个波形对应亮一个灯。 P0 口与 DAC0832 的 DI0-DI7 数据输入端相连。 P2 口用来控制 DAC0832 的输入寄存器选择信号 CS、输入寄存器写选通信号 WR1 及DAC 寄存器写选通信号 WR2 和数据传送信号 XFER。 3.3 各部分电路原理1.DAC0832 芯片原理 (1) 管脚功能如图 3-5 所
15、示图 3-5 DAC0832 管脚图c DI7DI0:8 位的数据输入端,DI7 为最高位。 d IOUT1: 模拟电流输出端 1,当 DAC 寄存器中数据全为 1 时,输出电流最大,当 DAC寄存器中数据全为0时,输出电流为0。 e IOUT2:模拟电流输出端 2, IOUT2 与 IOUT1 的和为一个常数,即 IOUT1IOUT2常数。 f RFB:反馈电阻引出端,DAC0832 内部已经有反馈电阻,所以 RFB 端可以直接接到外部运算放大器的输出端,这样相当于将一个反馈电阻接在运算放大器的输出端和输入端之间。g VREF:参考电压输入端,此端可接一 个正电压,也可接一个负电压,它决定
16、0至 255 的数字量转化出来的模拟量电压值的幅度,VREF 范围为(+10-10)V。VREF 端与D/A内部 T 形电阻网络相连。 h Vcc:芯片供电电压,范围为(+5 15)V。 i AGND:模拟量地,即模拟电路接地端。 j DGND:数字量地。当 WR2 和 XFER 同时有效时,8 位 DAC 寄存器端为高电平“1”,此时 DAC 寄存器的输出端 Q 跟随输入端 D 也就是输入寄存器 Q 端的电平变化;反之,当端为低电平“0”时,第一级 8 位输入寄存器 Q 端的状态则锁存到第二级 8 位 DAC 寄存器中,以便第三8位 DAC 转换器进行 D/A 转换。 一般情况下为了简化接口
17、电路,可以把 WR2 和 XFER 直接接地,使第二级 8 位 DAC寄存器的输入端到输出端直通,只有第一级 8 位输入寄存器置成可选通、可锁存的单缓冲输入方式。特殊情况下可采用双缓冲输入方式,即把两个寄存器都分别接成受控方式 制作低频信号发生器有许多方案:主要有单缓冲方式,双缓冲方式和直通方式。 单缓冲方式具有适用于只有一路模拟信号输出或几路模拟信号非同步输出的情形的优点,但是电路线路连接比较简单。而双缓冲方式适用于在需要同时输出几路模拟信号的场合,每一路模拟量输出需一片 DAC0832 芯片,构成多个 DAC0832 同步输出电路,程序简单化,但是电路线路连接比较复杂。 (2) 工作原理
18、DAC0832 主要由 8 位输入寄存器、8 位 DAC 寄存器、8 位 D/A 转换器以及输入控制路四部分组成。8 位输入寄存器用于存放主机送来的数字量,使输入数字量得到缓冲锁存,由加以控制;8 位 DAC 寄存器用于存放待转换的数字量,由加以控制;8 位转换器输出与数字量成正比的模拟电流;由与门、非与门组成的输入控制电路来控个寄存器的选通或锁存状态。 DAC0832 与反相比例放大器相连,实现电流到电压的转换,因此输出模拟信号的性与参考电压的极性相反,数字量与模拟量的转换关系为 Vout1=-Vref×(数字码/256) 若 D/A 转换器输出为双极性,如图 3-6 所示 3-6
19、 D/A 转换器双极性输出电路运算放大器 A2 的作用是把运算放大器 A1 的单向输出电压转换成双向输出电压。其原理是将 A2 的输入端通过电阻 R1 与参考电压 VREF 相连,VREF 经 R1 向 A2 提供一个偏流 I1,其电流方向与 I2 相反,因此运算放大器 A2 的输入电流为 I1、I2 之代数和。则 D/A 转换器的总输出电压为: VOUT2= -(R3/R2) VOUT1+(R3/R1) VREF设 R1=R3=2R R2=R,则 VOUT2= -(2VOUT1+VREF)DAC0832 主要是用于波形的数据的传送,是本题目电路中的主要芯片。 (3) DAC0832 电路原理
20、如图 3-7 所示2.UA741 管脚图如图 3-8 所示 图 3-8 UA741 管脚图3.MC1403 管脚功能如图 3-9 所示MC1403 是低压基准芯片。一般用作 8 到 12bit 的 D/A 芯片的基准电压等一些需要本精准的基准电压的场合。 输出电压:2.5V+/-25Mv 输入电压范围:4.5Vto40V 输出电流:10Ma 因为输出是固定的,所以电路很简单。就是 Vin 接电源输入,GND 接地,Vout 加个 0.1uf 到 1uf 的电容就可以了。Vout 一般用于 8 到 12bit 的 D/A 芯片的基准电压在此项目里 MC1403 起到了稳压的作用,它基准了 DAC
21、0832 的 8 脚需要的 2.5V。其 DAC0832 能够正常工作。 四、 软件设计 单片机技术比较成熟,开发过程可利用的资源和工具丰富,最大的优点是价格便宜,成本低。调试软件采用Keil51.keiluVison是众多单片机应用开发软件中优秀软件之一,界面友好,易写易操作。在调试程序中,软件仿真 protues 功能也很强,软件调通,再通过编程器下载到 AT89S52 中,然后插到系统中即可独立完成所有的控制。根据功能不同,软件设计上分了主程序模块、延时子程序模块、正弦波模块、齿波模块、三角波模块、方波模块等几个模块编程。显示波形模块是利用 DAC0832 的 8 位特点,把波形的数据以
22、 8 位数据的形势送进 CPU中,只要一按键就能显示波形。4.1主程序流程图如图 4-1 所示图 4-1 主程序流程图本软件设计过程中主要实现利用按键来控制不同波形的输出,当按键 1 按下时,函数发生器就输出锯齿波;当按键 2 按下时,函数发生器就输出三角波;当按键 3 按下时,函数发生器就输出正弦波;当按键 4 按下时,函数发生器就输出方波。通过按键可以以任意循环方式输出不同波形。 4.2 子程序流程图 1. 锯齿波流程图 如图 4-2 所示 图 4-2 锯齿波流程图锯齿波产生首先将 DAC0832 口地址至为 4000H,然后将 00H 送入寄存器 A输出 A 中的内容,当 A
23、 中的内容等于 F0H 返回开始,当 A 中的内容不为 0FH内容累加,从而输出波形。 2. 三角波程序流程图 如图 4-3 所示三角波产生首先将 DAC0832 口地址至为 4000H,通过 A 中数值的加一递升,当 A 中的内容为 0 时,与 0FFH 相比,相等时 A 中的内容减一递减,从而循环产生三角波。 3. 正弦波程序流程图 如图 4-4 所示图 4-4 正弦波流程图4. 方波程序流程图 如图 4-5 所示图 4-5 方波流程图方波产生首先将 DAC0832 口地址至为 4000H,当 A 中的内容为 0 时,输出对应模拟量,然后延时,当 A 中的内容为 0FFH 时,同样输出对应
24、模拟量,再延时,从而得到方波。 5. 延时子程序流程图 如图 4-6 所示延时程序如下: DELY: MOV R7,#10H DLY0: MOV R6,#0EDH NOP DLY1: DJNZ R6,DLY1 DJNZ R7,DLY0 RET 方波的上限和下限的延时时间为:7ms S=1+(1+1+2×237+2)×16+1=7648S 参考文献 1 蔡美琴.MCS-51 系列 单片机系统及其应用M.北京:高等教育出版社,2000:5-7. 2 潘新民,王燕芳.微型计算机控制技术.北京:高等教育出版社,2004:10. 3 孙育才,孙华芳,王荣兴.单片机原理及应用
25、M.北京:电子工业出版社,2003: 4 李鸿.单片机原理及应用M.湖南:湖南大学出版社,2004: 5 胡汉才.单片机原理及接口技术M. 北京:清华大学出版社,1996:66-78. 6 刘守义.单片机应用技术.西安:西安电子科技大学出版社,2002: 7 范立南.单片微机接口与控制技术M.沈阳:辽宁大学出版社,1996: 8 李朝青.单片机原理及接口技术北京:北京航空航天大学出版社,1994: 9 孙俊逸,盛秋林,张铮.单片机原理及应用M.北京:清华大学出版社,2001: 10 陆子明,徐长根.单片机设计与应用基础教程.北京:国防工业出版社,2005: 11 杜华.任意波形发生器及应用J.
26、国外电子测量技术,2005,12(1):38-40. 12 张永瑞.电子测量技术基础M.西安:西安电子科技大学出版社,2006: 13 童诗白.模拟电路技术基础M. 北京:高等教育出版社,2000:171-202.14 王新贤.通用集成电路速查手册.济南:山东科学技术出版社,2002: 15 马忠梅.单片机的 C 语言应用程序设计M.北京:北京北航出版社,2003: 16 张毅刚,彭喜元,姜守达.新编 MCS-51 单片机应用设计M.哈尔滨:哈尔滨工业大学出版社,2003:153-168. 17 朱清慧.proteus 电子线路设计与仿真.北京:清华大学出版社,2008: 18 江世明.基于
27、proteus 的单片机应用技术.北京:电子工业出版社,2009: 19 刘红兵.电子 EDA.北京:中国劳动社会保障出版社,2009: 20 高建国.电子技术应用专业 proteus 仿真软件应用.上海:华中科技大学出版社,2010: 附 录 附录 1 电路原理图 附录 2 程序清单 #include <reg52.h> #include <intrins.h> #include<absacc.h> #define uint unsigned int
28、#define uchar unsigned char sbit lcden=P36; sbit lcdrs=P37; sbit dula=P26; sbit wela=P27; uchar code table1="0123456789HZPinLv:" uchar code table2="Zheng Xian Bo " uchar code table3= " Fang Bo " uchar code table4= " Jv Chi Bo " uchar code table5= "S
29、an Jiao Bo " uchar tab2; uchar val, sec, t_50ms; uint a; uchar code table=0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5 ,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,
30、0xf1,0xf2,0xf4,0xf5 ,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd ,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda ,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0x
31、c7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99 ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51 ,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,
32、0x1e,0x1c,0x1a,0x18,0x16 ,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0 x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15 ,0x16,0x18,0x1a,0x1c,0x1e,0x20,
33、0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e ,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0 x76,0x79,0x7c,0x80 ; void delay(uint z) uint i,j; for(i=z;i>0;i-)for(j=110;j>0;j-); void write_com(uchar com) lcdrs=0; P0=com;delay(5); lcde
34、n=1; delay(5); lcden=0; void write_data(uchar date) lcdrs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0; void init() lcden=0;dula=0; wela=0; write_com(0x38);write_com(0x08);write_com(0x01); write_com(0x06); write_com(0x0c); void Display(uchar k) /tab0=sec/1000; / tab1=sec%1000/100; / uchar code t
35、able= /0xc0,0xf9,0xa4,0xb0, / 0x99,0x92,0x82,0xf8, /0x80,0x90,0x88,0x83, /0xc6,0xa1,0x86,0x8e; / P0 = 0; dula=1; /消隐 / P0 =tablek / 10; /dula=0;wela=1; / /P0 = 0xfe; wela=0;delay(5); /显示 5ms 十位 / P0 = 0; dula=1; /消隐 / P3 =tablek % 10;/;dula=0;wela=1; / P0 = 0xfd; wela=0; delay(5); /显示 5ms 个位 tab0=se
36、c%100/10; write_com(0x80+0x40); for(a=12;a<18;a+)write_data(table1a); delay(1); for(a=0;a<2;a+) write_data(table1taba); delay(1); write_data(table110); write_data(table111);delay(100); tab1=sec%10; write_com(0x80+0x40); for(a=12;a<18;a+) write_data(table1a); delay(1); for(a=0;a<2;a+) wri
37、te_data(table1taba); delay(1); write_data(table110); write_data(table111); /* 名称: Keyscan() * 功能: P1 外接 4×4 按键, 按照扫描法读出键值 * 输出: 按键值 015/如无键按下, 返回 16 */ uchar Keyscan(void) uchar i, j, temp, Buffer4 = 0xef, 0xdf, 0xbf, 0x7f; for(j = 0; j < 4; j+) /循环四次 P1 = Bufferj; /在 P1 高四位分别输出一个低电平 temp =
38、0x01; /计划先判断 P1.0 位 for(i = 0; i < 4; i+) /循环四次 if(!(P1 & temp) /从 P1 低四位,截取 1 位 return (i + j * 4); /返回取得的按键值 temp <<= 1; /判断的位,左移一位 return 16; /判断结束,没有键按下,返回 16 /* * 名称: GetKey() * 功能: 读出按键、消抖、等待按键释放 * 输出: 按键值 015/如无键按下, 返回 16 */ uchar GetKey(void) uchar Key_Temp1, Key_Temp2; /两
39、次读出的键值 P1 = 0xff; Key_Temp1 = Keyscan(); /先读入按键 if(Key_Temp1 = 16) return 16; /没有键按下,返回 16 / Display(sec); /用显示代替延时 Key_Temp2 = Keyscan(); /再读一次按键 if(Key_Temp1 != Key_Temp2) return 16; /不同,返回 16 while(Keyscan() < 16) /等待按键释放 / Display(sec); /等待期间显示 return Key_Temp1; void fang() P2=0X00;delay(500/
40、sec); P2=0xff;delay(500/sec); void jvchi() uchar k; for(k=0;k<255;k+) P2=k;delay(1000/(256*sec); void sanjiao() uchar k; for(k=0;k<128;k+) P2=k;delay(500/(256*sec); for(k=128;k>0;k-) P2=k;delay(500/(256*sec); void zhengxian() uchar k; for(k=0;k<255;k+)P2=tablek;delay(1000/(256*sec); /* *
41、 名称 : Main() * 功能 : 主函数 */ void Main(void) uchar num, Key_Value; /读出的键值 /int temp; ; sec = 20; init(); / tab0=sec/1000; / tab1=sec%1000/100; tab0=sec%100/10; tab1=sec%10; write_com(0x80+0x40); for(a=12;a<18;a+) write_data(table1a); delay(1); for(a=0;a<2;a+) write_data(table1taba); delay(1); wr
42、ite_data(table110); write_data(table111); while(1) /主循环 = / Display(sec); /不停的显示 / if(GetKey=11) / m=500/sec; / temp=(int)m; / P2=0x00;delay(temp); / P2=0xff;delay(temp ); / P2=0x00;delay(500/sec); / Display(sec); / P2=0xff;delay(500/sec ); if (GetKey() = 10) /如果按下了'A'键 num = 0; /停止计时 while (num= 0) Key_Value = GetKey();/再次输入键值 if (Key_Value < 10) /如果按下了 09 sec %= 10; sec = sec * 10 + Key_Value;/修改秒数 Display(sec); if (Key_Value = 11) num = 2; if (Key_Value = 12) num = 3; if (Key_Value = 13) num = 4; if (
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025建筑项目贷款资金监管合同
- 河北省张家口市宣化区2024-2025学年八年级下学期4月期中考试语文试卷(含答案)
- 2025年东北三省四市教研联合体高考模拟试题(二)化学试题及答案
- 北京市海淀区师达中学2024-2025学年第二学期九年级3月月考数学试卷(含答案)
- Unit 3 Learning better B卷(单元试卷)(含答案含听力原文无音频)
- 买卖送货合同范例
- 2025届重庆康德三诊日语+答案
- 休闲山庄租赁合同范例
- 供销合同范例摄影
- 公司员工聘请合同范例
- 2025专利代理师笔试考试题库有答案分析
- 中考语文课内文言文阅读专题复习练习
- 危重症患者体位管理
- 大学生就业形势与就业政策课件
- 氧气吸入操作评分标准(中心供氧)
- 2024仁爱版初中英语单词表(七-九年级)中考复习必背
- 100以内进退位加减法口算题(20000道 可直接打印 每页100道)
- 粉煤灰漂珠粉项目建议书范文
- 暗黑破坏神2所有绿色套装(大图)
- 矿井安全避险系统有效性评估报告
- 砂石级配搭配计算表
评论
0/150
提交评论