1、2014届毕业生毕业设计说明书题目:基于89C52的免烧砖配料控制系统设计 院系名称:电气工程学院 专业班级: 自动1002 学生姓名: 学 号: 201046820422 指导教师: 教师职称: 2014年 5月 22日目 录1概述31.1研究背景31.2 任务要求32 方案论证42.1 配料控制系统方案42.2 方案设计43 硬件电路设计63.1晶振与复位电路63.2 传感器73.3 放大电路与AD转换电路83.4 配方存储器件103.5 继电器电路113.6 电源电路123.7 按键123.8 显示电路134 系统软件设计154.1 系统主程序流程图154.2 按键的扫描174.3 EE
2、PROM的操作174.4 A/D转换的处理194.5 显示电路20总 结23致 谢24参考文献25附录A 原理图26附录B 程序27411概述1.1研究背景配料控制系统在目前的工业生产中占据了举足轻重的位置, 由于半导体技术的发展配料控制系统由原来的纯人工操作发展到后来的通过机械以及人工进行半自动控制,随着可编程电子逻辑器件的不断发展,现在的配料控制系统已经逐步采用以微控制器为核心的自动化智能化控制系统,拥有良好的人机界面,便于操作和修改,可靠性能和生产效率大大提高。1.2 任务要求本课题是对物料称重的研究,我们要在系统称量误差上,便于维护、效率上,改变物料配方的操作上,自动化程度上,能耗上,
3、造价上等兼顾。因此,配料控制系统要达到以下要求:本设计属于对不同的配料按照配方的要求进行精确称量的控制系统。尤其是配方的可变性和可修改性。本设计中开发的基于MCU的控制器最新技术,实现物料的称量,配方的替换,系统的启停控制等功能。本设计是一种物料称重系统,在料仓的下方有送料皮带,控制送料的量,皮带下方是称量料斗,物料送入后由重力传感器检测出物料的重量信息并通过放大器,A/D转换后送入MCU中,当MCU检测到物料达到配方要求时,控制停止送料皮带电机,停止送料,并开始下一物料的称量,当所有物料称量完成后启动称量料斗电机转移物料至混合料斗。MCU通过继电器来控制电机的工作状态,电机带动机械装置来控制
4、送料的多少,人机交互界面由键盘和液晶显示电路来实现。2 方案论证 本章先通过对总体方案,传感器、电压放大电路,信号处理方法,人机交互方法,软件的编译环境及其选用的语言等技术方面进行了对比论证和选择,然后提出配料控制系统的主要技术指标,最后确定了配料控制系统的总体设计方案。2.1 配料控制系统方案早期的配料控制系统基本由人工进行操作和控制,精度和快速性都要依靠人工的熟练操作程度,因此系统难以长时间保持高效率的工作,而且因为工作环境的恶劣对工作人员的身心健康有很大的不利的影响。因此这种方法现在已经基本被各个厂家淘汰。随着电子技术、传感技术、计算机技术以及智能控制理论的发展,工业生产过程中对配料的精
5、度、安全、稳定、自动化程度都提出了新的要求。配料控制也有人工控制转向电子自动控制,通过传感器,放大电路,微控制器等电子设备组成自动控制系统,大大提高了配料精确度和生产效率。通过对比,本系统采用第二种设计方案,即以传感器、信号处理电路、微处理器等电子器件构成的自动控制系统。2.2 方案设计配料控制系统实物图如图2-1所示:图2-1配料控制系统实物图上方三个料斗分别为不同物料的存放料斗,料斗下方有一个传送带,最下方的料斗为混合料斗,混合料斗下方的传送带上装有压力传感器,开始工作时,电机带动存放料斗的物料传送皮带将物料下泄到下方的混合料斗中,压力传感器实时检测物料重量并将数据传送给单片机,单片机根据
6、设定好的配方比来确定是否停止送料,当该物料达到配方要求值时控制皮带电机停转,停止送料,并启动下一物料皮带电机开始下一物料的送料,等所有物料按配方要求送到混合料斗时,单片机控制皮带电机将混合料斗物料送给混合搅拌机;并开始准备下一轮送料过程,整个送料过程的实时物料重量数据及其当前的配方序号显示在液晶上,物料配方可通过键盘进行更改。根据以上工作过程,配料控制系统总体框图如图2-2所示: 图2-2 配料控制系统总体框图 由系统总体框图可以看出由四个压力传感器T105组成的电阻桥经过电压放大24位A/D转换芯片HX711-BF芯片进行信号处理后送入微控制器AT89C52单片机中进行运算,单片机将处理的实
7、时过程和结果送到12864液晶显示同时控制继电器的吸合和断开。键盘负责命令数据的输入。3 硬件电路设计3.1晶振与复位电路该配料控制系统要求实现对传感器电压信号的采集,放大,A/D转换并交由单片机进行数据处理,从而通过继电器来控制电机达到控制物料重量的目的。结构并不十分复杂,因此可选用STC公司的8位微处理器单元89C52RC40I-PDIP。该单片机最高工作频率可达40MHZ,片内程序存储空间为512字节;程序存储空间为8K字节;工作电压为5.5V3.8V。单片机复位电路如图3-1所示:图3-1 单片机复位电路复位电路的作用是对单片机进行系统的初始化,确保单片机开始正常工作前所有工作部件都保
8、持在设置的默认状态下。51单片机的复位要求是:RST保持两个机器周期以上的高电平时自动复位。 因为考虑到芯片刚刚上电时由于供电不稳定而做出错误的计算,所以增加一个上电复位以达到延时启动CPU的目的,使芯片能够正常工作。当单片机电源电路开始供电时S0未按下,此时REST因为R15的存在保持高电平状态(保持时间大于两个机器周期)。然后10uF电容开始充电,充电完成后REST恢复为低电平,复位工作完成,单片机开始正常运行。当S0按下时REST为高电平状态(时间大于两个机器周期),松开时又恢复低电平状态,手动复位工作完成。单片机晶振电路如图3-2所示:图3-2 单片机晶振电路晶振电路用来给单片机提供精
9、确的时钟频率,单片机的时钟频率就如一首歌的节拍一样,所有运行在单片机里的指令要按照时钟频率来一步步执行,否则就会出错。容量为30pF电容C1,C2的两端分别接晶振的一段并和GND相连。其作用是消除单片机外部晶振与单片机直接相连时产生偕波,保持晶振电路的可靠性和稳定性的要求。3.2 传感器本设计为配料控制系统,考虑到工作环境的恶劣多变性,要求压力传感器具有较大的量程,以及比较精确的灵敏度要求,能够很好的适应不同温度下的工作环境,其非线性和重复性以及抑制温漂的能力要强。但鉴于市场上高性能的完全符合要求压力传感器价格较为昂贵。在这里我选择TI公司的半桥式压力传感器T105,量程为50kg,灵敏度1.
10、10.15mv/v,输入电阻10005,推荐激励电压510V,工作温度范围-10+50,尺寸规格34*34*7.8mm。同时为了提高量程,将四个传感器组成电阻桥形式,将单片机电源+5V做激励电压,能实现基本功能。硬件接线图如图3-3所示:图3-3 T105压力传感器接线图其中E+,E-两个引线分别直接接HX711-BF输入端电源正负极,A+,A-引线为差分电压信号,直接接HX711-BF输入端A信号正负极。3.3 放大电路与AD转换电路传感器选择T105,满量程输出=激励电压(5V)*灵敏度(1.1mv/v)=5.5mv由于输出电压较小,不能直接驱动单片机I/O口,因此要对电压进行放大处理,放
11、大过后的电压要转换为数字量才能输送给单片机处理。鉴于以上考虑,我采用海芯科技公司专为高精度电子称设计的24位A/D转换器芯片HX711-BF,片内集成低噪声可编程放大器,通过软件可选择不同增益。HX711芯片内集成了包括稳压电源,片内时钟振荡器等外围电路,也可通过管脚控制选择使用外部时钟电路。控制信号由数据时钟管脚来直接实现,无需对内部寄存器编程,增益可选择128或64,对应满额度差分输入信号幅值分别为20mv,40mv。上电自动复位功能简化了开机初始化过程。工作电压范围2.65.5V,工作温度范围-40+85。HX711-BF实物图如图3-4所示:图3-4 HX711-BF实物图HX711-
12、BF接线原理图如图3-5所示:图3-5 HX711-BF接线原理HX711 芯片内的稳压电路可同时向A/D 转换器和外部传感器提供模拟电源。稳压电源的供电电压(VSUP)和与数字电(DVDD)通过C6滤波电容接VCC。将管脚X1接GND,HX711将自动选择使用片内的时钟振荡器,并自动关闭外部时钟和晶振相关电路。E+,E-接压力传感器的电源端,在这里,E+通过三极管Q2接到电源VCC上,由BASE控制,E-直接接GND。信号通道有两个即A通道和B通道(未标出),A通道由A+,A-组成分别接到HX711的INA+,INA-端。C4为A通道滤波电容,R10为限流电阻。串口通讯由管脚PD_SCK和D
13、OUT组成,用来输入数据,选择输入通道和增益。本次设计中选择A通道128倍信号增益,可将压力传感器电桥T105输出的5.5V电压放大128倍(通过软件实现),然后采样输出24bitAD转换值,单片机通过时序将24bit数据读出。传感器供电电压计算:应变片电阻桥的供电电压(E+,E-)由HX711-BF提供即AVDD和AGND。其中电压V(AVDD)=VBG(R1+R2)/R2计算,VBG为模块基准电压1.265V。R1选用阻值为20K的电阻;R2选用阻值为20K的电阻。因此计算得V(AVDD)=4.35V。即传感器供电电压为4.35V。在。4.35V供电电压下200KG的传感器最大输出电压是4
14、.35v*1.1mv/v=4.785mv。经过128倍放大后最大电压为4.785mv*128=612.48mv。经过A/D转换后输出的24bit数字值最大为:612.48*224/4.35v=2362232。再交由程序处理数据。3.4 配方存储器件为了实现配方的保存,采用掉电后数据不丢失的存储芯片EEPROM,由于配方所占的存储空间并不大,我采用ATMEL公司的EEPROM产品AT24C02A,工作电压为1.8V5.5V,具有256*8(2K bits)的存储空间,直流输出5.0MA,采用两线串行接口,完全兼容IIC总线。AT24C02原理接线图如图3-6所示:图3-6 AT24C02原理接线
15、图A0,A1,A2引脚为器件的地址输入引脚器件地址为0x1010 A2A1A0(R/W),用于单片机对器件的寻址操作,由于系统只用一片AT24C02A芯片,为了简便操作在这里将地址选择引脚全部接地,地址为0x1010 000(R/W),SDA是串行数据输入输出引脚,负责与单片机进行数据交换,SCK是串行时钟输入引脚,由单片机来控制时钟的输入来保证数据的输入正常。SDA,SCK通过两个阻值为10K的电阻与VCC相连,默认保持为高电平。WP引脚为写保护引脚,WP引脚接高电平时AT24C02允许单片机进行读写操作;WP接VCC时,使能写保护,芯片的高半存储阵列只能读不能写。由于要对EEPROM进行读
16、写,为了方便起见将WP直接接GND。3.5 继电器电路继电器采用汇科的HK4100F-DC24V-SHG,触点负载3A 250V AC/30V DC,工作温度:-25+70阻值(士10%): 2880线圈功耗:0.2W 额定电压:DC24V吸合电压:DC 18V释放电压:DC2.4V,线圈与触点间耐压:4000VAC/1分钟触点与触点间耐压:750VAC/1分钟。 由于继电器吸合电压为18V,超出了89C52单片机直接的驱动范围,因此需要加一个ULN2003功率驱动电路芯片来保证继电器的正常工作。驱动电路原理图如图3-7所示:图3-7 驱动电路原理图驱动芯片由输出端,输入端和两个公共端口组成,
17、COM1端口接GND,COM1端口接VCC, IN1IN5为芯片的输入端,直接接单片机的P23P26口驱动芯片的输出口直接接继电器。继电器接线图如图3-8所示:图3-8 继电器接线图继电器线圈一端直接与VCC相连,另一端并联一个1K的电阻与功率驱动电路芯片ULN2003输出端相连。当P22为高电平时RL1线圈不通电,继电器断开,P22为低电平时,RL1线圈通电继电器吸合。3.6 电源电路系统电源电路如图3-9所示:图3-9 系统电源电路直接采用直流适配器供电,供电电压为7.5V12V,作为稳压电源模块采用仙童半导体公司的LM7805芯片。DC7.5-12V经过7805的IN端口输入,同时并联一
18、个容量为0.1uF的滤波电容。此电压经过7805的稳压和C12电容的滤波作用后形成一个比较稳定的电压信号。C104作用是消减7805自激振荡副作用。3.7 按键按键电路如图3-10所示:图3-10 按键电路S1S9按键代表数字09;S10代表“确定”;S11代表“取消”;S12代表“修改”;S13代表“+”;S14代表“-”S15代表“开始”。按键电路负责系统的启动,停止;当前物料配方的选择,物料配方的改变。为了节省单片机I/O口的占用,16个按键采用4*4矩阵方式连接成,横向四个引线分别接单片机P30,P31,CSDA,INT1口,竖排引线接单片机LCDEN,RS,WR,RD端口。按键品牌:
19、海飞TS037;规格:6*6mm直插式3.8 显示电路12864液晶显示电路实物图如图3-11:图3-11 12864实物图JM12864M汉字图形点阵液晶显示模块主要技术参数:逻辑工作电压:4.55.5V工作温度:-1060。12864自带中文字库可以很方便的实现汉字显示,界面更加清楚明白。相比于数码管它在不多占用单片机IO口时不用增加额外的数码管段选、位选锁存器。外部接线也大大减少,设计更加简洁。12864液晶显示电路图3-12所示:图3-12 12864液晶显示电路芯片共有20位引脚D0D7为数据的传输引脚负责与单片机进行数据传输,R/W(SID)接单片机P10口负责并行的读写选择,E(
20、SCLK)接单片机的P13口负责并行的使能信号,BLA+接VCC背光源的正极,BLA-接GND背光源的负极。V COM端口通过一个阻值为2k的滑动变阻器分别接VCC和GND,通过改变滑动变阻器的阻值用来调节12864屏幕的亮度。4 系统软件设计4.1 系统主程序流程图由于真个系统程序较长,为了简便起见采用模块化编程方法,将12864液晶显示程序,按键扫描程序,延时程序,HX711操作程序,EEPROM读写操作程序,主程序单独罗列成模块,以便相互调用,使程序更加清晰明朗。系统主流程图如图4-1所示:图4-1 系统主流程图如系统主流程图所示,初始化主要是对12864液晶的显示初始化即显示的初始界面
21、,对EEPROM对系统上电后默认配方的设定,继电器的初始化。初始化完成后开始检测按键值,先检测设置键是否被按下,若是,开始检测是否数字键被按下,若被按下则进行数字键处理,再检测确定键是否按下,若是进行确定键处理。系统确定键流程图如图4-2所示:图4-2 系统确定键流程图确定键处理流程图,当检测到开始键按下时单片机控制继电器闭合,从而启动电机开始送物料,称重传感器将实时重量数据传给单片机,单片机将传感器数据实时与配方进行比较看是否达到设定值若达到即可控制继电器断开停止送料,同时检测是否物料全部送完若没送完则继续送物料,若送完即返回主程序继续执行。4.2 按键的扫描按键扫描流程图如图4-3所示:图
22、4-3 按键扫描流程图按键扫描:通过程序将P3.0,P3.1,CSDA,INT1置位为0111,然后检测LCDEN,RS,WR,RD电平高低得知S1,S2,S3,S4哪个按键被按下,然后再将P3.0,P3.1,CSDA,INT1置位为1011,检测第二横排是否有按键按下,这样循环依次检测完四排按键是否被按下,如果有键被按下则进行消抖,消抖后在检测按键是否按下如果按下再检测是哪个按键被按下,按照程序设定的键值进行操作。4.3 EEPROM的操作SDA引脚默认为高电平(通过外部电子器件实现)只有在SCL为低电平时才允许改变SDA,SCL为高电平时改变数据引脚SDA将被视为开始或终止信号。AT24C
23、02A读写开始/停止时序图如图4-4所示:图4-4 AT24C02A读写开始/终止时序图在开始对AT24C02A进行操作时必须先发送一个开始信号,即当SCL保持高电平期间SDA从高电平转换为低电平。停止信号:当SCL保持高电平期间SDA从低电平转换为高电平。停止信号将EEPROM保持在待命状态。AT24C02A应答信号时序图如图4-5所示:图4-5 AT24C02A应答信号时序图当对EEPROM进行数据输入完成后由EEPROM发送一个应答信号(第9个时钟周期内SDA至低电平),单片机通过应答用来判断写操作是否成功。AT24C02A按写一个字节操作时序图如图4-6所示:图4-6 AT24C02A
24、按字写操作时序图对EEPROM进行写操作时按时序图要求依次发送开始信号,8位器件地址(由高到低)且选择写操作,应答信号,8位字节地址(由高到低),8位数据(由高到低),应答信号,停止信号。应答信号由EEPROM发送,单片机通过应答用来判断写操作是否成功。AT24C02A按随机读操作时序图如图4-7所示:图4-7 AT24C02A按随机读操作时序图 对EEPROM进行特定地址读操作时依次发送开始信号,8位地址(由高到低)且选择写操作,应答信号,字节地址,应答信号,开始信号,8位地址(由高到低)且选择读操作,读数据,非应答信号(1),停止信号1。4.4 A/D转换的处理HX711-BF增益选择时序
25、图如图4-8所示:图4-8 HX711-BF增益选择时序图增益的选择:HX711芯片通过软件来实现对内部放大电路增益的选择,每传输一个数据芯片就要求单片机选择处理下一个传感器数据选择的增益。即在每次发送完24位数据后若单片机再发送一个时钟脉冲信号即选择128倍增益,若再发送2个时钟脉冲即选择32倍增益,若发送3个时钟脉冲即选择64位增益。数据的处理:传感器的数据经过放大处理A/D转换后最大值是2362232,程序中通过HX711_Buffer=HX711_Read();获得当前采样的AD值存放在变量HX711_Buffer中,因为24bit数据在8位单片机89C52中存放较为不便,在后续的数据
26、处理中将它除以100,转化为单片机方便处理的数据再结合传感器的特性性能和系统对精度的要求进行操作。由A/D值反算重力值:设重力值为a(kg),测量出的的AD值为b,此时传感器输出的数据为a(kg)*4.35mv/200(kg)=0.02175a(mv);经128倍增益后为128*0.02175a(mv)=2.784a(mv);转换为24bit数字信号为2.784a(mv)*224/4.35v=10737a;因此b=10737a/100=107a;得出a=b/107(kg)由此得出计算公式实际重量=AD转换值/107(kg)。其中107这个数据是理想状态下计算出来的,实际情况还要对传感器进行校准
27、,根据实际情况改变107这个数据以达到精确测量的目的。4.5 显示电路12864原理接线图如图4-9所示:图4-9 12864接线图12864初始化流程图如图4-10所示:图4-10 12864初始化流程图12864液晶的初始化要先进行液晶的功能设定然后延时后开显示再延时然后再清除屏幕内容,最后进行模式设定。12864软件设计中重要通过89C52单片机程序控制12864的数据传输端口及其控制端口。本次设计中12864选择8位并行数据传输模式(将PSB并串行接口选择置1,RS为并行数据/指令选择信号,高电平时接受指令,低电平时接收数据。R/W为并行的读写选择信号,高电平时为读,低电平时为写。D0
28、D7接单片机的P0口,通过程序控制单片机相应的I/O即可实现对12864液晶的控制。12864时序图如图4-11所示:图4-11 12864时序图12864时序图分析,单片机对12864进行写命令操作时,先将RS置0,选择命令;接着将R/W置0,选择写方向;完成后即表示可以向12864液晶进行写命令操作。延时后将使能信号E置1,使能12864;紧接着通过D0D7向液晶输送命令。命令在RS,R/W为低电平期间有效。 若要写数据则将RS置高电平;其他步骤与写命令一致。即在对12864进行操作时先要选择命令数据选项,再选择读写选择项,然后才可以向12864进行具体的操作。总 结在4个多月的毕业设计中
29、前期多看一些相关的论文,书籍,对自己的设计有一个大体的了解,难易程度上有一个整体的把握。整体设计方案的规划时元器件的选型很重要,确定正确的合适的元器件对整个设计过程有很大的帮助,可以免去后来的麻烦,用什么样的传感器,传感器是否符合设计要求,传感器的输出数据是否要经过放大处理,要选用多大增益的放大器,传感器的数据要进行怎样的处理,是选用A/D转换还是V/F转换。应该说传感器的选择是确定其它元器件选择的基础,元器件选择也要考虑自己的专长,比如A/D和V/F转换,我选择的是A/D转换,因为V/F转换并没有接触过,而且还要转换后加光电耦合器,设计较为复杂,而A/D转换就很熟悉,选择高位数的A/D转换既
30、能保证转换精度由非常方便。最后确定的是HX711-BF24位A/D转换芯片,集成了放大转换,设计更加方便。显示器件原来选的是数码管,但后来更改为12864,因为12864在显示上比数码管更加的清楚明白,还可以显示汉字,优势巨大,且在程序上个人感觉12864要比数码管来的清楚明白,更适合模块化编程,用到的器件相对于数码管也要少(至少不用段选,位选两个锁存器和限流电阻了)。设计中遇到的最大的困难还是硬件上的焊接,这是我当时所万万想不到的,由于焊接设备的性能问题和焊锡的品质问题以及本人经验不足导致焊接接触不良,系统时灵时不灵,当时由于不知道原因纠结了好长时间(以为是器件焊烧了,程序出错了),不得不从
31、新开始焊接,导致后来的设计时间明显紧张。总之,整个毕业设计过程中,让我真正的有所进步,对专业知识的认识上有了一个飞跃,其中有苦恼有喜悦,真不错。致 谢本次的配料控制系统整体设计过程中得到了老师和同学们的大力帮助,没有他们我的毕业设计也不会这么快完成。从前期的选题xx老师及时帮助我们规划了整个毕业设计时间中各个阶段工作的重点到中期元器件的选型,设计的整体规划,PCB的修改,以及设计过程中遇到的各种问题都给与了极大的耐心与支持,不管xx老师工作有多忙每周都会抽出时间来了解我们的工作进度,对我们遇到的困难进行答疑解惑,印象最深的还是老师因为白天工作忙早上七点半在QQ上与我们交流毕业设计中的问题,及时
32、帮我们指出设计中的错误,到后来毕业设计说明书的规范,说明书的一些技巧,小到一个贴图的位置,大小等不妥之处也会很细心的进行指导。而且,在设计的过程中x同学、x同学也对我的软件设计以及在硬件选型优化上提出了宝贵的意见和建议, 再次特谢。同时在设计配料控制系统中也参考了很多专业的参考书籍,引用了数位学者的著作文献,给了我很大的帮助,也让我少走了很多弯路,向他们表示感谢。 此次设计中若有因本人的粗心而造成的阅读上困难和不便请多多包涵。参考文献1邱关源,罗先觉.电路M.北京:高等教育出版社,2006.52阎石.数字电子技术基础M.北京:高等教育出版社,2009.13马镜澄.低压电器M.北京:机械工业出版
33、社,19934强锡福.传感器M.北京:机械工业出版社,19895王兆安,刘进军.电力电子技术M.北京:机械工业出版社,2009.56黄坚.自动控制原理M.北京:高等教育出版社,20047谭浩强. C语言程序设计M.北京:清华大学出版社,2010.68汤蕴璆. 电机学M.北京:机械工业出版社,2011.7 9王静. Altium Designer Winter 09电路设计案例教程M.北京:中国水利水电出版社,2010.2 10夏路易,石宗义.电路原理图与电路板设计教程M.北京:北京希望电子出版社,2002.611David Culler, Deborab Esrtin, Mani Sivast
34、ava. “Overview of Sensor Networks”, IEEE Computer Society, August 2004 12HU Ke,GUO Zhuang-hui,WANG Lei , Research on Wireless CommunicationTechnologyZigBeeJ; Computer KnowledgeandT echnology; 2008-06doi:CNKI:SUN:DNZS.0.2008- 06-025 13M. Vainio, P. Apppelqvist und A. Halme, Generic Control Architectu
35、re for a Cooperative Robot System, in IEEE IROS, October 1998, p. 1119-p.1125 14E. Kruse und F.M. Wahl,Camera-Based Monitoring System for Mobile Robot Guidance, in IEEE IROS,October 1998, p.1248-p.1253 15Jing Wang1,Jia Liu ,Huan Wang .Applied MechanicsAnd Mechatronics Automation. Jun 2012,p.1464-p.1
36、468附录A 原理图附录B 程序main.c#include lcd12864.h#include delay.h#include HX711.h#include key.h#include eeprom.h#include uchar shuzi=0123456789;sbit ji1=P23;sbit ji2=P24;sbit ji3=P25;sbit ji4=P26;void main()uint i=0,temp=0,bai,shi,ge,num,a=4,;/12864初始化 init();delay_1ms(10); weight1=read_random(1);weight2=re
37、ad_random(2);weight3=read_random(3);while(1)/HX711数据转换 temp=HX711_Read()/100;num=temp/107+0.05-58;bai=num/100;shi=(num%100)/10;ge=num%10;while(1)/数字键扫描判断key_luoji();key_scan();if(key=15) break; /显示传感器重量(第二行) write_com(0x0c); delay_ms(1); write_com(0x93); delay_ms(1); write_data(shuzibai); delay_1ms(
38、1);write_data(shuzishi);delay_1ms(1);write_data(shuzige);delay_1ms(1);if(num=weight1)ji1=0;if(num=weight1+weight2)ji2=0;if(num=weight1+weight2+weight3)ji3=0;ji4=0;delay.c#include delay.hvoid delayshu(void)int k;for(k=0;k1000;k+);/*/void delay_1ms(uchar x)uchar i=0,j=0;for(i=0;ix;i+)for(j=0;j113;j+);
39、delay.h#ifndef _DELAY_H_#define _DELAY_H_#include #define uchar unsigned char#define uint unsigned intvoid delayshu(void);void delay_1ms(uchar x);#endifeeprom.c#include eeprom.h /*/ void delayNOP() _nop_();_nop_();_nop_();_nop_(); /*/ void start() /开始位 SDA = 1; SCL = 1; delayNOP(); SDA = 0; delayNOP
40、(); SCL = 0; /*/ void stop() / 停止位 SDA = 0; delayNOP(); SCL = 1; delayNOP(); SDA = 1; /*/ uchar shin() / 从AT24C02移出数据到MCU uchar i,read_data; for(i = 0; i 8; i+) SCL = 1; read_data = 1; read_data |= SDA; SCL = 0; return(read_data); /*/ bit shout(uchar write_data) / 从MCU移出数据到AT24C02 uchar i; bit ack_b
41、it; for(i = 0; i 8; i+) / 循环移入8个位 SDA = (bit)(write_data & 0x80); _nop_(); SCL = 1; delayNOP(); SCL = 0; write_data = 1; SDA = 1; / 读取应答 delayNOP(); SCL = 1; delayNOP(); ack_bit = SDA; SCL = 0; return ack_bit; / 返回AT24C02应答位 /*/ void write_byte(uchar addr, uchar write_data) / 在指定地址addr处写入数据write_dat
42、a start(); shout(0xa0); shout(addr); shout(write_data); stop(); delayms(10); / 写入周期 /*/ uchar read_current() / 在当前地址读取 uchar read_data; start(); shout(0xa1); read_data = shin(); stop(); return read_data; /*/ uchar read_random(uchar random_addr) / 在指定地址读取 start(); shout(0xa0); shout(random_addr); return(read_current(); /*/ void delayms(uint ms) / 延时子程序 uchar k; while(ms-) for(k = 0; k 120; k+); eeprom.h#ifndef _EEPROM_H_#defin