本代码为编码开关代码,编码开关也就是数字音响中的 360度旋转的数字音量以及显示器上用的(单键飞梭开 关)等类似鼠标滚轮的手动计数输入设备。 我使用的编码开关为5个引脚的,其中2个引脚为按下 转轮开关(也就相当于鼠标中键)。另外3个引脚用来 检测旋转方向以及旋转步数的检测端。引脚分别为a,b,c b接地a,c分别接到P2.0和P2.1口并分别接两个10K上拉 电阻,并且a,c需要分别对地接一个104的电容,否则 因为编码开关的触点抖动会引起轻微误动作。本程序不 使用定时器,不占用中断,不使用延时代码,并对每个 细分步数进行判断,避免一切误动作,性能超级稳定。 我使用的编码器是APLS的EC11B可以参照附件的时序图 编码器控制流水灯最能说明问题,下面是以一段流水 灯来演示。
上传时间: 2017-07-03
上传用户:gaojiao1999
【问题描述】 在一个N*N的点阵中,如N=4,你现在站在(1,1),出口在(4,4)。你可以通过上、下、左、右四种移动方法,在迷宫内行走,但是同一个位置不可以访问两次,亦不可以越界。表格最上面的一行加黑数字A[1..4]分别表示迷宫第I列中需要访问并仅可以访问的格子数。右边一行加下划线数字B[1..4]则表示迷宫第I行需要访问并仅可以访问的格子数。如图中带括号红色数字就是一条符合条件的路线。 给定N,A[1..N] B[1..N]。输出一条符合条件的路线,若无解,输出NO ANSWER。(使用U,D,L,R分别表示上、下、左、右。) 2 2 1 2 (4,4) 1 (2,3) (3,3) (4,3) 3 (1,2) (2,2) 2 (1,1) 1 【输入格式】 第一行是数m (n < 6 )。第二行有n个数,表示a[1]..a[n]。第三行有n个数,表示b[1]..b[n]。 【输出格式】 仅有一行。若有解则输出一条可行路线,否则输出“NO ANSWER”。
标签: 点阵
上传时间: 2014-06-21
上传用户:llandlu
As a general rule, PhD students and their supervisors tend to focus primarily, or even exclusively, on the content of the research that will go into the doctoral thesis. Other issues are often taken for granted: how to organize your work, give a presentation, work in a team, cope with your supervisor, and how to effectively manage your time.When asked, former PhD students usually claim that the general experience of being a graduate student, which includes learning how to solve complex problems and work well with others, was of greater value to their careers than the actual topic of their thesis.
标签: exclusively supervisors primarily students
上传时间: 2013-12-16
上传用户:qlpqlq
I implement Dijkstra s Single Source Shortest Path, say SSP, algorithm for directed graphs using a simple data structure, say simple scheme, Fibonacci heaps, say F-heap scheme, and Pairing heaps, say P-heap scheme, and measure the relative performance of the three implementations.
标签: implement algorithm Dijkstra Shortest
上传时间: 2014-01-01
上传用户:BIBI
/****************temic*********t5557***********************************/ #include <at892051.h> #include <string.h> #include <intrins.h> #include <stdio.h> #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //STC12C2051AD的SFR定义 sfr WDT_CONTR = 0xe1;//stc2051的看门狗?????? /**********全局常量************/ //写卡的命令 #define write_command0 0//写密码 #define write_command1 1//写配置字 #define write_command2 2//密码写数据 #define write_command3 3//唤醒 #define write_command4 4//停止命令 #define TRUE 1 #define FALSE 0 #define OK 0 #define ERROR 255 //读卡的时间参数us #define ts_min 250//270*11.0592/12=249//取近似的整数 #define ts_max 304//330*11.0592/12=304 #define t1_min 73//90*11.0592/12=83:-10调整 #define t1_max 156//180*11.0592/12=166 #define t2_min 184//210*11.0592/12=194 #define t2_max 267//300*11.0592/12=276 //***********不采用中断处理:采用查询的方法读卡时关所有中断****************/ sbit p_U2270B_Standby = P3^5;//p_U2270B_Standby PIN=13 sbit p_U2270B_CFE = P3^3;//p_U2270B_CFE PIN=6 sbit p_U2270B_OutPut = P3^7;//p_U2270B_OutPut PIN=2 sbit wtd_sck = P1^7;//SPI总线 sbit wtd_si = P1^3; sbit wtd_so = P1^2; sbit iic_data = P1^2;//lcd IIC sbit iic_clk = P1^7; sbit led_light = P1^6;//测试绿灯 sbit led_light1 = P1^5;//测试红灯 sbit led_light_ok = P1^1;//读卡成功标志 sbit fengmingqi = P1^5; /***********全局变量************************************/ uchar data Nkey_a[4] = {0xA0, 0xA1, 0xA2, 0xA3};//初始密码 //uchar idata card_snr[4]; //配置字 uchar data bankdata[28] = {1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7}; //存储卡上用户数据(1-7)7*4=28 uchar data cominceptbuff[6] = {1,2,3,4,5,6};//串口接收数组ram uchar command; //第一个命令 uchar command1;// //uint temp; uchar j,i; uchar myaddr = 8; //uchar ywqz_count,time_count; //ywqz jishu: uchar bdata DATA; sbit BIT0 = DATA^0; sbit BIT1 = DATA^1; sbit BIT2 = DATA^2; sbit BIT3 = DATA^3; sbit BIT4 = DATA^4; sbit BIT5 = DATA^5; sbit BIT6 = DATA^6; sbit BIT7 = DATA^7; uchar bdata DATA1; sbit BIT10 = DATA1^0; sbit BIT11 = DATA1^1; sbit BIT12 = DATA1^2; sbit BIT13 = DATA1^3; sbit BIT14 = DATA1^4; sbit BIT15 = DATA1^5; sbit BIT16 = DATA1^6; sbit BIT17 = DATA1^7; bit i_CurrentLevel;//i_CurrentLevel BIT 00H(Saves current level of OutPut pin of U2270B) bit timer1_end; bit read_ok = 0; //缓存定时值,因用同一个定时器 union HLint { uint W; struct { uchar H;uchar L; } B; };//union HLint idata a union HLint data a; //缓存定时值,因用同一个定时器 union HLint0 { uint W; struct { uchar H; uchar L; } B; };//union HLint idata a union HLint0 data b; /**********************函数原型*****************/ //读写操作 void f_readcard(void);//全部读出1~7 AOR唤醒 void f_writecard(uchar x);//根据命令写不同的内容和操作 void f_clearpassword(void);//清除密码 void f_changepassword(void);//修改密码 //功能子函数 void write_password(uchar data *data p);//写初始密码或数据 void write_block(uchar x,uchar data *data p);//不能用通用指针 void write_bit(bit x);//写位 /*子函数区*****************************************************/ void delay_2(uint x) //延时,时间x*10us@12mhz,最小20us@12mhz { x--; x--; while(x) { _nop_(); _nop_(); x--; } _nop_();//WDT_CONTR=0X3C;不能频繁的复位 _nop_(); } ///////////////////////////////////////////////////////////////////// void initial(void) { SCON = 0x50; //串口方式1,允许接收 //SCON =0x50; //01010000B:10位异步收发,波特率可变,SM2=0不用接收到有效停止位才RI=1, //REN=1允许接收 TMOD = 0x21; //定时器1 定时方式2(8位),定时器0 定时方式1(16位) TCON = 0x40; //设定时器1 允许开始计时(IT1=1) TH1 = 0xfD; //FB 18.432MHz 9600 波特率 TL1 = 0xfD; //fd 11.0592 9600 IE = 0X90; //EA=ES=1 TR1 = 1; //启动定时器 WDT_CONTR = 0x3c;//使能看门狗 p_U2270B_Standby = 0;//单电源 PCON = 0x00; IP = 0x10;//uart you xian XXXPS PT1 PX1 PT0 PX0 led_light1 = 1; led_light = 0; p_U2270B_OutPut = 1; } /************************************************/ void f_readcard()//读卡 { EA = 0;//全关,防止影响跳变的定时器计时 WDT_CONTR = 0X3C;//喂狗 p_U2270B_CFE = 1;// delay_2(232); //>2.5ms /* // aor 用唤醒功能来防碰撞 p_U2270B_CFE = 0; delay_2(18);//start gap>150us write_bit(1);//10=操作码读0页 write_bit(0); write_password(&bankdata[24]);//密码block7 p_U2270B_CFE =1 ;// delay_2(516);//编程及确认时间5.6ms */ WDT_CONTR = 0X3C;//喂狗 led_light = 0; b.W = 0; while(!(read_ok == 1)) { //while(p_U2270B_OutPut);//等一个稳定的低电平?超时判断? while(!p_U2270B_OutPut);//等待上升沿的到来同步信号检测1 TR0 = 1; //deng xia jiang while(p_U2270B_OutPut);//等待下降沿 TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1;//定时器晚启动10个周期 //同步头 if((324 < a.W) && (a.W < 353)) ;//检测同步信号1 else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } //等待上升沿 while(!p_U2270B_OutPut); TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1;//b.N1<<=8; if(a.B.L < 195);//0.5p else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } //读0~7块的数据 for(j = 0;j < 28;j++) { //uchar i; for(i = 0;i < 16;i++)//8个位 { //等待下降沿的到来 while(p_U2270B_OutPut); TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1; if(t2_max < a.W/*)&&(a.W < t2_max)*/)//1P { b.W >>= 2;//先左移再赋值 b.B.L += 0xc0; i++; } else if(t1_min < a.B.L/*)&&(a.B.L < t1_max)*/)//0.5p { b.W >>= 1; b.B.L += 0x80; } else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } i++; while(!p_U2270B_OutPut);//上升 TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1; if(t2_min < a.W/*)&&(a.W < t2_max)*/)//1P { b.W >>= 2; i++; } else if(t1_min < a.B.L/*a.W)&&(a.B.L < t1_max)*/)//0.5P //else if(!(a.W==0)) { b.W >>= 1; //temp+=0x00; //led_light1=0;led_light=1;delay_2(40000); } else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } i++; } //取出奇位 DATA = b.B.L; BIT13 = BIT7; BIT12 = BIT5; BIT11 = BIT3; BIT10 = BIT1; DATA = b.B.H; BIT17 = BIT7; BIT16 = BIT5; BIT15 = BIT3; BIT14 = BIT1; bankdata[j] = DATA1; } read_ok = 1;//读卡完成了 read_error: _nop_(); } } /***************************************************/ void f_writecard(uchar x)//写卡 { p_U2270B_CFE = 1; delay_2(232); //>2.5ms //psw=0 standard write if (x == write_command0)//写密码:初始化密码 { uchar i; uchar data *data p; p = cominceptbuff; p_U2270B_CFE = 0; delay_2(31);//start gap>330us write_bit(1);//写操作码1:10 write_bit(0);//写操作码0 write_bit(0);//写锁定位0 for(i = 0;i < 35;i++) { write_bit(1);//写数据位1 } p_U2270B_CFE = 1; led_light1 = 0; led_light = 1; delay_2(40000);//测试使用 //write_block(cominceptbuff[4],p); p_U2270B_CFE = 1; bankdata[20] = cominceptbuff[0];//密码存入 bankdata[21] = cominceptbuff[1]; bankdata[22] = cominceptbuff[2]; bankdata[23] = cominceptbuff[3]; } else if (x == write_command1)//配置卡参数:初始化 { uchar data *data p; p = cominceptbuff; write_bit(1);//写操作码1:10 write_bit(0);//写操作码0 write_bit(0);//写锁定位0 write_block(cominceptbuff[4],p); p_U2270B_CFE= 1; } //psw=1 pssword mode else if(x == write_command2) //密码写数据 { uchar data*data p; p = &bankdata[24]; write_bit(1);//写操作码1:10 write_bit(0);//写操作码0 write_password(p);//发口令 write_bit(0);//写锁定位0 p = cominceptbuff; write_block(cominceptbuff[4],p);//写数据 } else if(x == write_command3)//aor //唤醒 { //cominceptbuff[1]操作码10 X xxxxxB uchar data *data p; p = cominceptbuff; write_bit(1);//10 write_bit(0); write_password(p);//密码 p_U2270B_CFE = 1;//此时数据不停的循环传出 } else //停止操作码 { write_bit(1);//11 write_bit(1); p_U2270B_CFE = 1; } p_U2270B_CFE = 1; delay_2(560);//5.6ms } /************************************/ void f_clearpassword()//清除密码 { uchar data *data p; uchar i,x; p = &bankdata[24];//原密码 p_U2270B_CFE = 0; delay_2(18);//start gap>150us //操作码10:10xxxxxxB write_bit(1); write_bit(0); for(x = 0;x < 4;x++)//发原密码 { DATA = *(p++); for(i = 0;i < 8;i++) { write_bit(BIT0); DATA >>= 1; } } write_bit(0);//锁定位0:0 p = &cominceptbuff[0]; write_block(0x00,p);//写新配置参数:pwd=0 //密码无效:即清除密码 DATA = 0x00;//停止操作码00000000B for(i = 0;i < 2;i++) { write_bit(BIT7); DATA <<= 1; } p_U2270B_CFE = 1; delay_2(560);//5.6ms } /*********************************/ void f_changepassword()//修改密码 { uchar data *data p; uchar i,x,addr; addr = 0x07;//block7 p = &Nkey_a[0];//原密码 DATA = 0x80;//操作码10:10xxxxxxB for(i = 0;i < 2;i++) { write_bit(BIT7); DATA <<= 1; } for(x = 0;x < 4;x++)//发原密码 { DATA = *(p++); for(i = 0;i < 8;i++) { write_bit(BIT7); DATA >>= 1; } } write_bit(0);//锁定位0:0 p = &cominceptbuff[0]; write_block(0x07,p);//写新密码 p_U2270B_CFE = 1; bankdata[24] = cominceptbuff[0];//密码存入 bankdata[25] = cominceptbuff[1]; bankdata[26] = cominceptbuff[2]; bankdata[27] = cominceptbuff[3]; DATA = 0x00;//停止操作码00000000B for(i = 0;i < 2;i++) { write_bit(BIT7); DATA <<= 1; } p_U2270B_CFE = 1; delay_2(560);//5.6ms } /***************************子函数***********************************/ void write_bit(bit x)//写一位 { if(x) { p_U2270B_CFE = 1; delay_2(32);//448*11.0592/120=42延时448us p_U2270B_CFE = 0; delay_2(28);//280*11.0592/120=26写1 } else { p_U2270B_CFE = 1; delay_2(92);//192*11.0592/120=18 p_U2270B_CFE = 0; delay_2(28);//280*11.0592/120=26写0 } } /*******************写一个block*******************/ void write_block(uchar addr,uchar data *data p) { uchar i,j; for(i = 0;i < 4;i++)//block0数据 { DATA = *(p++); for(j = 0;j < 8;j++) { write_bit(BIT0); DATA >>= 1; } } DATA = addr <<= 5;//0地址 for(i = 0;i < 3;i++) { write_bit(BIT7); DATA <<= 1; } } /*************************************************/ void write_password(uchar data *data p) { uchar i,j; for(i = 0;i < 4;i++)// { DATA = *(p++); for(j = 0;j < 8;j++) { write_bit(BIT0); DATA >>= 1; } } } /*************************************************/ void main() { initial(); TI = RI = 0; ES = 1; EA = 1; delay_2(28); //f_readcard(); while(1) { f_readcard(); //读卡 f_writecard(command1); //写卡 f_clearpassword(); //清除密码 f_changepassword(); //修改密码 } }
标签: 12345
上传时间: 2017-10-20
上传用户:my_lcs
用三点法实现机器人三维位置测量的研究摘 要 :提 出 了一 种 微 小 爬 壁 机 器 人 三 维 位 置 测 量 的新 方 法 。笔 者 通 过 深 入 分 析 研 究各 种 位 置 测 控 方 法 与 系 统 ,提 出采 用单 目视 觉方 法 中的 聚 焦法 ,以 CCD作 为 传 感 器 ,用 三 点 法 实现 对 机 器 人 的 三 维 位 置 测 量 。 验 证性 实验 结果表 明 ,本研 究提 出的测 量原 理和 系统是 正 确 可行 的 。 关键词 :机 器人 ;位置 测量 ;CCD传 感 器 ;单 目视 觉 ;摄 像 机 标 定 中 图分 类 号 :TP242.6 文 献 标 识 码 :B Abstract:A new 3D position measurementmethod Ofa wall—climbing micro robothas been researched.Researc— hing on the various position measuring and controlling method,theauthorhasputforwardanewprojecttomeas— ure the 3D position of the robot,in which the focusing method with singlecamera and CCD sensorhasbeen used to getthe position information.The elementary experiment has verified the principle and the system. Key words:robot;position detection;CCD sensor;single camera vision;camera caiibration 位置测量技 术是智 能机 器人 的关键 技术 ,是各 种 机器人控 制系统 中极 为重 要 的环节 ,也 是 国内外研 究 的热点所 在。 按 照测试 系统 与被 测机 器 人 的关 系 ,可 以将位 置 测量技术 分为接触 式和非接触式 两大类 。接触 式测量 系统 由于在测 量过程 中或多或少地 对机器人施 加 了载 荷 ,因而仅适用于静 态 位置测 量 。而动 态 位 置测量 系 统 主要分 5类 :①激光跟踪 系统 ;@ CCD交 互测量 收 稿 日期 :2001—07—03 基 金项 目:国家 863高科技 研 究 资助 项 目(9804-06);教 育 部 高 等 学校 骨干教 师 资助 计 3t,j项 目 作者 简 介 :张 智海 (1973一 ),男 ,工 学硕 士 ,主 要 研 究 方 向 为 智 能 机 器人 测 控 技 术 。 系统 ;③ 超声波 测量 系统 ;④ PSD(positionsensitivede— vice)位 置 测 量 系统 ;⑤ 带 有 接 近觉 传 感 器 的 测量 系 统 。位置测量 还可 以从另一个分类 角度划分为主动式 测量和被动 式测 量 。主动式测 量主要可 以分为结 构光方法和激光 自动聚焦法两类 。被 动式测量 主要 可 以分为双 目视 觉 、三 目视觉 、单 目视觉 等方法 。 对 比以上各种方法 的 优缺 点 ,针对 笔者 研制 的微 小爬壁机器人 的空 间三 维位 置 测量 的要 求 ,测量 系统 必须满足尺 寸小 、分 辨率 高 、稳定 性 和可 靠性 好 、时 间 响应快等特 点 ,提 出了采用 单 目视觉方法 中的聚焦法 , 选用 CCD作 为传感器 ,用 三点法实现对机器人 的三维 位置测量 ,并用 Matlab和 V
标签: 机器人
上传时间: 2022-02-12
上传用户:
SD卡 USB VGA DB9 RJ45 RJ22 通讯接口封装Altium Designer AD PCB封装库2D3D元件库文件PCB Library : 通讯接口.PcbLibDate : 2020/12/29Time : 14:31:34Component Count : 46Component Name-----------------------------------------------BM4-M003-BBM4-M003-BKBM4-M003-GBM4-M003-RBM4-M003-YDB9/P_ADB9/S_AMicro SDMICRO SIMMICRO SIM-BNano-SIM-ARJ-45A12RJ11-4P4C-LI-BKRJ11-4P4C-LI-GYRJ11-6P6C-BKRJ11-6P6C-GYRJ45_180RJ45-2RJ45-2LEDTF-1USB_A/P_AUSB_A/P_BUSB A/2-14USB A/2-17USB Type-C-6Pin_AUSB Type-C-16Pin_AUSB Type-C-24Pin_AUSB-A/S_AUSB-A/S_BUSB-A/S_CUSB-A/S_DUSB-A/S_EUSB-A/S_FUSB-B/S_AUSB-C/S_AUSB-C/S_BUSB-C/S_CUSB-micro_AUSB-MICRO_BUSB-micro_CUSB-MICRO_DUSB-MICRO_EUSB-MICRO_FUSB-MINI-AVGA15AVGA15B
上传时间: 2022-03-12
上传用户:得之我幸78
13.65M读卡器 MFRC522 Protel 99se 设计硬件原理图+PCB文件,的项目工程文件,包括原理图及PCB印制板图,可用Protel或 Altium Designer(AD)软件打开或修改,可作为你产品设计的参考。
标签: 读卡器 mfrc522 protel99se
上传时间: 2022-05-17
上传用户:jason_vip1
该文档为ARM应用相关论文的13篇参考文献摘录与分析总结文档,是一份不错的参考资料,感兴趣的可以下载看看,,,,,,,,,,,,,,,,,
标签: arm
上传时间: 2022-08-10
上传用户:
01.硬件系统和课程介绍.mp4 24.3M2019-07-26 10:55 02.系统级设计和功能分解.mp4 23.4M2019-07-26 10:55 03.动手DIY VR眼镜-原材料获取.mp4 23M2019-07-26 10:55 04.动手diy Vr眼镜-组装眼镜(上).mp4 28.5M2019-07-26 10:55 05.动手diy Vr眼镜-组装眼镜(下).mp4 28.7M2019-07-26 10:55 06.要流鼻血了-调试眼镜.mp4 25M2019-07-26 10:55 07.老司机必备-蓝牙手柄介绍.mp4 23.2M2019-07-26 10:55 08.动手做一个蓝牙手柄-原材料选购.mp4 30M2019-07-26 10:55 09.动手做一个蓝牙手柄-HID和SPP模块有啥区别(上).mp4 18.3M2019-07-26 10:55 10.动手做一个蓝牙手柄-hid和spp模块有啥区别(下).mp4 136.5M2019-07-26 10:55 11.动手做一个蓝牙手柄-鼠标模式分析.mp4 54.2M2019-07-26 10:55 12.动手做一个蓝牙手柄-键盘模式分析.mp4 25.7M2019-07-26 10:55 13.动手做一个蓝牙手柄-手柄模式分析.mp4 20.6M2019-07-26 10:55 14.动手做一个蓝牙手柄-手柄模式分析(下).mp4 80M2019-07-26 10:55 15.动手做一个蓝牙手柄-动手焊接硬件.mp4 32.4M2019-07-26 10:55 16.动手做一个蓝牙手柄-stm32工程建立及外设初始化(上).mp4 52.8M2019-07-26 10:55 17.动手做一个蓝牙手柄-stm32工程建立及外设初始化(下).mp4 53.6M2019-07-26 10:55 18.动手做一个蓝牙手柄-处理摇杆事件.mp4 56.4M2019-07-26 10:55 19.动手做一个蓝牙手柄-实现鼠标功能.mp4 76.1M2019-07-26 10:55 20.动手做一个蓝牙手柄-多媒体按键(上).mp4 29.6M2019-07-26 10:55 21.动手做一个蓝牙手柄-多媒体按键(下).mp4 90.7M2019-07-26 10:55 22.动手做一个蓝牙手柄-键盘模式,组合键处理(上).mp4 56.8M2019-07-26 10:55 23.动手做一个蓝牙手柄-键盘模式,组合键处理(下).mp4 46.6M2019-07-26 10:55 24.动手做一个蓝牙手柄-实现游戏手柄.mp4 57.1M2019-07-26 10:55 25.动手做一个蓝牙手柄-功能切换.mp4 41.4M2019-07-26 10:55 26.手柄加眼镜才是神器-联合测试.mp4 76M2019-07-26 10:55 27.课程总结.mp4 20.8M2019-07-26 10:55 代码和图纸.rar 2.9M2019-07-26 10:55 课件.rar
上传时间: 2013-06-01
上传用户:eeworm