智能灭火机器人设计第程序(编辑修改稿)内容摘要:
IRQ4(void) __attribute__ ((ISR))。 void IRQ4(void) { if(*P_INT_Ctrl amp。 C_IRQ4_1KHz) { *P_INT_Clear |=C_IRQ4_1KHz。 dd++。 if(dd=100) //100ms检测一次 { dd=0。 biya()。 } 9 } if(*P_INT_Ctrl amp。 C_IRQ4_2KHz) { *P_INT_Clear |=C_IRQ4_2KHz。 } else { *P_INT_Clear |=C_IRQ4_4KHz。 } } //***************IRQ5中断 *********************// void IRQ5(void) __attribute__ ((ISR))。 void IRQ5(void) { if(*P_INT_Ctrl amp。 C_IRQ5_4Hz) { //IRQ5_4HZ *P_INT_Clear |=C_IRQ5_4Hz。 bizhan()。 //避障 } else { //IRQ5_2HZ *P_INT_Clear |=C_IRQ5_2Hz。 hf()。 //比较检测到 AD的最小值 if(xp=0xc8)workstate=1。 // AD 值达到 200 以内就认为发现火源。 workstate=1进入检测范围 } } //***************A/D转换 *********************// void get_AD(void) { unsigned int ak[15]。 unsigned int i,j,temp,k,sum。 unsigned int Line,AD_Data。 *P_ADC_Ctrl=0x01。 //允许转换 for(Line=1。 Line7。 Line++) { *P_ADC_MUX_Ctrl=Line。 //选择通道 AD_Data=*P_ADC_MUX_Data。 //启动转换 for(i=0。 i15。 i++) { while(!(*P_ADC_MUX_Ctrlamp。 0x8000))。 //没有转换完则继续等待 AD_Data=*P_ADC_MUX_Data。 //读转换后的数据 10 AD_Data =AD_Data8。 //右移 8位,只取 8高位数据 ak[i]=AD_Data。 } for(i=0。 i15。 i++) //从小到大排序 { for(j=i+1。 j15。 j++) if(ak[i]ak[j]){temp=ak[i]。 ak[i]=ak[j]。 ak[j]=temp。 } } sum=0。 for(k=5。 k10。 k++) {sum=sum+ak[k]。 } chdata[Line] =sum/5。 *P_Watchdog_Clear=0x01。 } } /***********************************************************/ void hf(void) { unsigned int i,j,temp。 get_AD()。 for(i=1。 i=6。 i++) paixu[i]=chdata[i]。 for(i=1。 i=6。 i++) { for(j=i+1。 j=6。 j++) if(paixu[i]paixu[j]){temp=paixu[i]。 paixu[i]=paixu[j]。 paixu[j]=temp。 } } min=paixu[1]。 //min 为单前这次检测到的最低值 xp =xpmin ? xp:min。 //xp 为检测到的历史最低值 if(0xC9xp amp。 amp。 xp=0xFF) mm=1。 if(0xA0xp amp。 amp。 xp=0xC9) mm=2。 if(0x90xp amp。 amp。 xp=0xA0) mm=3。 if(0x7Fxp amp。 amp。 xp=0x90) mm=4。 if(0x67xp amp。 amp。 xp=0x7F) mm=5。 if(0x50xp amp。 amp。 xp=0x67) mm=6。 if(0x3Fxp amp。 amp。 xp=0x50) mm=7。 if(0x0Fxp amp。 amp。 xp=0x3F) mm=8。 if(0x0Cxp amp。 amp。 xp=0x0F) mm=9。 if(0x08xp amp。 amp。 xp=0x0C) mm=10。 if(0x00xp amp。 amp。 xp=0x08) mm=11。 } /******************避崖程序 *********************************/ void biya(void ) { 11 if(!(*P_IOB_Data amp。 0x8000)) //q1 1000 { stop()。 backward(20,20)。 turn_left(21)。 } if(!(*P_IOB_Data amp。 0x4000)) //q2 0100 { stop()。 backward(20,20)。 turn_left(21)。 } if(!(*P_IOB_Data amp。 0xc000)) //q12 1100 { stop()。 backward(20,20)。 turn_left(21)。 } if(!(*P_IOB_Data amp。 0x2020)) //h1 0010 { stop()。 forward(15,15)。 turn_left(10)。 } if(!(*P_IOB_Data amp。 0x1000)) //h2 0001 { stop()。 forward(15,15)。 turn_left(10)。 } if(!(*P_IOB_Data amp。 0x3000)) //h1 2 0011 { stop()。 forward(15,15)。 turn_left(10)。 } else。 } /******************避障程序 ******************************/ void bizhan(void ) { if(Get_IOA_Data(12)==0 amp。 amp。 Get_IOA_Data(11) ==1 ) //zuobing { 12 backward(15,15)。 while(Get_IOA_Data(12)==0) { turn_right(30)。 forward(20,20)。 turn_left(21)。 } } if(Get_IOA_Data(11)==0 amp。 amp。 Get_IOA_Data(12) ==1 ) //youbing { backward(15,15)。 while(Get_IOA_Data(11)==0) { turn_left(21)。 forward(20,20)。 turn_right(30)。 } } if(Get_IOA_Data(11)==0 amp。 amp。 Get_IOA_Data(12) ==0) { backward(15,15)。 turn_left(21)。 forward(20,20)。 turn_right(30)。 } } /******************延时子程序 ******************************/ void delay_s(unsigned int t ) // s级延时程序 { unsigned int i。 for(i=0。 it。 i++) delay_ms(1000)。 } void delay_ms(unsigned int t) // ms级延时程序 { Delaynumber=0。 while(Delaynumber=10*t)*P_Watchdog_Clear=0x01。 //没有延时完则继续等待 } 13 附录 2 .DEFINE P_INT_Ctrl 0x7010。智能灭火机器人设计第程序(编辑修改稿)
相关推荐
............................................. 27 图 31 水温调节仿真图 ............................................................................................ 27 图 32 按确定键后的水温调节界面 .......................
v+5v+5v+5vHREFFODDVSYNCPWDNGNDGNDGNDGNDGNDVTO+5VRSTSDASCLY0Y1Y2Y3Y4Y5Y6Y7PCLKVACAP2 VACAP3VACAP1FREXMULTAGCENIICBASUBAGNDSGNDADGNDDEGNDDOGNDDGND1 23 45 67 89 1011 1213 1415 1617 1819 2021 2223
外部程序存储器或 16 位地址的外部数据存储器(例如执行 MOVX@DPTR 指令)时,P2口送出高 8 位地址数据。 Flash 编程或校验时, P2 亦接收高位地址和其它控制信号。 P3 口: P3 口是一组带有内部上拉电阻的 8 位双向 I/ 0 口。 P3 口输出缓冲级可驱动(吸收或输出电流) 4 个 TTL 逻辑门电路。 对 P3 口写入“ l”时
和 MSSP 模块等其他 模块。 其常用的 PDIP40 引脚排列如图 [5]。 图 脚的 PIC16F877 引脚全功能图 设计中的应用 本次设计主要用到 PIC16F877 芯片外围功能模块有 RA、 RB、 RC 和 RD 端口, RA 和RD 端口用于与 液晶显示器相连, RB 端口作为按键输入端, RC端口用于与报警模块、温度模块和时钟模块相连。
码、单位名称、火情级别以及报警时间等 ),同时产生声光报警信号,并按事先预留的电话号 码自动拨号通知单位有关负责人。 消防指挥中心根据接收到的火警信息,立即在消防信息数据库中查询单位位置、周围道路、交通、水源情况等基本信息,根据所获得的信息迅速确定最佳救火方案,通过网络将出警命令直接下达各消防中队。 6 小结 随着科学技术水平迅猛发展,安全防范技术也得到迅速发展。
建立连接 ................................................. 21 建立变量表 .............................................. 22 组态画面 .................................................. 22 下载调试 .....................