《基于单片机的出租车计价器设计报告(39页).doc》由会员分享,可在线阅读,更多相关《基于单片机的出租车计价器设计报告(39页).doc(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-基于单片机的出租车计价器设计报告-第 38 页河南理工大学单片机应用与仿真训练设计报告出租车计价器设计姓名学号: 专业班级: 指导老师: 所在学院: 2012年6月25日摘要本设计用直流电机转动模拟出租车车轮转动,实现出租车多功能的计价功能。设计采用AT89S52单片机为主控芯片,用光电对管检测电机转盘转速,采用24C02芯片为系统在掉电时路程、钱数等重要信息提供存储保护,采用两个四位8段共阴数码管显示里程、总价格和等待时间等信息。本设计可以实现单双程设置、系统暂停、空车指示、信息显示、掉电保护等功能。出租车计价是根据车所行驶的路程以及乘客乘车的方式综合决定的。出租车行驶总路程可以通过车轮的
2、周长乘车轮旋转圈数得到。即可计算得到车轮旋转几周出租车能行驶一公里的路程。使用光电对管能方便地计量车轮旋转的圈数,输出的脉冲信号被接入到AT89S52单片机系统中,通过计算接收到的脉冲个数,计算出当前所行驶的路程,并且可以计算实时的速度。与此同时,根据不同的收费标准计算收费。通过键盘能够实现往返设置,启动、暂停、停止计价器、设置单返程等。关键字:出租车计价器,AT89S52,24C02,光电对管AbstractThis design with DC motor to rotate the analog taxi wheels turning, multi-purpose taxi pricin
3、g function. Design using AT89S52 MCU for master chip with a photoelectric tube test motor turntable speed, AT24C02 chip to make the system power-down distance, money and other important information on the storage protection, the use of two four-segment common cathode digital display tube mileage, th
4、e total price and waiting time information. This design enables single and double-way set, system halted, empty instructions, information display, power-down protection and other functions.The taxi meter according to the distance traveled by the vehicle and passengers ride the decision. Taxi driving
5、 the total distance by the circumference of the wheel drive wheel rotation laps. Can be calculated by the wheel rotation a few weeks a taxi to travel one kilometer away. The use of opto-the number of turns of the tube can be easily measured wheel rotation, the output pulse signal is connected to the
6、 microcontroller AT89S52 system, calculated by computing the number of pulses received, the current driving distance, and can calculate the real-time speed . At the same time, the charge will be calculated according to the different charges. Able to achieve a round trip via the keyboard settings, st
7、art, pause, stop the meter, set the single return.Key words: Meter, AT89S52,AT24C02,Photoelectric tube目录1 概述12 系统总体方案及硬件设计22.1系统总体方案22.2 硬件电路设计单元22.2.1 电源电路单元22.2.2 系统控制单元32.2.3 驱动电路单元62.2.4 信号检测单元72.2.5 显示单元82.2.6 数据存储单元93 软件设计103.1 软件设计流程图103.2 计算模块113.3 键盘扫描113.4 显示程序113.5 PWM波的生成113.6 速度检测123.7
8、程序源代码124 Proteus软件仿真135 课程设计体会146 主要参考文献16致谢17附1 程序源代码18附2 系统原理图331 概述出租车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志。它关系着交易双方的利益,具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。因此,汽车计价器的研究也是十分有应用价值和现实意义的。出租车计价是根据车所行驶的路程以及乘客乘车的方式综合决定的。出租车行驶总路程可以通过车轮的周长乘车轮旋转圈数得到。即可计算得到车轮旋转几周出租车能行驶一公里的路程。使用霍尔传感器方便地计量车轮旋转的圈数。输出的脉冲信号被接入到AT89S52
9、单片机系统中,通过计算接收到的脉冲个数,计算出当前所行驶的路程,并且可以计算实时的速度,在速度低于5公里每小时是进入等待计费。于此同时,根据不同的收费标准,通过选择相应的起步价、单价等收费标准进行计算。通过键盘能够实现往返设置,启动、暂停、停止计价器以及切换显示当前的行驶里程和需支付的车费。本设计硬件电路分为六个单元:电源电路单元,系统控制单元,驱动电路单元,信号检测单元,显示单元和数据存储单元。软件系统分为五个大的模块为:总初始化模块,按键扫描模块,中断与定时模块,数据计算模块,数码管显示模块。其中,键盘扫描和数码管显示采用查询方式,转速信号接收与等待记时采用中断方式。这些软硬件系统构成了最
10、终的设计。2 系统总体方案及硬件设计2.1系统总体方案本设计以AT89S52单片机为中央控制芯片,通过按键控制实现计价器的启动、停止、暂停、等待时间显示、单返程等功能;因为单片机的I/O无法直接驱动直流电机转动,所以通过L298N为驱动芯片驱动电路来驱动直流电机转动;通过光电对管检测直流电机的转速,并利用电压比较器将整理后的信号送给给单片机;通过数码管来显示里程、总价格、等待时间等信息;通过AT24C02来存储信息,防止系统掉电信息丢失。系统设计总框图,如图2.1所示。图2.1系统设计总框图2.2 硬件电路设计单元本设计硬件电路分为六个单元:电源电路单元,系统控制单元,驱动电路单元,信号检测单
11、元,显示单元和数据存储单元。2.2.1 电源电路单元 电源是由7805芯片,变压器和整流桥组成的一个5V稳压电源。变压器将220V交流电转变为12V交流电,经过整流桥和滤波电容后变为直流,经过7805芯片后输出5V稳压电源。电源电路原理图,如图2.2所示。图2.2电源电路原理图2.2.2 系统控制单元系统控制单元主要有单片机最小系统和独立按键组成。2.2.2.1 单片机最小系统单片机采用了Atmel 公司生产的 AT89S52单片机,它含有256 字节数据存储器,内置8K 的电可擦除FLASH ROM,可重复编程,大小满足主控机软件系统设计。AT89S52芯片的主要引脚功能分别为:VCC 电源
12、电压。GND 接地。RST 复位输入。当RST变为高电平并保持2个机器周期时,将使单片机复位。WDT溢出将使该引脚输出高电平,设置SFR AUXR的DISRTO位(地址8EH)可打开或关闭该功能。DISKRTO位缺省为RESET输出高电平打开状态。ALE/PROG: 当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH
13、地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。XTAL1 反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2 来自反向振荡放大器的输出。P0口:一组8位漏极开路型双向I/O口。也即地址/数据总线复用口。作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。P
14、1口:一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。Flash编程和程序校验期间,P1接收低8位地址。P2口:一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。在访问外部程序存储器或16位地址的外部数据存
15、储器时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器时,P2口线上的内容在整个访问期间不改变。Flash编程和程序校验期间,P2亦接收低8位地址。P3口:一个带内部上拉电阻的8位双向I/O口。P3的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写“1”时,它们被内部的上拉电阻把拉到高电并可作输入端口。作输入端口使用时,被外部拉低的P3口将用上拉电阻输出电流。P3口除了作为一般的I/O口线外,还作特殊功能口。P3口的第二功能引脚分配如下:P3.0:RXD,串行通信输入。P3.1:TXD,串行通信输出。P3.2:INT0,外部中断0输入。P3.3:INT1,外部中断1
16、输入。P3.4:T0,计时计数器0输入。P3.5:T1,计时计数器1输入。P3.6:WR:外部数据存储器的写入信号。P3.7:RD,外部数据存储器的读取信号。单片机最小系统原理图,如图2.3所示。图2.3 单片机最小系统原理图2.2.2.2 独立按键本设计按照功能要求设置了六个按键。按键接线图,如图2.4所示。按键功能分别为:key0:系统启动,用来启动计价器,使计价器开始工作; key1:系统停止/复位,用来关闭计价器,是计价器停止工作并复位;key2:单程双程,用来设置是单程计费还是往返计费;key3:系统暂停,用来将整个计费系统暂停; key4:等待时间显示,当按下不放时 图2.4按键接
17、线图数码管为显示等待的时间。 Key5:调速按钮,用来调整电机的转速,使测试时可控制电机转速。 2.2.3 驱动电路单元LM298N是SGS公司的产品,内部包含4通道逻辑驱动电路。是一种二相和四相电机的专用驱动器,即内含二个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A一下的电机。LM298N的管脚图,如图2.5所示。通过单片机的I/O输入改变芯片控制端的电平,即可以对电机进行正反转,停止的操作,LM298N的逻辑功能表,如图2.6所示。图2.5 LM298N的管脚图 图2.6 LM298N的逻辑功能表LM298N有两路电源分别为逻辑电源和动力电源,图中6V为
18、逻辑电源,12V为动力电源。J4接入逻辑电源,J6接入动力电源,J1与J2分别为单片机控制两个电机的输入端,J3与J5分别与两个电极的正负极相连。ENA与ENB直接接入AVR单片机的PWM输出口;控制电机的正反转通过J1与J2两个接口,控制电机的转速的通过ENA和ENB的口输入的PWM波的占空比。由于我们使用的电机是线圈式的,在从运行状态突然转换到停止状态和从顺时针状态突然转换到逆时针状态时会形成很大的反向电流,在电路中加入二极管的作用就是在产生反向电流的时候进行泄流,保护芯片的安全。LM298N电机驱动原理图,如图2.7所示。图2.7 LM298N电机驱动原理图2.2.4 信号检测单元 电机
19、转速的检测模块是由对射式光电传感器及其配套电路组成的,对射式光电传感器原理图,如图2.8所示。对射式光电传感器由红外发光二极管与光敏三极管组成,主要检测发射管与接收管之间有无物体存在。如上图所示,当发射管与接收管之间没有物体存在时,光敏三极管接收到红外光后导通,out输出低电平;当发射管与接收管之间有物体存在时,光敏三极管无法接收到足够的强的红外光所以截止,out输出高电平。但是上述电路存在缺陷,当直流电机高速旋转时,out输出的信号就容易失真,很难被单片机检测识别。为了能够让单片机准确识别光电传感器输出地信号,需在传感器的输出端连接一个比较器。电压比较器可以看作是放大倍数接近“无穷大”的运算
20、放大器。电压比较器的功能:比较两个电压的大小 用输出电压的高或低电平,表示两个输入电压的大小关系 :当”输入端电压高于”输入端时,电压比较器输出为高电平;当”输入端电压低于”输入端时,电压比较器输出为低电平。LM393是双电压比较器集成电路 图2.8对射式光电传感器原理图 图2.9 LM393引脚图速度检测电路原理图,如图2.10所示。由原理图可知, 当发射管与接收管之间没有物体存在时,光敏三极管接收到红外光后导通,out输出高电平;当发射管与接收管之间有物体存在时,光敏三极管无法接收到足够的强的红外光所以截止,out输出低电平。经过整理后的电路能输出比较标准的高低电平信号,很容易被单片机识别
21、。图2.10 速度检测电路原理图2.2.5 显示单元2.2.5.1 数码管显示 显示单元采用两个四位8段数码管显示信息,一组显示金额,另一组显示路程配合按键来切换显示。用锁存器来驱动数码管显示,数据位连接单片机P0口,片选端和段选端分别用单片机的P2.6和P2.7端口。如图2.11所示为数码管显示接线图。图2.11 数码管显示接线图2.2.5.1 LED指示灯本设计按照功能要求设置了五个LED灯。接线图如图2.12所示。各个LED灯的功能分别为:DS0:等待指示灯,车速小于5Km/h时指示灯亮;DS1:暂停指示灯,当暂停键按下,计价器暂停计价时亮;DS2:空车指示,当计价器停止工作也就是空车时
22、,此指示灯亮;DS3:启动指示灯,当按下启动键,计价器开始计价时亮;DS4:单双程指示灯,默认为单程,当选 图2.12 LED指示灯接线图择双程时亮。 2.2.6 数据存储单元本设计使用了24C02作为外部存储芯片。24C02是串行2K的EEPROM,是基于I2C-BUS 的存储器件,遵循二线制协议,具有接口方便,体积小,数据掉电不丢失等特点。计价器能将里程和总价格实时的存储到24C02中,当计价器因掉电停止工作,24C02会存储掉电前一刻的数据,使系统从新上电时能够恢复里程和总价格。当计价器是被手动正常停止时,将会对24C02相应的地址写0,以使下次启动时,计价器从初始化数据开始计价。24C
23、02的接线图,如图2.13所示。图2.13 24C02的接线图3 软件设计3.1 软件设计流程图软件系统可以大致分为几个大的模块为:初始化模块,按键扫描模块,中断与定时模块,数据计算模块,数码管显示模块,IIC总线通信模块等。其中,键盘扫描和数码管显示采用查询方式,转速信号接收采用中断方式。软件设计流程图,如图3.1所示。图3.1 软件设计流程图3.2 计算模块计算程序根据里程数分别进入不同的计算公式。如果里程大于3公里,则执行公式:总金额 起步价+(里程-3)*单价+等待时间*等待单价;否则,执行公式:总金额 起步价+等待时间*等待单价。对于速度的判断及等待时间的记录采用定时器零中断,设定1
24、0ms一个中断,然后判断车速,小于5公里/小时时,则开始记录等待时间。3.3 键盘扫描键盘扫描才用查询方式,当有按键按下时就对相应的标志进行取反,或调用其他子函数,在消抖过程中,这里将数码管显示程序潜入以保证显示的稳定。3.4 显示程序显示程序利用主函数内的循环,实现动态扫描显示,同时根据数码管余辉和人眼暂留现象,即可实现显示3.5 PWM波的生成 在AT89系列单片机中,由于没有PWM控制器,要输出PWM信号就需通过软件的方式在I/O口上模拟PWM的输出。PWM软件设计一般可以利用软件延时的方式或利用单片机内部的定时器/计数器作为时钟信号。本设计是利用软件延时获得PWM信号的,在软件中设计一
25、个基准的软件延时程序,通过反复调用这个延时程序,从而获得不同的时间长度,为了电机速度稳定,我们选择使用同周期,不同占空比的PWM进行调速。若频率为1kHZ,则每个方波的周期为1ms,占空比从0变化到100%,最小的变化量为10%,即高电平维持时间的最小值是100us,所以只要设计出100us的延时程序作为基准即可。具体程序如下:#define uchar unsigned charsbit PWM P34; /定义PWM输出口为P3.4void PWMout uchar q /生成同周期的PWM波PWM 1;delay q ;PWM 0;delay 10-q ;void delay uchar
26、 a /100us延时函数uchar b;for ;a 0;a- for b 29;b 0;b- _nop_ ;_nop_ ; 3.6 速度检测经检测模块得到的信号输入到单片机内,因为输入的是低电平信号,所以我把信号输入到了中断0端口,每接收一个低电平信号程序就会进入中断函数里面,中断0函数如下: void int0 interrupt 0sudu+;这样就完成了速度测量。3.7 程序源代码程序源代码见附录2。4 Proteus软件仿真将整个系统原理图在Proteus连接好后,下载如编写好的程序仿真如下:如图4.1显示的状态设置为:单程,车速大于5km/h,当路程等于40.4km时的显示情况。
27、图4.1 Proteus软件仿真图5 课程设计体会本次单片机课程设计,我们选的题目是出租车计价器的设计。通过仿真、焊接、调试等不断的努力,我们的出租车计价器实现了基本要求的全部功能和发挥部分的部分功能。比如能显示里程、金额数、总等待时间,可设定单程价格和双程价格,按暂停键,计价器可暂停计价,按查询键,可显示总等待时间,空车指示、信息存储等。经过这些天有关于出租车计价器的课程设计,使我们对MCS-51系列单片机的应用有了更深的了解。从前的学习过程过于浮浅,只是流于表面的理解,而现在要做课程设计,就不得不要求我们对所用到的知识有更深层次的理解。因为课程设计的内容比及书本中的理论知识而言,更接近于现
28、实生活,而理论到实践的转化往往是一个艰难的过程,它犹如一只拦路虎,横更在我们的面前。但是我们毫不畏惧,因为我们相信我们能行。事情并不总是一帆风顺的,我们总会遇到困难和险阻。在此次课程设计的过程中,我们碰到了许多的问题。比如,对于数码管动态扫描显示和键盘的延时防抖的综合编程不能较好地解决;对于代码的前后顺序及调用掌握得还不够好;对于一些相关的应用软件 KEIL、PROTEUS、Altium esigner 没能熟练掌握。当然,问题并不可怕,只要我们怀着一颗不服输的心,勇往直前,那么胜利将不会离我们太远。通过上网查找资料、与同学老师交流、小组成员间的讨论、不断实践与探索,我们总能找到解决问题的方法
29、,最后得到良好的效果。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。总之,本次课程设计让我们更加深刻的掌握了MCS-51系列单片机的工作原理和编程语言,更加熟练的掌握了KEIL、PROTEUS、Altium designer等专业软件的使用,熟悉了产品开发的大致流程,深刻的体会到了团队协作精神的重要性,培养了我们发现问题、独立思考问题、多种途径解决问题的
30、能力,锻炼并提高了了我们的动手实践能力和理论与实践相结合的能力。我以后做一个动手能力强的大学生。.致谢在课程设计即将完成之际,我想向给予我帮助和支持的人表示衷心的感谢!感谢高老师和王老师给我们提供这次难得的课程设计机会,让我们有机会把理论得以应用到实践上。感谢我们的指导老师王莉,课程设计是在老师的亲切关怀和悉心指导下完成的。严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。老师不仅在学业上给我以精心指导,同时还在思想、上给我以无微不至的关怀,在此谨向老师致以诚挚的谢意和崇高的敬意。我还要感谢在一起愉快的度过的同学们,正是由于你们的帮助和支持,我才能克服一个一个的困难和疑
31、惑,直至本文的顺利完成。最后,再次对关心、帮助我的老师和同学表示衷心地感谢!#include /头文件#include #include /IIC总线通信#include /数码管显示#define uint unsigned int#define uchar unsigned charsbit key0 P10; /启动sbit key1 P11; /停止sbit key2 P12; /单返程sbit key3 P13; /暂停sbit key4 P14; /显示等待时间sbit key5 P15; /调速sbit led0 P22; /暂停指示灯sbit led1 P23; /空车指示灯s
32、bit led2 P24; /启动指示灯sbit led3 P25; /双程指示灯sbit led4 P21; /等待指示灯sbit PWM P34; /PWM输出口uchar sudu,sudu0,shi,fen,miao,shi0 12,fen0 30,miao0;uchar danfanflag 0,flag 0,speedflag 1,stopflag 0;uint licheng 0,maichong,r 0,money 0;uint t,t1,t2;uchar num1,num2,num3,num4,lichenga,lichengb,moneya,moneyb;long lich
33、eng0;void init0 ; /系统初始化函数void delay uint a ; /延时函数void PWMout uchar q ; /PWM产生函数void anjian ; /按键扫描函数void jisuan ; /路程、价钱计算函数void chuli ;void main num1 read_add 25 ;num2 read_add 26 ; delay 5 licheng num1*100+num2;licheng0 150*licheng-300*fen;init0 ;while 1 anjian ; chuli ; lichenga licheng/100; li
34、chengb licheng%100; write_add 25,lichenga ; delay 5 ; write_add 26,lichengb ;void init0 /初始化TH0 0x3c; TL0 0xb0;EA 1;TMOD 0x01;EX0 0;IT0 1;ET0 1;TR0 1;P0 0xff;P1 0xff;P2 0xff;P3 0xfe;void chuli if speedflag 1 PWMout 12 ; else if speedflag 2 PWMout 20 ; else PWMout 6 ; if flag 1 led2 0; led3 1; jisuan
35、 ; if key4 0 display0 shi,fen,miao ; else display licheng,money ; if flag 2 led2 0; led3 1; display 1,2 ; if flag 0 display0 shi0,fen0,miao0 ; led3 0; led2 1; if danfanflag 1 led1 0; if danfanflag 0 led1 1; if stopflag 1 led0 0; else led0 1;void jisuan r maichong;licheng0+ r;licheng licheng0/150+ fe
36、n/5 *10;sudu0+ r;maichong 0;if t2 10 t2 0;sudu sudu0;sudu0 0;if licheng 30 money 50;elseif danfanflag 1 money 50+1.5* licheng-30 ;else money 50+2* licheng-30 ;void anjian if key0 0 EX0 1;flag 1;stopflag 0;if key1 0 EX0 0; maichong 0;licheng0 0; licheng 0; flag 0;shi 0;fen 0;miao 0; write_add 25,0 ;
37、delay 5 ; write_add 26,0 ;if key2 0 delay 5 ;if key2 0 if flag 1 danfanflag+;if danfanflag 2 danfanflag 0;while !key2 ;delay 5 ;while !key2 ;if key3 0 if flag 1 EX0 0;stopflag 1;if key5 0 delay 5 ;if key5 0 speedflag+;if speedflag 3 speedflag 0;while !key5 ;delay 5 ;while !key5 ;void int0 interrupt
38、0/检测与计数maichong+;void timer0 interrupt 1 /定时器50msTH0 0x3c; TL0 0xb0;t+;t1+;t2+;if t1 20 t1 0;miao0+;if miao0 60 miao0 0;fen0+;if fen0 60 fen0 0;shi0+;if shi0 24 shi0 0; if sudu 50&flag 1&stopflag 0 led4 0;if t 20 t 0;miao+;if miao 60 miao 0;fen+;if fen 60 fen 0;shi+;if shi 24 shi 0; else led4 1;void
39、 PWMout uchar q /生成PWM波PWM 1;delay q ;PWM 0;delay 20-q ;IIC.h IIC通信#define uint unsigned int#define uchar unsigned charsbit sda P16;sbit scl P17;void delay0 void start sda 1;delay0 ;scl 1;delay0 ;sda 0;delay0 ;void stop sda 0;delay0 ;scl 1;delay0 ;sda 1;delay0 ;void respons uchar i;scl 1;delay0 ;whi
40、le sda 1 & i 250 i+;scl 0;delay0 ;void init sda 1;scl 1;void write_byte uchar date uchar i,temp;temp date;scl 0;delay0 ;for i 0;i 8;i+ temp temp 1;sda CY;delay0 ;scl 1;delay0 ;scl 0;delay0 ;sda 1;delay0 ;uchar read_byte uchar i,j,k;scl 0;delay0 ;sda 1;delay0 ;for i 0;i 8;i+ scl 1;delay0 ;j sda;k k 1
41、 |j;scl 0;delay0 ;return k;void write_add uchar address,uchar date start ;write_byte 0xa0 ; /器件地址;respons ;write_byte address ; /存储器地址;respons ;write_byte date ; /写数据respons ;stop ;uchar read_add uchar address uchar date;start ;write_byte 0xa0 ;respons ;write_byte address ;respons ;start ;write_byte
42、 0xa1 ;respons ;date read_byte ;stop ;return date;display.h 数码管显示#define uint unsigned int#define uchar unsigned charsbit dula P27; /定义段选端口sbit wela P26; /定义位选端口uchar code table /数码管编码0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 ;void delay uint c /延时100usuint a,b;for a c;a 0;a- for b 40;b 0;b- ;void display uint shu,uint shu1 /显示函数 uchar qian,bai,shi,ge,qian1,bai1,shi1,ge1;qian shu/1000;bai sh