毕业设计-单片机课程设计出租车计价器_第1页
毕业设计-单片机课程设计出租车计价器_第2页
毕业设计-单片机课程设计出租车计价器_第3页
毕业设计-单片机课程设计出租车计价器_第4页
毕业设计-单片机课程设计出租车计价器_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

XXXXXXXXX大学课程设计说明书前言出租车计价器是出租车营运收费的专用智能化仪表,随着电子技术的发展,出租车计价器技术也在不断进步和提高。国内出租车计价器已经经历了4个阶段的发展。从传统的全部由机械元器件组成的机械式,到半电子式即用电子线路代替部分机械元器件的出租车计价器;再从集成电路式到目前的单片机系统设计的出租车计价器。出租车计价器计费是否准确、出租车司机是否作弊才是乘客最关心的问题,而计价器营运数据的管理是否方便才是出租车司机最关注的。因此怎样设计出一种既能有效防止司机作弊又能方便司机的计价器尤为重要。因此,本文以单片机AT89S52为核心设计一款多功能出租车计价器,该计价器能实现按时间和里程综合计算车价,能显示时间、里程、单价、总车价等相关信息显示。它比市场上的一些计价器使用更方便,功能更全,还具有有效防止司机作弊和系统稳定性好的优点。第一章出租车计价系统的设计要求与设计方案出租车计价器设计要求设计一个出租车自动计费器,计费包括起步价、行车里程计费、等待时间计费三部分,用1602液晶显示总金额,运行时间,暂停时间,最大值为99.9元,起步价为5.0元,3Km之内起步价计费,超过3Km,设速度为100m/s,10s增加1.3元(即1KM增加1.3元),等待时间单价为每分钟1.5元,用液晶显示总里程,同时用液晶显示等待时间和运行花费时间。①、计费功能费用的计算是按行驶里程收费。设起步价为5.00元。1、当里程<3km时,按起价计算费用2、当里程>3km②、显示功能1、显示行驶里程:用四位数字显示,显示方式为“XXXX”,单位为km。计程范围0-99km,精确到1km。2、显示等候时间:用两位数字显示,显示方式为“XX”,单位为min。计时范围0-59min,精确到1min。3、显示总费用:用四位数字显示,显示方式为“”,单位为元。计价范围0-999.9元,精确到0.1元。系统主要功能本出租车自动计费,上电后显示最初的起步价,里程计费单价,等待时间计费单价,通过按键可以调节起步价,里程计费单价,等待时间计费单价。同时具有运行,暂停,停止等状态,可以显示运行的时间,同时可以显示暂停的时间,具有累加功能,暂停和运行时间在暂停和运行前一次的状态上计时。出租车停止后能够显示行驶的总费用。方案论证与比较方案一:采用数字电子技术,利用555定时芯片构成多谐振荡器,或采用外围的晶振电路作为时钟脉冲信号,采用计数芯片对脉冲尽心脉冲的计数和分频,最后通过译码电路对数据进行译码,将译码所得的数据送给数码管显示,一下是该方案的流程框图,方案一如图1-1所示:图1-1方案一案二:采用EDA技术,根据层次化设计理论,该设计问题自顶向下可分为分频模块,控制模块计量模块、译码和动态扫描显示模块,其系统框图如图1-2所示:图1-2方案二方案三:采用MCU技术,通过单片机作为主控器,利用1602字符液晶作为显示电路,采用外部晶振作为时钟脉冲,通过按键可以方便调节,以下是方案三的系统流程图,本方案主要是必须对于数字电路比较熟悉,成本又不高。方案图如图1-3所示:图1-3方案三方案总结:通过各个方案的比较,本次采用方案三,不但控制简单,而且成本低廉,设计电路简单。第二章出租车计价系统的硬件设计振荡电路单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容(电容和一般取33pF)。这样就构成一个稳定的自激振荡器。振荡电路脉冲经过二分频后作为系统的时钟信号,再在二分频的基础上三分频产生ALE信号,此时得到的信号时机器周期信号。振荡电路如图2-1所示:图2-1振荡电路复位电路设计复位操作有两种基本形式:一种是上电复位,另一种是按键复位。按键复位具有上电复位功能外,若要复位,只要按图中的RESET键,电源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。上电复位电路要求接通电源后,通过外部电容充电来实现单片机自动复位操作。上电瞬间RESET引脚获得高电平,随着电容的充电,RERST引脚的高电平将逐渐下降。RERST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。按键复位电路图如图2-2所示。图2-2AT89C51引脚配置键盘接口电路独立式键盘:独立式键盘中,每个按键占用一根I/O口线,每个按键电路相对独立。I/O口通过按键与地相连,I/O口有上拉电阻,无键按下时,引脚端为高电平,有键按下时,引脚电平被拉低。I/O口内部有上拉电阻时,外部可不接上拉电阻。键盘接口电路如图2-3所示:图2-3键盘接口电路显示电路对于现实电路我们可以采用数码管,也可以采用液晶显示,液晶又分字符型和点阵型,我们使用的液晶是字符型液晶,并且带字符库的,不需要查找代码。英文字符就可。液晶电路使用时,如果发现液晶不亮可以调节连接液晶的点位器,改变液晶的亮度。显示电路如图2-4所示:图2-4数码管封装图及数据线与数码管管脚关系路程测量部分出租车中需要一个能准确获得车轮转动即路量信号的装置,以得到标准的脉冲信号送入单片机的定时/计数器T1即P3.5引脚,利用单片机的T1的计数功能完成100次的计数后产生一中断来完成路程的测量。(设车轮周长为1m,则霍尔传感器每产生100个脉冲便表示车已行程0.1km,根据际情况在程序中进行设置)。汽车联轴器按圆周间隔嵌入磁钢,用霍传感器集成芯片A44E测并输出脉冲,其工作原理如图4所示,霍尔传感器集成芯片A44E有信号转换、电压放大、等功能,为增加其抗干扰的能力,经过74LS14对信号整形后再通过光偶送入P3.5引脚。图2-5路程测量电路单片机各引脚功能说明AT89S52电路图如图2-6所示:VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行图2-6校验时,P0输出原码,此时P0外部必须被拉高。图2-6AT89S52P1口: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口输出地址的高八位。在给出地址“1P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”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:来自反向振荡器的输出。1602液晶的简介字符型液晶1602主要技术参数如表2-1所示:显示容量:16*2个字符芯片工作电压:—工作电流:2.0mA(5.0V)模块最佳工作电压:字符尺寸:2.95*4.35(W*H)mm表2-1字符型液晶1602主要技术参数接口信号说明如表2-2所示:编号符号引脚说明编号符号引脚说明1Vss电源地9D2DataI/O2VDD电源正极10D3DataI/O3VL液晶显示偏压信号11D4DataI/O4Rs数据/命令选择端(H/L)12D5DataI/O5R/W读/写选择端(H/L)13D6DataI/O6E使能信号14D7DataI/O7D0DataI/O15BLA背光源正极8D1DataI/O16BLK背光源负极表2-21602接口信号说明控制器接口说明(HD44780及兼容芯片)1、基本操作时序a读状态:输入:Rs=L,Rw=H,E=H输出:D0—D7=状态字b写指令:输入:Rs=L,Rw=L,D0—D7=指令码输出:无E=高脉冲C读数据:输入:Rs=H,Rw=L,E=H输出:D0—D7=数据d写数据:输入:Rs=H,Rw=L,D0—D7=数据输出:无E=高脉冲状态字说明如表2-3所示:STA7D7STA6D6STA5D5STA4D4STA3D3STA2D2STA1D1STA0D0表2-3状态字说明(a)STA0--6当前数据地址指针的数值STA7读写操作使能1:禁止0:允许表2-4状态字说明(b)注:对控制器进行读写操作之前,都必须进行读写检测,确保STA7为0RAM地址映射图控制器内部带有80*8位的RAM缓冲区,对应关系如下图2-5所示:表2-5RAM地址映射图LCD16字*2行000102030405060708090A0B0C0D0E0F10…27404142434445464748494A4B4C4D4E4F50…67显示模式设置如表2-6所示:指令码功能00111000设置16*2显示,5*7点阵,8位数据接口表2-6显示模式设置显示开关及光标设置如表2-7所示:指令码功能00001DCBD=1开显示;D=0关显示C=1显示光标;C=0不显示光标B=1光标闪烁;B=0光标不显示000001NSN=1当读或写一个字符后地址指针加一,且光标加一N=0当读或写一个字后地址指针减一,且光标减一S=1当写一个字符后,整屏显示左移(N=1)或右移(N=0),以得到光标不移动而屏幕移动的效果S=0当写一个字符,整屏显示不移动表2-7显示开关及光标设置数据控制控制器内部没有一个数据地址指针,用户可通过它们来访问内部的全部80字节RAM。第三章出租车计价系统的软件设计单片机资源使用入,直流电机电路的控制线用了P2口线,P3.0、P3.1、P3.2分别为led信号控制脚。显示电路用到了P0和P2口,P0口为液晶的数据口。中断子函数对于中断程序,只要定时器计数满就会产生中断50ms中断一次,共计20次,秒钟加1,秒钟计满再分钟加,当分钟加到99时全部清零。以下是中断子函数的流程图如图3-1所示:图3-1中断子程序流程图判键子函数对于独立式键盘判键,首先看有键按下不,如果有键按下则延时一会儿,在判断是否真的有键按下,如果确实有键按下,在判键释放,最后执行键功能程序。判键子函数的流程框图如图3-2所示:图3-2判键子程序流程图显示子程序1602液晶是字符型液晶,它的内部自带字符库,它可以写两行的字符,同时每行可以写40个字符,在写显示程序的时候,我们先写命令,再设定字符显示,最后写数据,在每写一次命令或数据都需要判断液晶是否忙。液晶显示程序流程图如图3-3所示:图3-3显示子程序流程图图3-3液晶显示程序流程图总程序流程框图图3-4整体程序流程图第四章proteus的简介Proteus介绍Proteus软件是来自英国Labcenterelectronics公司的EDA工具软件,它组合了高级原理布图、混合模式SPICE仿真,PCB设计以及自动布线来实现一个完整的电子设计系统。此系统受益于15年来的持续开发,被《电子世界》在其对PCB设计系统的比较文章中评为最好产品—“TheRoutetoPCBCAD”。Proteus产品系列也包含了我们革命性的VSM技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。

其功能模块:—个易用而又功能强大的ISIS原理布图工具;PROSPICE混合模型SPICE仿真;ARESPCB设计。PROSPICE仿真器的一个扩展PROTEUSVSM:便于包括所有相关的器件的基于微处理器设计的协同仿真。此外,还可以结合微控制器软件使用动态的键盘,开关,按钮,LEDs甚至LCD显示CPU模型。支持许多通用的微控制器,如PIC,AVR,HC11以及8051。最新支持ARM。交互的装置模型包括:LED和LCD显示,RS232终端,通用键盘,I2C,SPI器件。强大的调试工具,包括寄存器和存储器,断点和单步模式。IARC-SPY和KeiluVision2等开发工具的源层调试。应用特殊模型的DLL界面-提供有关元件库的全部文件。第五章设计体会与小结出租车计费器系统的设计已经全部完成,能按预期的效果进行模拟汽车启动,停止,暂停等功能并能够通过LCD显示车费数目。本款出租车计价器包括单价输出、单价调整、显示当前的系统时间等功能。另外,多功能出租车计价器还具有性能可靠、电路简单、成本低、实用性强等特点,加上经过优化的程序,使其有很高的智能化水平。一个月来,经过自己努力,基本上完成了设计要求的内容,在系统可行性分析、原理图设计等方面都作了许多实际工作,取得了一些成绩,同时也遇到了一些问题,存在一些不足。经过这一个月的学习,我觉得自己不论是在理论知识方面还是在动手能力方面都有了不小的进步,自己从中受益匪浅。这次设计很好的把以前学到的理论知识应用于实践,使我认识到理论知识与实践之间有一定的差距,只有通过不断的努力学习和实践才能很好的把理论知识应用到实践当中,也只有通过不断的实践才能对理论知识的理解。通过这次设计不仅学会了如何去查找相关资料,更重要的是通过查找资料和翻阅书籍学到了不少知识,扩大了知识面,提高了知识水平。经过单元设计和系统设计巩固了以前所学的专业知识,自己真正认识到理论联系实际的重要性,为以后的学习和工作提供了很多有价值的经验。通过这次设计不仅增强了自己的动脑能力和动手能力,也提高了我思考问题、分析问题、解决问题的能力,更重要的是学会用工程化的思想来解决问题。这在以前的学习过程中是不曾学到的。这次设计是我认真认识到完整、严谨、科学分析问题、解决问题的思想是多么的重要,只有拥有了科学的态度才能设计出有用的产品。另外通过本次设计,是我认识到自己理论知识的应用能力有很大的欠缺,需要在以后的学习中进一步提高。参考文献李广弟,朱月秀,冷祖祁.单片机基础[M].第3版.北京航空航天大学出版社,2007李华.MCS-51系列单片机实用接口技术[M].北京航空航天大学出版社,1996李群芳,肖看.单片机原理接口与应用.北京:清华大学出版社,2005[M].北京:高等教育出版社,1990高峰.单片微型应用系统设计及实用技术.北京:机械工业出版社,2004胡辉,单片机原理及应用设计—刘守义,单片机应用技术[M],西安:西安电子科技大学出版社,1996附录一.源程序#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitrw=P2^1;//读或写sbitrs=P2^0;//sbiten=P2^2;//读写时能控制端sbitb=P0^7;//液晶判断忙标志位voidlcd_init();//voidwr_com(ucharcommand);//液晶写命令voidwr_data(uchardata0);//写数据voidlcd_clear();//液晶清屏voidlcd_set();//设置液晶的起始位置voidbusy();//液晶判忙函数voiddisplay();//显示voidprintstring(uchar*s);//直接写字符voiddisplay1();voidkey1();sbitK=P1^0;sbitK1=P1^1;sbitK2=P1^2;sbitK3=P1^3;sbitK4=P1^4;sbitg=P2^7;sbitaa=P2^3;sbitbb=P2^4;sbitcc=P2^5;sbitled_run=P3^0;sbitled_await=P3^1;sbitled_stop=P3^2;bitf_start;//开始标志位bitjump_in;//跳入开始标志位bitjump_out;//跳出标志位voidkey();ucharcodetable[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x70};//字符1,2,3,,,,,0uchardispbuf[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};uchardispbuf1[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};ucharv,v1;//按键次数累加变量uchari;voidinit();//voidchuli();//voidchuli1();//voiddelay(uchart);//voidclear();//voidset(ucharx);//voidset1(uchary);//ucharcommand;//ucharcount,count1;//ucharsecond,minite,second1,minite1;//unsignedinttt,tt1;//unsignedcharvalue1=50,value2=25,value3=15;//起始价,运行价,等待价unsignedintmoney;//金额变量//*******************************************voidmain(){init();lcd_init();while(1){key1(); chuli();display();if(jump_in==1){jump_in=0; lcd_init();while(1){key(); chuli1();display1(); if(jump_out==1) { lcd_init(); jump_out=0; clear(); break; }}}}}//*******************************************voidclear()//跳出下一次{TR0=0;TR1=0;money=0;second=0;second1=0;minite=0;minite1=0;value1=50;value2=25;value3=15;led_run=1;led_await=1;led_stop=1;v=0;v1=0;for(i=0;i<15;i++){dispbuf[i]=0;dispbuf1[i]=0;}}//*******************************************voidinit()//定时器初始化{TMOD=0x11;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;ET0=1;ET1=1;EA=1;TR0=0;TR1=0;}//*******************************************voidt0_(void)interrupt1using0//定时器0中断{count++;if(count==20){ count=0; second++; if(second==60) { second=0; minite++; if(minite==99) { minite=0; } } }TH0=(65536-50000)/256;TL0=(65536-50000)%256;dispbuf1[0]=minite/10;dispbuf1[1]=minite%10;dispbuf1[2]=second/10;dispbuf1[3]=second%10;}//*******************************************voidt1_(void)interrupt3using3//定时器1中断{count1++;if(count1==20){ count1=0; second1++; if(second1==60) { second1=0; minite1++; if(minite1==99) { minite1=0; } } }TH1=(65536-50000)/256;TL1=(65536-50000)%256;dispbuf1[4]=minite1/10;dispbuf1[5]=minite1%10;dispbuf1[6]=second1/10;dispbuf1[7]=second1%10;}//*******************************************voidlcd_init()//液晶初始化{wr_com(0x3c);wr_com(0x06);wr_com(0x0c);wr_com(0x01);}//*******************************************voidwr_com(ucharcommand)//液晶写命令{busy();rs=0;rw=0;P0=command;en=1;en=0;}//*******************************************voidwr_data(uchardata0)//液晶写数据{busy();rs=1;rw=0;P0=data0;en=1;en=0;}//*******************************************voidbusy()//液晶判忙{while(1){en=0;rs=0;rw=1;P0=0xff;en=1;if(b!=1)break;}en=0;}//*******************************************voidchuli()//数值处理{dispbuf[0]=value1/100%10;dispbuf[1]=value1/10%10;dispbuf[2]=value1%10;dispbuf[3]=value2/100%10;dispbuf[4]=value2/10%10;dispbuf[5]=value2%10;dispbuf[6]=value3/100%10;dispbuf[7]=value3/10%10;dispbuf[8]=value3%10;}//*******************************************voiddisplay(){set(0);printstring("step:");wr_data(table[dispbuf[0]]);wr_data(table[dispbuf[1]]);printstring(".");wr_data(table[dispbuf[2]]);set(16);printstring("mileage:");wr_data(table[dispbuf[3]]);wr_data(table[dispbuf[4]]);printstring(".");wr_data(table[dispbuf[5]]);set1(0);printstring("await:");wr_data(table[dispbuf[6]]);wr_data(table[dispbuf[7]]);printstring(".");wr_data(table[dispbuf[8]]);/*set1(16);printstring("run:");wr_data(table[dispbuf1[0]]);wr_data(table[dispbuf1[1]]);printstring(":");wr_data(table[dispbuf1[2]]);wr_data(table[dispbuf1[3]]);*/}//*******************************************voidchuli1(){if(f_start==1){tt=minite*60+second;//总时间tt1=minite1;//等待时间money=value1+value2*0.1*tt+value3*tt1;//起始价+每公里价*时间*速度+等待价*等待时间}elseif(f_start==0){money=0;}dispbuf1[8]=money/100%10;//dispbuf1[9]=money/10%10;//dispbuf1[10]=money%10;//}//*******************************************voiddisplay1(){set(0);printstring("run:");wr_data(table[dispbuf1[0]]);wr_data(table[dispbuf1[1]]);printstring(":");wr_data(table[dispbuf1[2]]);wr_data(table[dispbuf1[3]]);set(14);printstring("await:");wr_data(table[dispbuf1[4]]);wr_data(table[dispbuf1[5]]);printstring(":");wr_data(table[dispbuf1[6]]);wr_data(table[dispbuf1[7]]);set1(0);printstring("sumis:");wr_data(table[dispbuf1[8]]);wr_data(table[dispbuf1[9]]);printstring(".");wr_data(table[dispbuf1[10]]);}//*******************************************voidprintstring(uchar*s)//行字符函数{while(*s)wr_data(*s++);}//*******************************************voidkey(){if(K3==0){delay(50); if(K3==0) {while(K3==0); v1++; if(v1==4)v1=0; }}switch(v1){case1:f_start=1;TR0=1;TR1=0;led_run=0;led_await=1;led_stop=1;aa=1;bb=0;cc=1;break; case2:TR0=0;TR1=1;led_run=1;led_await=0;led_stop=1;aa=0;cc=0;break; case3:TR0=0;TR1=0;led_run=1;led_await=1;led_stop=0;break;}if(K4==0){delay(50); if(K4==0) { while(K4==0); jump_out=1; }}}//*******************************************voiddelay(uchart){while(--t);}//*******************************************voidset(ucharx){command=0x80+x;wr_com(command);}//*******************************************voidset1(uchary){command=0xc0+y;wr_com(command);}//*******************************************voidkey1(){if(K==0){ delay(100); if(K==0) { while(K==0); v++; if(v==4)v=0; }}switch(v){ case 0:break;case1:if(K1==0){while(K1==0);value1=value1+10;}break;//起步价加10 case 2:if(K1==0){while(K1==0);value2=value2+5;}break;//单价加5 case3:if(K1==0){while(K1==0);value3=value3+5;}break;//停止加5}if(K2==0){delay(50);if(K2==0){while(K2==0);jump_in=1;//}}}#include<reg51.h>//头文件#include<intrins.h>typedefunsignedcharuchar;//定义一个无符号的字符型的简写codeuchartab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};bitflag=0;//定义标量初值为零floaty;//定义一个浮点型的全局常量floaty1;floatcount_price=0; //定义一个浮点型的全局变量inta; //定义两个无符号的全局变量floats; //定义一个浮点型的全局变量#definetime_num100//宏定义时间为100ussbitCLK=P3^5;//DS1302的时钟控制线sbitDAT=P3^6;//DS1302的数据线sbitRST=P3^7;//DS1302的复位信号#definedelay_time60//宏定义时间为60ussbitSCL=P3^6;//24c02的时钟控制线sbitSDA=P3^7;//24c02的数据线sbits2=P2^1;//时间设置开关sbits1=P3^3;//日期设置开关sbits3=P2^2;//数据加/日期时间显示方式设置sbits4=P2^3;//********************************************************voidEX_INT0(void)interrupt0//外部中断0函数{staticucharnum;ucharmybyte;Write_One_Byte(0x20,0xb0);//设定单价存入缓冲器 _nop_(); _nop_(); mybyte=Read_One_Byte(0x20);//上电保护 num++;//一个计数器自增1 IT0=1;//边沿触发方式 if(num==10)//判断是否有10个脉冲 { num=0;//清零 count_price++;//另一个计数器计数if(count_price<=4)//不足40个脉冲 {s=s+0.5;//

温馨提示

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

评论

0/150

提交评论