欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    基于51单片机数字转速测量仪设计(共42页).docx

    • 资源ID:13492658       资源大小:758.05KB        全文页数:42页
    • 资源格式: DOCX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于51单片机数字转速测量仪设计(共42页).docx

    精选优质文档-倾情为你奉上基于51单片机的数字转速测量仪设计摘要基于单片机的转速测量仪由单片机和外部电路组成,分为测温模块,日历模块,计数模块和语音模块。利用AT89C52 进行控制,通过74LS573和ULN2803A实现数码管动态扫描中位码与段码的传送,通过DS1302实现时钟日历的功能,通过ISD25120语音芯片实现语音功能,同时利用DS18B20实现温度显示,最终实现具有语音提示功能的数字转速测量仪的全部要求关键词:数字转速测量仪 日历显示 温度显示 语音提示一引言当今,随着科学技术的发展,计算机技术带来了科研和生产的许多重大的飞跃,特别是单片微型计算机的应用已经渗透到生产和生活中的各个方面,有力的推动了社会的发展。单片微机以其体积小,集成度高,价格便宜,在数据处理、实时控制等方面有着无与伦比的强大功能。其性能不断提高,应用范围愈来愈广。数字转速测量仪的主要功能为测量输入脉冲的频率,同时可以兼顾日历显示,温度显示,以及语音报转速功能。考虑到采用模拟电路和数字电路设计的频率计整体电路的规模较大,用到的器件多,造成故障率高,难调试,对于模式的切换需要用到机械开关,机械开关时间久了会造成接触不良,功能不易实现。为此我们采用了单片机进行设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易的实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。二设计技术要求1.测量范围10-10000转/分,测量准确度1%。2.六位数码管显示。3.语音问候提示。4.数码管显示测量值。5.实时年月日显示与切换。三设计内容概要系统的硬件部分以AT89C52 单片机为控制核心,通过时钟芯片DS1302,语音芯片ISD25120,温度测试芯片DS18B20,七段数码管构成了一个具有语音播报功能,时间日期显示及温度显示功能的数字转速测量仪。整个系统采用8块七段数码管来显示信息,不仅可以显示频率,温度,也可以通过按键切换至日期与时间显示。系统通过555振荡器模拟信号发生器,利用单片机定时计数器测量脉冲频率。系统的软件设计部分全部采用C语言进行编写,具有良好的可移植性和扩展升级能力。整个软件设计部分可主要分为时间、温度、测频率三部分。四电路与模块的设计4.1单片机主控模块单片机模块设计如图1所示。图1 单片机主控模块电路图AT89C52单片机是一种低功耗、高性能CMOS 8位微控制器,内含256B的RAM。与AT80C51引脚和指令完全兼容。拥有1个8位CPU,1个片内振荡器及时钟电路,3个16位定时计数器,21 个特殊功能寄存器,4个8位并行IO口,共32条可编程IO端线,1个可编程全双工串行口,且自带8KB的电擦除E2PROM,用以保存控制程序。单片机使用了两个电容值为30pF的电容以及频率为11.0592MHz的晶振组成了外部晶振电路。阻值分别为200,10k的电阻,以及一个电容值为10uF的电容组成了一个能提供复位信号的电路。按下S6,单片机复位。从单片机的P2,5,P2,6,P2,7三个输出引脚分别引出三个或非门,分别接入显示模块与语音模块,从而实现对这些模块的控制。4.2数码管动态显示模块数码管显示模块如图2。图2 数码管显示模块单片机通过两个或非门实现对两个锁存器74LS573的选择和控制,而ULN2803A则通过提供驱动电流实现对于不同位的显示。动态接口采用各数码管循环轮流显示的方法,当循环显示频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出(字形选择),另一接口完成各数码管的轮流点亮(数位选择)。在进行数码显示的时候,要对显示单元开辟8个显示缓冲区,每个显示缓冲区装有显示的不同数据即可。对于显示的字形码数据我们采用查表方法来完成。其中,对于数码管显示的段码和位码都必须经过锁存器74LS573实现,其特性有:三态总线驱动输出;置数全并行存取;缓冲控制输入;使能输入有改善抗扰度的滞后作用。原理:74LS573 的八个锁存器都是透明的D 型锁存器,当使能(G)为高时,Q 输出将随数据(D)输入而变。当使能为低时,输出将锁存在已建立的数据电平上。输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。特别适用于缓冲寄存器,I/O 通道,双向总线驱动器和工作寄存器。而由于电路中使用的共阴极数码管并没有另外提供电源,还需要ULN2803A来提供驱动电流来点亮相应的数码管。ULN2803是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。达林顿管又称复合管。它将二只三极管适当的连接在一起,以组成一只等效的新的三极管。这等于效三极管的放大倍数是二者之积。在电子学电路设计中,达林顿接法常用于功率放大器和稳压电源中。4.3DS1302模块日历模块如图3所示。图3 日历模块DS1302包括时钟/日历寄存器和31 字节(8 位)的数据暂存寄存器,数据通信仅通过一条串行输入输出口。实时时钟/日历提供包括秒、分、时、日期、月份和年份信息。闰年可自行调整,可选择12 小时制和24 小时制,可以设置AM、PM。DS1302实时时钟具有能计算2100 年之前的秒分时日日期星期月年的能力还有闰年调整的能力;31个8 位暂存数据存储RAM;串行I/O 口方式使得管脚数量最少;宽范围工作电压2.0 5.5V;工作电流2.0V 时,小于300nA;读/写时钟或RAM 数据时有两种传送方式单字节传送和多字节传送字符组方式;8 脚DIP 封装或可选的8 脚SOIC 封装根据表面装配;简单3 线接口;与TTL 兼容Vcc=5V;可选工业级温度范围-40 +85;与DS1202 兼容;在DS1202 基础上增加的特性;对Vcc1 有可选的涓流充电能力;双电源管用于主电源和备份电源供应;备份电源管脚可由电池或大容量电容输入;附加的7 字节暂存存储器。DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc10.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc>2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向)。SCLK为时钟输入端。图4 DS1302工作原理主要工作原理图如图4 所示:移位寄存器,控制逻辑,晶振,时钟和RAM。在进行任何数据传输时,RST必须被制高电平(注意虽然将它置为高电平,内部时钟还是在晶振作用下走时的,此时,允许外部读写数据),在每个SCLK 上升沿时数据被输入,下降沿时数据被输出,一次只能读写一位,适度还是写需要通过串行输入控制指令来实现(也是一个字节),通过8 个脉冲便可读取一个字节从而实现串行输入与输出。最初通过8 个时钟周期载入控制字节到移位寄存器。如果控制指令选择的是单字节模式,连续的8 个时钟脉冲可以进行8 位数据的写和8 位数据的读操作,SCLK 时钟的上升沿时,数据被写入DS1302,SCLK 脉冲的下降沿读出DS1302 的数据。8 个脉冲便可读写一个字节。在突发模式,通过连续的脉冲一次性读写完7 个字节的时钟/日历寄存器(注意时钟/日历寄存器要读写完),也可以一次性读写8328 位RAM 数据(可按实际情况读写一定数量的位,不必全部读写,两者的区别)。4.4语音模块语音模块设计如图5所示。图5 语音模块设计语音部分我们采用ISD25120语音芯片。ISD25120采用模拟数据直接存储技术,不需要经过AD或DA转换。因此能较好地保留语音信息中的有效成分,提高录放的清晰度,可以非常真实、自然地再现语音。其外围电路也非常简单,只需要少许阻容元件即可,并且易于与主控制器连接,实现分段寻址功能。A9和A8决定A7A0的意义,当A9和A8有一个为“0”时,A7A0表示为当前录放操作的起始地址,当A9和A8有一不为“0”时,A7A0表 示为不同的操作模式,在此A9和A8接地,表示A7A0为地址数。当需要放音时,89C52使ISD25120片选端CE=“0”,同时给出A7A0 地址数,在CE的下降沿锁存。由于A8,A9均为低电平,A7-A0表示当前录放操作的起始地址。P/R是录放控制选择端,连接到单片机的P1,4,当向该端口输入高电平时系统执行放音操作,输入低电平时系统执行录音操作。EOM为录放音结束信号输出端,连接单片机的P1.5,在录音时系统将会自动地将EOM标识插入到信息的结尾;放音遇到EOM标识时,该引脚输出低电平。PD为芯片低功耗状态控 制端,连接单片机的P1,6,当PD拉高时芯片将停止工作,进入不耗电状态。当芯片发生溢出,即OVF端变低时,要将本端短暂变高复位芯片,才能使之再 次工作。CE为片选端,连接单片机的P1,7,低电平时芯片允许进行录放操作。MIC和MIC REF分别为麦克风输入和输入参考端,系统录制提示音的信号可以通过麦克风输入。ANA IN和ANA OUT为模拟信号输入、输出端,当使用麦克风作为输入设备时,应将ANA OUT端通过一个电容和电阻连接ANA IN端,这个电容和电阻决定了低端截止频率。如果是对其它符合要求的信号进行录制时,可以直接通过一个电容耦合到ANA IN端。因此,通过74LS573锁存器,便可以准确输出所需要的语音。ISD25120的22-25和27引脚直接与单片机相连,则通过单片机的输出信号方便的控制语音芯片的工作状态。ISD25120的管脚图如图6。各管脚功能如表1。图6 ISD25120引脚图表1 ISD25120引脚功能引脚序号引 脚 名 称功 能17A0/M0A6/M6地址线810A7A9地址线11AUX IN当/CE和P/-R为高,放音不进行,或处入放音溢出状态时,本端的输入信号通过内部功放驱动喇叭输出端。12,13VSSD、 VSSA数字地和模拟地,这两脚最好在引脚焊盘上相连。14,15SP+、SP-扬声器输出。16,28VCCA、VCCD模拟电源、数字电源,尽可能在靠近供电端处相连。17MIC本端连至片内前置放大器,外接话筒应通过串联电容耦合到本端,耦合电容值和本端的10K输入电阻(如图2)决定了芯片频带的低频截止点。18MIC REF本端是前置放大器的反向输入。当以差分形式连接话筒时,可减小噪声,提高共模抑制比。19AGCAGC动态调整前置增益以补偿话筒输入电平的宽幅变化,使得录制变化很大的音量时失真都能保持最小。响应时间取决于本端的5K输入阻抗外接的对地电容(即图2中C2)的时间常数。释放时间取决于本端外接的并联对地电容和电阻(即图2中R5和C2)的时间常数。470K和4.7uF的标称值在绝大多数场合下可获得满意的效果.20ANA IN 本端为芯片录音信号输出。对话筒输入来说ANA OUT端应通过外接电容连至本端。21ANA OUT前置放大器的输出.前置电压增益取决于AGC端电平 22/OVF芯片处于存储空间末尾时本端输出低电平脉冲表示溢出,之后本端状态跟随/CE端的状态,直到PD端变高。本端可用于级联。23/CE本端变低后(而且PD为低),允许进行录放操作。芯片在本端的下降沿锁存地址线和P/R端的状态。24PD本端拉高使芯片停止工作, 进入不耗电的节电状态,芯片发生溢出,即/OVF端输出低电平后,要将本端短暂变高复位芯片,才能使之再次工作。25/EOMEOM标志在录音时由芯片自动插入到该信息的结尾。放音遇到EOM时,本端输出低电平脉冲。芯片内部会检测电源电压以维护信息的完整性,当电压低于3.5V时,本端变低,芯片只能放音。26XCLK外部时钟。本端内部有下拉元件,不用时应接地。27P/R本端状态在/CE的下降沿锁存。高电平选择放音,低电平选择录音。录音时,由地址端提供起始地址,录音持续到/CE或PD变高,或内存溢出;如果是前一种情况,芯片自动在录音结束处写入EOM标志。放音时由地址端提供起始地址,放音持续到EOM标志。如果/CE一直为低,或芯片工作在某些操作模式,放音会忽略EOM,继续进行下去。4.5脉冲发生电路模块本模块由555定时器芯片构成。图7 555构成的脉冲发生电路由555定时器构成的多谐振荡器如图7所示,R1,R2和C是外接定时元件,电路中将高电平触发端(6脚) 和低电平触发端(2脚)并接后接到R2和C的连接处,将放电端(7脚)接到R1,R2的连接处。由于接通电源瞬间,电容C来不及充电,电容器两端电压uc为低电平,小于(1/3)Vcc,故高电平触发 端与低电平触发端均为低电平,输出uo为高电平,放电管VT截止。这时,电源经R1,R2对电容C充电,使 电压uc按指数规律上升,当uc上升到(2/3)Vcc时,输出uo为低电平,放电管VT导通,把uc从(1/3)Vcc 上升到(2/3)Vcc这段时间内电路的状态称为第一暂稳态,其维持时间TPH的长短与电容的充电时间有关 。充电时间常数T充=(R1R2)C。由于放电管VT导通,电容C通过电阻R2和放电管放电,电路进人第二暂稳态.其维持时间TPL的长短与电 容的放电时间有关,放电时间常数T放R2*C0随着C的放电,uc下降,当uc下降到(1/3)Vcc时,输出uo。 为高电平,放电管VT截止,Vcc再次对电容c充电,电路又翻转到第一暂稳态。不难理解,接通电源后,电路就在两个暂稳态之间来回翻转,则输出可得矩形波。电路一旦起振后,uc电压总是在(1/32/3)Vcc 之间变化。通过电路和多谐振荡器的工作原理我们可知,产生脉冲的频率f=1.44/(R1+2W1)C。这里我们选取R1=27k,W1最大阻值为100k,C1=0.1uF,则f的变化范围从63.44Hz到533.33Hz。4.6按键控制电路图8 按键控制电路按键控制电路如图8所示,按键S1设计为日历启动,S2设计为温度显示,S3设计为频率测量及语音播放。剩余的S4和S5不用。硬件实物图如图9所示。图9 实物图五程序设计5.1设计思想:程序分为时间、测频、温度、语音四部分。下面分别进行简单介绍:(1)时间部分:时间信号由DS1302产生,由单片机的P2.0,P2.1.P2.2与DS1302进行通信以实现对时间信号的读、写操作。对时间的调整可以由外部按键实现。显示时间时不断扫描P1.0端口(S1),如发现低电平,进入时间显示程序。显示部分由七段数码管实现。由T1作定时器每2500us刷新一次,将要现示的数字放入显示缓冲区,经译码程序转换后送数码管显示。(2)测频:单片机通过不断扫描P1.2端口,当P1.2为低电平,进入频率测量程序。在测量频率的程序中,通过软件延时,留出大约为1s的时间。在这一秒钟时间之内,通过设置计数器1,计数外部555输入的脉冲个数。将计得的数送七段数码管显示。(3)温度:单片机通过扫描P1.1口,当P1.1为低电平,进入温度测量程序。单片机通过T3.4口与DS18B20进行数据交换,包括启动DS18B20,写DS18B20的控制字,从DS18B20接收温度数据。从DS18B20接收的数据通过七段数码管显示。(4)语音:语音芯片的录音需要另外一个录音程序的辅助。具体程序见7.2。通过对语音芯片录音,并记录每段语音在语音芯片内的地址,即可在放音时调用已录好的语音。5.2程序流程图程序流程图如图10所示。开始开启DS1302,送初始日期数据判断是否按键P1.0按下P1.1按下P1.2按下开启实时日历显示启动DS18B20,进行温度转换,并显示在数码管上开启计数器,测量频率,并启动语音芯片,报频率结束图10 程序流程图六程序代码1.主要程序代码#include<at89x52.h>#include<stdio.h>#include<absacc.h> /动态数码管显示需要的头文件#include<intrins.h> /时钟日历需要的头文件#define SEGMENT XBYTE0xdf80 /P0 段码寄存器地址#define BIT_LED XBYTE0xbf90 /P0 位码寄存器地址#define f 11.0592 /晶振频率#define time1 2500 /定时2500us#define uint unsigned int#define ISD25120 XBYTE0X7FFFsbit TMDAT=P34;sbit start_key=P10;sbit cent=P11;sbit fre=P12;sbit voice=P13;sbit ce=P17;sbit pd=P16;sbit pr=P14;sbit eom=P15;sbit OVF=P33;/DS1302的引脚关系sbit SCL_DS1302=P20; sbit IO_DS1302=P21;sbit RST_DS1302=P22;/与动态数码管显示有关的变量定义unsigned char data display_bit;unsigned char data display_buffer8;unsigned char data time1_h,time1_1,time0_h,time0_1;unsigned int idata time1_times,time0_times,count,i,flag;unsigned long aa;unsigned char seg30,recode_count,play_count,key,num=0;unsigned char reverse_count;unsigned char tab=0x00,0x0c,0x16,0x20,0x2b,0x36,0x41,0x4c,0x58,0x63,0x6d,0x7e,0x8c,0x97;unsigned char data date_buffer12;unsigned char bdata data_ds1302;sbit bit_data0=data_ds13020;sbit bit_data7=data_ds13027;void display();unsigned char get_code(unsigned char i);void delay(unsigned int i);void show();void initial_ds1302();void initialdata_DS1302();void showdate();void write_ds1302(unsigned char address,unsigned char numb);void read_date();void change();void dmsec(unsigned int c);void tmreset(void);void tmstart(void);unsigned char tmrtemp(void);void play(unsigned char x);void main()unsigned char i; recode_count=play_count=num=0;EA=1;ET1=1;ET0=1;initial_ds1302();initialdata_DS1302();read_date();while(1) if(start_key=0) delay(10); if(start_key=0) ET0=0; for(i=2;i<8;i+) read_date();display_bufferi=date_bufferi-2; display_buffer0=2;display_buffer1=0;show();delay(20000);ET0=1;EX0=0; if(cent=0) delay(10); if(cent=0) unsigned char last;int last_shi,last_ge; dmsec(1);tmstart();dmsec(1);last=tmrtemp();last_shi=last/10;last_ge=last%10;display_buffer0=16; display_buffer1=16; display_buffer2=16; display_buffer3=16; display_buffer4=16;display_buffer5=16; display_buffer6=last_shi; display_buffer7=last_ge; show();dmsec(10);dmsec(1);EX0=0;if(fre=0) delay(10); if(fre=0) flag=0; change(); TR1=0; EX0=1; while(flag=0) play(tab10); delay(10000); if(display_buffer5=16)&&(display_buffer6=0)&&(display_buffer7!=0) play(tabdisplay_buffer7);delay(10000);play(tab11); if(display_buffer5=16)&&(display_buffer6!=0)&&(display_buffer7=0) play(tabdisplay_buffer6);delay(10000);play(tab13);delay(10000);play(tab11); if(display_buffer5=16)&&(display_buffer6!=0)&&(display_buffer7!=0) play(tabdisplay_buffer6);delay(10000);play(tab13);delay(10000);play(tabdisplay_buffer7);delay(10000);play(tab11); if(display_buffer5!=16)&&(display_buffer6=0)&&(display_buffer7=0) play(tabdisplay_buffer5);delay(10000);play(tab12);delay(10000);play(tab11); if(display_buffer5!=16)&&(display_buffer6=0)&&(display_buffer7!=0) play(tabdisplay_buffer5);delay(10000);play(tab12);delay(10000);play(tab0);delay(10000);play(tabdisplay_buffer7);delay(10000);play(tab11); if(display_buffer5!=16)&&(display_buffer6!=0)&&(display_buffer7=0) play(tabdisplay_buffer5);delay(10000);play(tab12);delay(10000);play(tabdisplay_buffer6);delay(10000);play(tab13);delay(10000);play(tab11); if(display_buffer5!=16)&&(display_buffer6!=0)&&(display_buffer7!=0) play(tabdisplay_buffer5);delay(10000);play(tab12);delay(10000);play(tabdisplay_buffer6);delay(10000);play(tab13);delay(10000);play(tabdisplay_buffer7);delay(10000);play(tab11); flag=1; /延时void delay(unsigned int i) while(i-); /动态显示模块void time1_int(void) interrupt 1TH0=time1_h;TL0=time1_1;display();unsigned char get_code(unsigned char i)unsigned char p;switch(i)case 0:p=0x3F;break;case 1:p=0x06;break;case 2:p=0x5B;break;case 3:p=0x4F;break;case 4:p=0x66;break;case 5:p=0x6D;break;case 6:p=0x7D;break;case 7:p=0x07;break;case 8:p=0x7F;break;case 9:p=0x67;break;case 10:p=0x77;break;case 11:p=0x7C;break;case 12:p=0x39;break;case 13:p=0x5E;break;case 14:p=0x79;break;case 15:p=0x71;break;case 16: p=0x00;break;default: break;return(p); void display(void)unsigned char i;switch(display_bit)case 1:i=0;break;case 2:i=1;break;case 4:i=2;break;case 8:i=3;break;case 16:i=4;break;case 32:i=5;break;case 64:i=6;break;case 128:i=7;break;default:break;BIT_LED=0;SEGMENT=get_code(display_bufferi);BIT_LED=display_bit;if(display_bit<0x64)display_bit=display_bit*2;else display_bit=0x01;void show()BIT_LED=0;TMOD=0x61;/定时器0计数器方式2定时器1计时器方式1time1_times=65536-time1*f/12;time1_h=(time1_times/256);time1_1=(time1_times%256);TH0=time1_h;TL0=time1_1;TR0=1;display_bit=0x01;/DS1302时钟日历芯片部分void close_write_bit()char i;SCL_DS1302=0;_nop_();RST_DS1302=1;_nop_();_nop_();data_ds1302=0x8e;for(i=1;i<=8;i+)SCL_DS1302=0;IO_DS1302=bit_data0;_nop_();SCL_DS1302=1;data_ds1302=data_ds1302>>1; data_ds1302=0x80;IO_DS1302=0;for(i=1;i<=8;i+)SCL_DS1302=0;IO_DS1302=bit_data0;_nop_();SCL_DS1302=1;data_ds1302=data_ds1302>>1; void open_write_bit()char i;SCL_DS1302=0;_nop_();RST_DS1302=1;_nop_();_nop_();data_ds1302=0x8e;for(i=1;i<=8;i+)SCL_DS1302=0;IO_DS1302=bit_data0;_nop_();SCL_DS1302=1;data_ds1302=data_ds1302>>1; data_ds1302=0x00;IO_DS1302=0;for(i=1;i<=8;i+)SCL_DS1302=0;IO_DS1302=bit_data0;_nop_();SCL_DS1302=1;data_ds1302=data_ds1302>>1; void initial_ds1302()unsigned char i;SCL_DS1302=0;_nop_();RST_DS1302=1;_nop_();_nop_();data_ds1302=0x8e;for(i=1;i<=8;i+)SCL_DS1302=0;IO_DS1302=bit_data0;_nop_();SCL_DS1302=1;data_ds1302=data_ds1302>>1; data_ds1302=0x00; /80IO_DS1302=0;for(i=1;i<=8;i+)SCL_DS1302=0;IO_DS1302=bit_data0;_nop_();SCL_DS1302=1;data_ds1302=data_ds1302>>1; RST_DS1302=0;_nop_();SCL_DS1302=0;SCL_DS1302=0;_nop_();RST_DS1302=1;_nop_();_nop_();data_ds1302=0x90;for(i=1;i<=8;i+)SCL_DS1302=0;IO_DS1302=bit_data0;_nop_();SCL_DS1302=1;data_ds1302=data_ds1302>>1; data_ds1302=0xa4;for(i=1;i<=8;i+)SCL_DS1302=0;IO_DS1302=bit_data0;_nop_();SCL_DS1302=1;data_ds1302=data_ds1302>>1; RST_DS1302=0;_nop_();SCL_DS1302=0;SCL_DS1302=0;_nop_();RST_DS1302=1;_nop_();_nop_();dat

    注意事项

    本文(基于51单片机数字转速测量仪设计(共42页).docx)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开