日了猋-课室人数检测器.docx

基于51单片机的“扫地机器人”设计

收藏

压缩包内文档预览:(预览前20页/共34页)
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:36524512    类型:共享资源    大小:4.37MB    格式:ZIP    上传时间:2020-01-02 上传人:遗**** IP属地:湖北
19
积分
关 键 词:
基于 51 单片机 扫地 机器人 设计
资源描述:
基于51单片机的“扫地机器人”设计,基于,51,单片机,扫地,机器人,设计
内容简介:
华南理工大学第十二届智能控制设计大赛初级组之基于51单片机的“扫地机器人”设计报告队长:吴仕科(16级自动化4班)队员:陈邦栋(16信息工程4班)目录一、设计要求31.基本要求:32.拓展要求:3二、设计思路3三、方案比较31、洞洞板的选择32、芯片的选择33、单片机键盘的选择34、LCD的选择45、电源的选择46、储存模块的选择47、时钟模块的选择48、最终选用方案4四、一些模块的选择及底盘制作41、电机驱动模块42、红外传感器模块53、循迹模块54、底盘的制作:5五、设计与论证6程序流程图6六、理论分析与计算61、基础设想分析62、整体框架分析73、独立键盘检测分析74、LCD12864显示理论分析75、算法计算分析7七、电路原理图81、电路图82、相关设计文件8八、测试方法和仪器91、测试方法92、测试仪器9九、测试数据及结果分析101、测试数据102、结果分析,与比赛要求的符合程度12附录13一、设计要求 1. 基本要求 (1) 设计扫地机器人,自主完成前进、后退、转向等控制; (2) 实现避障功能,能自主走完一个用围墙围起 来2m*2m的区域; (3) 设计简易扫地装置,能够清扫小纸团; 2. 拓展要求 (1) 设计良好的人机界面,用于设置开启时间,显示电量等;(2) 能够清扫更小的垃圾,如纸屑;(3) 清扫之后能够回到用黑胶布围成的30cm*30cm的起点区域;(4) 其他拓展功能。二、设计思路基于51单片机实现通过对按键的操作改变LED人机交互界面上显示的时间参数实现对“扫地机器人”的操作。三、方案比较 1.洞洞板的选择(1)锡板(绿色):锡板质量好,焊接过程容错率高,不易变形,加个较高。(2)铜板(黄色):铜板质量相对较差,不容易上锡,在高温下铜圈容易掉落,易变形,加个相对便宜。2.芯片的选择STC89C52RC芯片优点:相对于51版本单片机,52单片机多出了一个定时器及128字节RAM,flash储存多出4K。操作简单试用于初学者可查找资料多,与51单片机完全兼容价格相对比较便宜并且购买渠道多支持ISP下载,比较方便具有EEPROM功能STC12C5A60S2芯片优点:拥有C52的全部功能带有AD,PWM功能,多了两个定时器Flash存储空间达60K在相同晶振下,运行速度是51的8到12倍中断可自定义优先级3.单片机键盘选择(1)矩阵键盘:在需要较多的按键时,矩阵键盘需要的IO口相对少(2)独立键盘:在需要较少按键时,独立键盘优势大,若在需要较多的按键时,独立键盘消耗的IO口多4.LCD的选择面向初学者来说LCD主要分为两种,1602和12864(1)1602:能够显示简单的字符,操作简单,屏幕相对较小,能够显示的信息数量有限(2)12864:能够显示简单字符也可以显示自定义的图片,操作相对困难,屏幕相对较大 能够显示较多的信息。5. 电源的选择18650锂电池:输出电压高,约为3.7v,负载能力强,能够驱动电机驱动模块和单片机和各模块。只需要两块电池。可充电,比较环保。价格相对较高。普通干电池:输出电压较低,负载能力较低,要驱动电机驱动模块需要5块1.5v干电池,一般不能充电,调试过程易造成浪费。价格相对较便宜。升压模块:能将3-5伏的电压升到12伏或更高,但是性能越好的价格越高,性能较低的承受电流不能过大。6.储存模块的选择(1)单片机自带EEPROM:使用方便,可以节省IO口,操作简单 (2)AT24C02:擦除写入速度快,可擦写次数达100万次,数据可保存达100年,功耗低7.时钟模块的选择(1)DS1302:操作简单,IO口占用少,基础电路简单,可自行焊接(2)DS12C887:芯片集成度高,不需要外部基础电路,焊接方便,但IO占用多8.最终选择方案基于设计思路,由小组成员讨论决定选择同时选用锡板和铜板(降低开支的同时,保证焊接稳定),鉴于使用模块较多IO口不足的问题同时选用STC89C52RC芯片和STC12C5A60S2芯片,独立键盘(只需要4个功能按键,IO口占用与矩阵键盘相同,且矩阵键盘的焊接难度大),12864(根据需要显示的功能选择),单片机自带EEPROM(节省IO口,同时降低操作难度),选用电源为18650锂电池(输出电压较为稳定,且可以充电,环保实用),选用DS1302(降低操作难度,节省IO口)。四、一些模块的选择及底盘的制作1.电机驱动模块采用专用芯片L298N作为电机驱动芯片。L298N是一个具有高电压大电流的全桥驱动芯片,它相应频率高,一片L298N可以分别控制两个直流电机,而且还带有控制使能端。用该芯片作为电机驱动,操作方便,稳定性好,性能优良。我们采用现成的封装好的电机驱动模块,能将6-12伏的电压转化为5伏电压输出,给单片机和其他模块供电,操作简单功能强大。2.红外传感器模块 该传感器模块对环境光线适应能力强,其具有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物时,红外线反射回来被接收管接收,经过比较器电路处理之后,指示灯会亮起,同时信号输出接口输出一个低电平信号,可通过电位器旋钮调节检测距离,有效距离范围 230cm,工作电压为3.3V-5V。该传感器的探测距离可以通过电位器调节、具有干扰小、便于装配、使用方便等特点。3.寻迹模块:TCRT5000传感器的红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,光敏三极管一直处于关断状态,此时模块的输出端为低电平,指示二极管一直处于熄灭状态;被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,光敏三极管饱和,此时模块的输出端为高电平,指示二极管被点亮4.底盘的制作: 利用废弃的硬纸盒,通过钻孔来固定各个模块和轮子,同时也能将各种杜邦线和电路板包含在盒子里面,达到外形美观和节约材料变废为宝的目的。 五、设计与论证程序流程图六、理论分析与计算1.基础设想分析(1)单片机间的控制由于是基于人机交互界面控制的扫地机器人,故可由两个单片机控制不同的模块(STC12C5A60S2控制显示模块,STC89C52RC控制小车模块)。STC12IO口与STC89IO口相连,由显示模块(STC12)输出信号,小车模块(STC89)接受信号,从而实现单片机间的控制。(2)背光灯及小车车轮控制由STC12IO口输出一定的PWM信号,可调节背光灯的亮度。由STC89控制电机驱动输出PWM信号小车电机转速,同时可通过对车轮输出不同的PWM信号实现车轮转速不同而实现小车的转向,可对电机驱动输入不同的使能信号使其电机实现正反转动,从而实现小车的前进后退。(3)小车的避障功能通过红外传感器测距,当红外传感器与障碍物距离缩短到一定距离时,红外传感器会给单片机传输一个电信号,单片机识别电信号后可控制小车转向,从而避开障碍物。(4)扫地装置通过电机驱动控制两个带毛刷电机以一定速度反向转动,将毛刷经过的区域的垃圾扫进小车底部设计的简易垃圾收集装置(5)电量检测与显示设计一简单的外围电路,通过STC12自带的AD功能,可实现对电池电压的检测。再通过电池电压与容量的简易关系,设计简易程序实现在12864固定区域显示。(6)时间显示单片机对外部时钟芯片的数据进行读取,同时设置开启时间(ON)停止时间(OFF),通过单片自带EEPROM储存ON、OFF时间数据,再通过LCD12864显示。(7)返回出发点通过循迹模块对地面进行识别,若识别到黑线即会输出电信号,单片机识别电信号后行走一小段时间后便停止行动2.整体框架分析(1)主程序main函数开始执行初始化,初始化LCD等外部硬件,在LCD上显示固定数据(2)进入while循环重复扫描按键,时间比较,显示电量,背光选择。3.独立键盘检测分析按键与GND相连,一旦按键被按下单片机便会接受到一个低电平信号。由于单片机执行速度快,故按下按键的同时,单片机几乎同时执行按键扫描函数,对来自IO口的电平信号进行分析。4.LCD12864显示理论分析初始化函数显示液晶屏固定显示部分,使用LCD自带字库,使现实速率提高,再通过对外部时钟数据进行读取,按键扫描程序数据更改的读取,局部改变液晶屏上数据的显示。因LCD的执行速度很快,人眼存在视觉停留效果,故改变数据时,人不易察觉到这一过程。5.算法计算分析(1)更改时间:DS1302对时间数据的存储是16进制,故读取时钟数据时需将其转化为10进制再分别取时分秒的十位数和个位数,分别显示在LCD上。因此,在对DS1302时钟数据的更改时需将更改的时钟数据改变为16进制再进行储存。(2)电量显示:通过STC12的AD串口对电压进行读取(此时读取的电压值为电源电压的一半),再将读取的数据乘以2即得电源的电压值。再通过对电压与电源电路的简易关系,判断电压属于哪个范围即显示相应的剩余电量。七、电路原理图STC12C5A60S2 八、测试方法和测试仪器1、测试方法(1) 通过调节红外传感器模块上的可调电阻,调节模块的灵敏度,使其在一定距离下输出低电平。表现为红外传感器指示灯亮起(2) 通过LCD显示AD串口检测到的电压,同时用万用表检测电源两端的输出电压,观察读取数据是否准确。(3)通过调节PWM,调节旋转电机(扫地用)转速,使其能够较好的清扫垃圾, 观察其是否能达到预估效果(4)通过调节PWM。调节行走电机的转速,使其实现转向,观察其是否能达到预估效果(5)通过给电机驱动模块输入使能信号,控制行走电机转向,使其实现前行和后退, 观察其是否能达到预估效果(6)根据需要的功能设计程序,观察其在LCD上是否能够按预想状况进行2、测试仪器:万用表九、测试数据与结果分析1、测试数据要求测试内容测试前测试后备注基本要求1: 设计扫地机器人,自主完成前进、后退、转向等控制前进通过观测可知(能够前进)后退通过观测可知(能够后退)转向通过观测可知(能够转向)基本要求2:实现避障功能,能自主走完一个用围墙围起 来2m*2m的区域避障通过观测可知(能够避障)自主走完一个用围墙围起来2m*2m的区域通过观测可知(能够走完待清扫区域)基本要求3:设计简易扫地装置,能够清扫小纸团清扫小纸团通过观测可知(能够清扫小纸条,部分有较小几率弹出垃圾收集装置拓展功能1:设计良好的人机界面,用于设置开启时间,显示电量等设置时间为设置时间标志,ho,mi,se分别为时分秒设置标记设置开启时间为设置时间标志,ho,mi,se分别为时分秒设置标记设置关闭时间为设置时间标志,ho,mi,se分别为时分秒设置标记显示电量拓展功能2:能够清扫更小的垃圾,如纸屑清扫更小的垃圾通过观测可知(能够清扫较小纸屑)拓展功能3:清扫之后能够回到用黑胶布围成的30cm*30cm的起点区域回到起点通过观测可知(能够回到起点)其他拓展功能:设置LCD背光亮度设置LCD背光亮度测试前为直接接上电源后LCD背光灯亮度(亮度太大,耗能高,刺眼)2、结果分析基本要求完成情况1设计扫地机器人,自主完成前进、后退、转向等控制完成2实现避障功能,能自主走完一个用围墙围起 来2m*2m的区域完成,小车在检测到前方障碍物时会自行转向3设计简易扫地装置,能够清扫小纸团完成,通过两个反向旋转毛刷可以将小纸团收集进自制简易垃圾收集装置拓展功能1设计良好的人机界面,用于设置开启时间,显示电量等完成,可以显示实时时间,开启时间,关闭时间,电量。并可通过按键调节时间数据2能够清扫更小的垃圾,如纸屑完成,通过调试旋转毛刷的转速可以实现更小垃圾的清扫3清扫之后能够回到用黑胶布围成的30cm*30cm的起点区域完成,当达到关闭时间后,小车弱检测到黑色胶布传送的深色信号时将自动前进一小段距离便停止4设置LCD背光亮度、开关机动画完成附录#include#include#define uchar unsigned char#define uint unsigned int#define RdCommand 0x01 /定义ISP的操作命令#define PrgCommand 0x02#define EraseCommand 0x03#define Error 1#define Ok 0#define WaitTime 0x01 /定义CPU的等待时间#define ADC_POWER 0x80 /ADC power control bit#define ADC_FLAG 0x10 /ADC complete flag#define ADC_START 0x08 /ADC start control bit#define ADC_SPEEDLL 0x00 /420 clocks#define FOSC 11059200L#define BAUD 9600sbit LCD_PSB=P30;sbit LCD_EN=P31;sbit LCD_WR=P32;sbit LCD_RS=P33;sbit SCLK=P34;sbit SDA=P35;sbit RST=P36;sbit key=P20;sbit s1=P24;sbit s2=P25;sbit s3=P26;sbit s4=P27;sfr ISP_DATA=0xc2;sfr ISP_ADDRH=0xc3;sfr ISP_ADDRL=0xc4;sfr ISP_CMD=0xc5;sfr ISP_TRIG=0xc6;sfr ISP_CONTR=0xc7;sfr ADC_CONTR = 0xBC; sfr ADC_RES = 0xBD; sfr ADC_LOW2 = 0xBE; sfr P1ASF = 0x9D; sfr CCON = 0xD8; sbit CCF0 = CCON0; sbit CCF1 = CCON1; sbit CR = CCON6; sbit CF = CCON7; sfr CMOD = 0xD9; sfr CL = 0xE9; sfr CH = 0xF9; sfr CCAPM0 = 0xDA; sfr CCAP0L = 0xEA; sfr CCAP0H = 0xFA; sfr CCAPM1 = 0xDB; sfr CCAP1L = 0xEB; sfr CCAP1H = 0xFB; sfr PCAPWM0 = 0xf2;sfr PCAPWM1 = 0xf3;uchar count;char miao,shi,fen;char nshi,nfen,nmiao,fshi,ffen,fmiao;uchar s1num,s2num;uchar code table= ON: 00:00:00;uchar code table1=扫地机器人 ;uchar code table2= OFF: 00:00:00;uchar code table3= TIME: 00:00:00;void InitUart();void InitADC();void SendData(uchar dat);int GetADCResult(uchar ch);void Delay(uint n);void ShowResult(uchar ch);float Ad_AV(uchar channel);/计算AD转换电压值void delayus(uint z);void delayms(uint z); void Q0(void);void cc(uint addr);void xcx(uint addr,uchar dat);uchar dcx(uint addr);void write_com(uchar command);void write_date(uchar date);void ds1302writebyte(uchar dat);uchar ds1302readbyte();uchar ds1302read(uchar cmd);void ds1302write(uchar cmd, uchar dat) ;/初次初始化ds1302使用/void init_ds1302(void); void init();void keyscan();/设置时钟,开启时间,结束时间/void di(); /蜂鸣器报警void clock();void compare();void powershow();void show(int x,int y);void show1(int x);void pwm(uchar x);void beiguang();void main()init();while(1)keyscan();clock();compare();powershow();beiguang();void beiguang()if(s1num=0)if(s2=0)pwm(255);if(s3=0)pwm(128);if(s4=0)pwm(256);void pwm(uchar x)CCON = 0; CL = 0; CH = 0; CMOD = 0x02; CCAP0H = CCAP0L = x; CCAPM0 = 0x42; CR = 1; float Ad_AV(uchar channel)/计算AD转换电压值float VAL_AV=0;uchar num;for(num=100;num0;num-)VAL_AV+=GetADCResult(channel);VAL_AV/=100.0;VAL_AV*=2.0;VAL_AV=VAL_AV*5.0/1024;return VAL_AV;void powershow() /显示电量float dianya;dianya=Ad_AV(1);if(dianya=7.16)show1(0);else if(dianya=7.18)show1(1);else if(dianya=7.22)show1(3);else if(dianya=7.26)show1(5);else if(dianya=7.28)show1(8);else if(dianya=7.3)show(1,0);else if(dianya=7.32)show(1,2);else if(dianya=7.38)show(1,5);else if(dianya=7.40)show(1,8);else if(dianya=7.42)show(2,0);else if(dianya=7.44)show(2,5);else if(dianya=7.450523)show(2,8);else if(dianya=7.46)show(3,0);else if(dianya=7.47108)show(3,3);else if(dianya=7.48)show(3,5);else if(dianya=7.50)show(3,8);else if(dianya=7.52)show(4,0);else if(dianya=7.53)show(4,2);else if(dianya=7.54)show(4,5);else if(dianya=7.58)show(5,0);else if(dianya=7.62)show(5,5);else if(dianya=7.65)show(5,8);else if(dianya=7.68)show(6,0);else if(dianya=7.71)show(6,3);else if(dianya=7.74)show(6,5);else if(dianya=7.77)show(6,7);else if(dianya=7.80) show(7,0);else if(dianya=7.835)show(7,3);else if(dianya=7.86)show(7,5);else if(dianya=7.895)show(7,7);else if(dianya=7.94)show(8,0);else if(dianya=8.00)show(8,2);else if(dianya=8.06)show(8,5);else if(dianya=8.10)show(8,7);else if(dianya=8.16)show(9,0);else if(dianya=8.20)show(9,2);else if(dianya=8.24)show(9,5);else if(dianya=8.28)show(9,7);else if(dianya8.30)write_com(0x80+6);write_date(0x30+1);write_date(0x30+0);write_date(0x30+0);write_date(%);void show(int x,int y)write_com(0x80+6);write_date( );write_date(0x30+x);write_date(0x30+y);write_date(%);void show1(int x)write_com(0x80+6);write_date( );write_date( );write_date(0x30+x);write_date(%);void delayus(uint z)uint x,y;for(x=z;x0;x-)for(y=10;y0;y-);void delayms(uint z) /延时uint x,y;for(x=z;x0;x-)for(y=110*3;y0;y-);void Q0(void)ISP_CONTR=0;ISP_CMD=0;ISP_TRIG=0;ISP_ADDRH=0X80;ISP_ADDRL=0;void cc(uint addr)ISP_CONTR=0X82;ISP_CMD=0X03;/eeprom擦除使能ISP_ADDRL=addr;ISP_ADDRH=addr8;EA=0;ISP_TRIG=0X5A;ISP_TRIG=0XA5;delayus(1);Q0();/关闭ISP,IAPvoid xcx(uint addr,uchar dat)ISP_CONTR=0X82;ISP_CMD=0X02;ISP_ADDRL=addr;ISP_ADDRH=addr8;ISP_DATA=dat;EA=0;ISP_TRIG=0X5A;ISP_TRIG=0XA5;delayus(1);Q0();/关闭ISP,IAPuchar dcx(uint addr)uchar dat;ISP_CONTR=0X82;ISP_CMD=0X01;ISP_ADDRL=addr;ISP_ADDRH=addr8;EA=0;ISP_TRIG=0X5A;ISP_TRIG=0XA5;delayus(1);dat=ISP_DATA;Q0();return dat;void write_com(uchar command) /写指令到12864LCD_RS=0;LCD_WR=0;LCD_EN=0;P0=command;delayms(5);LCD_EN=1;delayms(5);LCD_EN=0;void write_date(uchar date) /写显示数据到12864LCD_RS=1;LCD_WR=0;LCD_EN=0;P0=date;delayms(5);LCD_EN=1;delayms(5);LCD_EN=0;void ds1302writebyte(uchar dat)uchar i;SCLK=0;delayms(1);for(i=0;i=1;/数据右移一位uchar ds1302readbyte()uchar i,dat;delayms(1);for(i=0;i=1;/要返回的数据左移一位if(SDA=1)dat|=0x80;/要传输数据的当前值置为 1,若不是则为0SCLK=1;delayus(2);SCLK=0;delayus(2);return dat;uchar ds1302read(uchar cmd)uchar dat;RST=0;/初始CE先置0SCLK=0;/初始时钟线置0RST=1;/CE置1,传输开始ds1302writebyte(cmd);/ 传输命令字,要读取的时间dat=ds1302readbyte();/ 读取要得到的时间SCLK=1;/时钟线拉高RST=0;return dat;void ds1302write(uchar cmd, uchar dat) RST=0;SCLK=0;RST=1;ds1302writebyte(cmd);ds1302writebyte(dat);SCLK=1;/时钟线拉高RST=0;/初次初始化ds1302使用/void init_ds1302(void)/ds1302write(0x8e,0x00);/ds1302write(0x80,0x00);/ 初始秒值为0/ds1302write(0x82,0x21);/ds1302write(0x84,0x19);/初始为24小时模式 初始时间为0点 /ds1302write(0x86,0x25);/ds1302write(0x88,0x12);/ds1302write(0x8a,0x10);/ds1302write(0x8c,0x06);/ds1302write(0x90,0x01);/充电/ds1302write(0xc0,0xf0);/初始化标志/ds1302write(0x8e,0x80);/ void init()uchar num;pwm(128);/init_ds1302(); /初次初始LCD_PSB=1; /12864初始化write_com(0x30);delayms(3);write_com(0x0C);delayms(3);write_com(0x01);delayms(3);TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;write_com(0x80);/固定显示部分for(num=0;num16;num+)write_date(table1num);delayus(50); write_com(0x90); for(num=0;num16;num+)write_date(table3num);delayus(50); write_com(0x88);for(num=0;num16;num+)write_date(tablenum);delayus(50); write_com(0x98); for(num=0;num16;num+)write_date(table2num);delayus(50); void keyscan()/设置时钟,开启时间,结束时间if(s1=0)delayms(1);if(s1=0);s1num+;switch(s1num)/显示调节case 1:write_com(0x90);write_date(0x7e);delayms(1);write_com(0x88);write_date( );delayms(1);write_com(0x98);write_date( );delayms(1);break; case 2:write_com(0x90);write_date( );delayms(1);write_com(0x88);write_date(0x7e);delayms(1);write_com(0x98);write_date( );delayms(1);break;case 3:write_com(0x90);write_date( );delayms(1);write_com(0x88);write_date( );delayms(1);write_com(0x98);write_date(0x7e);delayms(1);break;case 4:s1num=0;s2num=0;write_com(0x90);write_date( );delayms(1);write_com(0x88);write_date( );delayms(1);write_com(0x98);write_date( );delayms(1);write_com(0x80+5);write_date( );write_date( );delayms(1);break;if(s1num!=0) /功能键被按下后执行if(s2=0)delayms(1);if(s2=0);s2num+;switch (s2num)case 1:write_com(0x80+5);write_date(h);write_date(o);delayms(1);break;case 2:write_com(0x80+5);write_date(m);write_date(i);delayms(1);break;case 3:write_com(0x80+5);write_date(s);write_date(e);delayms(1);break;case 4:s2num=0;write_com(0x80+5);write_date( );write_date( );delayms(1);break;if(s1num!=0)if(s2num!=0)switch (s1num)case 1:if(s3=0)delayms(1);if(s3=0)uchar tshi,tge;switch (s2num)case 1:shi=ds1302read(0x85);shi+;if(shi=0x0a)shi=0x10;if(shi=0x1a)shi=0x20;if(shi=0x24)shi=0;ds1302write(0x8e,0x00); /写保护关ds1302write(0x84,shi);ds1302write(0x8e,0x80); /写保护开tshi=(ds1302read(0x85)/16*10+ds1302read(0x85)%16)/10;tge=(ds1302read(0x85)/16*10+ds1302read(0x85)%16)%10;write_com(0x90+4);write_date(0x30+tshi); write_date(0x30+tge); break;case 2:fen=ds1302read(0x83);fen+;if(fen=0x0a)fen=0x10;if(fen=0x1a)fen=0x20;if(fen=0x2a)fen=0x30;if(fen=0x3a)fen=0x40;if(fen=0x4a)fen=0x50;if(fen=0x5a)fen=0x00;ds1302write(0x8e,0x00); /写保护关ds1302write(0x82,fen);ds1302write(0x8e,0x80); /写保护开tshi=(ds1302read(0x83)/16*10+ds1302read(0x83)%16)/10;tge=(ds1302read(0x83)/16*10+ds1302read(0x83)%16)%10;write_com(0x90+5);write_date(:);write_date(0x30+tshi);write_com(0x90+6); write_date(0x30+tge); break;case 3:miao=ds1302read(0x81);miao+;if(miao=0x0a)miao=0x10;if(miao=0x1a)miao=0x20;if(miao=0x2a)miao=0x30;if(miao=0x3a)miao=0x40;if(miao=0x4a)miao=0x50;if(miao=0x5a)miao=0x00;ds1302write(0x8e,0x00); /写保护关ds1302write(0x80,miao);ds1302write(0x8e,0x80); /写保护开tshi=(ds1302read(0x81)/16*10+ds1302read(0x81)%16)/10;tge=(ds1302read(0x81)/16*10+ds1302read(0x81)%16)%10;write_com(0x90+7);write_date(0x30+tshi); write_date(0x30+tge); break;if(s4=0)delayms(1);if(s4=0)uchar tshi,tge;switch (s2num)case 1:shi=ds1302read(0x85);shi-;if(shi=0x0f)shi=0x09;if(shi=0x1f)shi=0x19;if(shi=0x00-1)shi=0x23;ds1302write(0x8e,0x00); /写保护关ds1302write(0x84,shi);ds1302write(0x8e,0x80); /写保护开tshi=(ds1302read(0x85)/16*10+ds1302read(0x85)%16)/10;tge=(ds1302read(0x85)/16*10+ds1302read(0x85)%16)%10;write_com(0x90+4);write_date(0x30+tshi); write_date(0x30+tge); break;case 2:fen=ds1302read(0x83);fen-;if(fen=0x0f)fen=0x09;if(fen=0x1f)fen=0x19;if(fen=0x2f)fen=0x29;if(fen=0x3f)fen=0x39;if(fen=0x4f)fen=0x49;if(fen=0x00-1)fen=0x59;ds1302write(0x8e,0x00); /写保护关ds1302write(0x82,fen);ds1302write(0x8e,0x80); /写保护开tshi=(ds1302read(0x83)/16*10+ds1302read(0x83)%16)/10;tge=(ds1302read(0x83)/16*10+ds1302read(0x83)%16)%10;write_com(0x90+5);write_date(:);write_date(0x30+tshi);write_com(0x90+6); write_date(0x30+tge); break;case 3:miao=ds1302read(0x81);miao-;if(miao=0x0f)miao=0x09;if(miao=0x1f)miao=0x19;if(miao=0x2f)miao=0x29;if(miao=0x3f)miao=0x39;if(miao=0x4f)miao=0x49;if(miao=0x00-1)miao=0x59;ds1302write(0x8e,0x00); /写保护关ds1302write(0x80,miao);ds1302write(0x8e,0x80); /写保护开tshi=(ds1302read(0x81)/16*10+ds1302read(0x81)%16)/10;tge=(ds1302read(0x81)/16*10+ds1302read(0x81)%16)%10;write_com(0x90+7);write_date(0x30+tshi); write_date(0x30+tge); break;break;case 2:if(s3=0)delayms(1);if(s3=0)switch (s2num)case 1:nshi=dcx(0x0000);nshi+;if(nshi=24)nshi=0;cc(0x0000);xcx(0x0000,nshi);write_com(0x88+4);write_date(0x30+nshi/10); write_date(0x30+nshi%10); break;case 2:nfen=dcx(0x200);nfen+;if(nfen=60)nfen=0;cc(0x200);xcx(0x200,nfen);write_com(0x88+5);write_date(:);write_date(0x30+nfen/10); write_com(0x88+6);write_date(0x30+nfen%10); break; case 3:nmiao=dcx(0x400);nmiao+;if(nmiao=60)nmiao=0;cc(0x400);xcx(0x400,nmiao);write_com(0x88+7);write_date(0x30+nmiao/10); write_date(0x30+nmiao%10);break;if(s4=0)delayms(1);if(s4=0)switch (s2num)case 1:nshi=dcx(0x0000);nshi-;if(nshi=-1)nshi=23;cc(0x0000);xcx(0x0000,nshi);write_com(0x88+4);write_date(0x30+nshi/10); write_date(0x30+nshi%10); break;case 2:nfen=dcx(0x200);nfen-;if(nfen=-1)nfen=59;cc(0x200);xcx(0x200,nfen);write_com(0x88+5);write_date(:);write_date(0x30+nfen/10); write_com(0x88+6);write_date(0x30+nfen%10); break; case 3:nmiao=dcx(0x400);nmiao-;if(nmiao=-1)nmiao=59;cc(0x400);xcx(0x400,nmiao);write_com(0x88+7);write_date(0x30+nmiao/10); write_date(0x30+nmiao%10);break;break;case 3:if(s3=0)delayms(1);if(s3=0)switch (s2num)case 1:fshi=dcx(0x600);fshi+;if(fshi=24)fshi=0;ffen=dcx(0x604);fmiao=dcx(0x608);cc(0x600);xcx(0x600,fshi);xcx(0x604,ffen);xcx(0x608,fmiao);write_com(0x98+4);write_date(0x30+fshi/10); write_date(0x30+fshi%10); break;case 2:ffen=dcx(0x604);ffen+;if(ffen=60)ffen=0;fshi=dcx(0x600);fmiao=dcx(0x608);cc(0x600);xcx(0x604,ffen);xcx(0x600,fshi);xcx(0x608,fmiao);write_com(0x98+5);write_date(:);write_date(0x30+ffen/10); write_com(0x98+6);write_date(0x30+ffen%10); break; case 3:fmiao=dcx(0x608);fmiao+;if(fmiao=60)fmiao=0;fshi=dcx(0x600);ffen=dcx(0x604);cc(0x600);xcx(0x600,fshi);xcx(0x604,ffen);xcx(0x608,fmiao);write_com(0x98+7);write_date(0x30+fmiao/10); write_date(0x30+fmiao%10);break;if(s4=0)delayms(1);if(s4=0)switch (s2num)case 1:fshi=dcx(0x600);fshi-;if(fshi=-1)fshi=23;ffen=dcx(0x604);fmiao=dcx(0x608);cc(0x600);xcx(0x600,fshi);xcx(0x604,ffen);xcx(0x608,fmiao);write_com(0x98+4);write_date(0x30+fshi/10); write_date(0x30+fshi%10); break;case 2:ffen=dcx(0x604);ffen-;if(ffen=-1)ffen=59;fshi=dcx(0x600);fmiao=dcx(0x608);cc(0x600);xcx(0x604,ffen);xcx(0x600,fshi);xcx(0x608,fmiao);write_com(0x98+5);write_date(:);write_date(0x30+ffen/10); write_com(0x98+6);write_date(0x30+ffen%10); break; case 3:fmiao=dcx(0x608);fmiao-;if(fmiao=-1)fmiao=59;fshi=dcx(0x600);ffen=dcx(0x604);cc(0x600);xcx(0x600,fshi);xcx(0x604,ffen);xcx(0x608,fmiao);write_com(0x98+7);write_date(0x30+fmiao/10); write_date(0x30+fmiao%10);break;break;void clock() /显示TIME ON OFFint sshi,sge,fshi,fge,mshi,mge;mshi=ds1302read(0x81)/16; mge=ds1302read(0x81)%16;fshi=ds1302read(0x83)/16;fge=ds1302read(0x83)%16;sshi=ds1302read(0x85)/16;sge=ds1302read(0x85)%16;write_com(0x90+4);write_date(0x30+sshi); write_date(0x30+sge); write_com(0x90+5);write_date(:);write_date(0x30+fshi); write_com(0x90+6);write_date(0x30+fge); write_date(:);write_com(0x90+7);write_date(0x30+mshi); write_date(0x30+mge);nshi=dcx(0x0000);write_com(0x88+4);write_date(0x30+nshi/10);write_date(0x30+nshi%10);nfen=dcx(0x200);write_com(0x88+5);write_date(:);write_date(0x30+nfen/10); write_com(0x88+6);write_date(0x30+nfen%10); nmiao=dcx(0x400);write_com(0x88+7);write_date(0x30+nmiao/10); write_date(0x30+nmiao%10);fshi=dcx(0x600);write_com(0x98+4);write_date(0x30+fshi/10); write_date(0x30+fshi%10);ffen=dcx(0x604);write_com(0x98+5);write_date(:);write_date(0x30+ffen/10); write_com(0x98+6);write_date(0x30+ffen%10);fmiao=dcx(0x608);write_com(0x98+7);write_date(0x30+fmiao/10); write_date(0x30+fmiao%10); void compare() /比较开启时间和关闭时间与
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:基于51单片机的“扫地机器人”设计
链接地址:https://www.renrendoc.com/p-36524512.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

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