基于51单片机的“扫地机器人”设计报告内容摘要:

m,s2num。 uchar code table[]= ON: 00:00:00。 uchar code table1[]=扫地机器人。 23 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_(uchar mand)。 void write_date(uchar date)。 void ds1302writebyte(uchar dat)。 uchar ds1302readbyte()。 uchar ds1302read(uchar cmd)。 void ds1302write(uchar cmd, uchar dat)。 24 // 初次初始化 ds1302 使用 //void init_ds1302(void)。 void init()。 void keyscan()。 //设置时钟 , 开启时间 , 结束时间 //void di()。 //蜂鸣器报警 void clock()。 void pare()。 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()。 pare()。 25 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。 26 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/=。 VAL_AV*=。 VAL_AV=VAL_AV*。 return VAL_AV。 } void powershow() //显示电量 { float dianya。 dianya=Ad_AV(1)。 if(dianya=) 27 { show1(0)。 } else if(dianya=) { show1(1)。 } else if(dianya=) { show1(3)。 } else if(dianya=) { show1(5)。 } else if(dianya=) { show1(8)。 } else if(dianya=) { show(1,0)。 } else if(dianya=) { show(1,2)。 } else if(dianya=) { show(1,5)。 } else if(dianya=) { show(1,8)。 } else if(dianya=) { show(2,0)。 } else if(dianya=) { show(2,5)。 } else if(dianya=) 28 { show(2,8)。 } else if(dianya=) { show(3,0)。 } else if(dianya=) { show(3,3)。 } else if(dianya=) { show(3,5)。 } else if(dianya=) { show(3,8)。 } else if(dianya=) { show(4,0)。 } else if(dianya=) { show(4,2)。 } else if(dianya=) { show(4,5)。 } else if(dianya=) { show(5,0)。 } else if(dianya=) { show(5,5)。 } else if(dianya=) { show(5,8)。 } else if(dianya=) 29 { show(6,0)。 } else if(dianya=) { show(6,3)。 } else if(dianya=) { show(6,5)。 } else if(dianya=) { show(6,7)。 } else if(dianya=) { show(7,0)。 } else if(dianya=) { show(7,3)。 } else if(dianya=) { show(7,5)。 } else if(dianya=) { show(7,7)。 } else if(dianya=) { show(8,0)。 } else if(dianya=) { show(8,2)。 } else if(dianya=) { show(8,5)。 } else if(dianya=) 30 { show(8,7)。 } else if(dianya=) { show(9,0)。 } else if(dianya=) { show(9,2)。 } else if(dianya=) { show(9,5)。 } else if(dianya=) { show(9,7)。 } else if(dianya=) { show(9,9)。 } else if(dianya) { write_(0x80+6)。 write_date(0x30+1)。 write_date(0x30+0)。 write_date(0x30+0)。 write_date(39。 %39。 )。 } } void show(int x,int y) 31 { write_(0x80+6)。 write_date(39。 39。 )。 write_date(0x30+x)。 write_date(0x30+y)。 write_date(39。 %39。 )。 } void show1(int x) { write_(0x80+6)。 write_date(39。 39。 )。 write_date(39。 39。 )。 write_date(0x30+x)。 write_date(39。 %39。 )。 } void delayus(uint z) { uint x,y。 for(x=z。 x0。 x) for(y=10。 y0。 y)。 } void delayms(uint z) //延时 32 { 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。 33 delayus(1)。 Q0()。 //关闭 ISP,IAP } void 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,IAP } uchar dcx(uint addr) { uchar dat。 ISP_CONTR=0X82。 ISP_CMD=0X01。 ISP_ADDRL=addr。 34 ISP_ADDRH=addr8。 EA=0。 ISP_TRIG=0X5A。 ISP_TRIG=0XA5。 delayus(1)。 dat=ISP_DATA。 Q0()。 return dat。 } void write_(uchar mand) //写指令到 12864 { LCD_RS=0。 LCD_WR=0。 LCD_EN=0。 P0=mand。 delayms(5)。 LCD_EN=1。 delayms(5)。 LCD_EN=0。 } 35 void write_date(uchar date) //写显示数据到 12864 { LCD_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。 i8。 i++) { SDA=datamp。 0x01。 //取最低位 , ds1302 从最低位开始传输 delayus(2)。 SCLK=1。 36 delayus(2)。 SCLK=0。 dat=1。 //数据右移一位 } } uchar ds1302readbyte() { uchar i,dat。 delayms(1)。 for(i=0。 i8。 i++) { dat=1。 //要返回的数据左移一位 if(SDA==1) dat|=0x80。 //要传输数据的当前值置为 1,若不是则为 0 SCLK=1。 delayus(2)。 SCLK=0。 delayus(2)。 } return dat。 } 37 uchar ds1302read(uchar cmd) { uchar dat。 RST=0。 //初始 CE 先置 0 SCLK=0。 //初始时钟线置 0 RST=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)。 S。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。