按键扫描的keil.c51程序
#include sbit SPK=P3^4; //SPK定义为P3口的第4位,就是驱动蜂鸣器的那个脚sbit JDQ=P3^5; //JDQ定义为P3口的第5位,就是驱动继电器的那个脚code unsigned char table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴数码管 0-9 a-f 表code unsigned char key_tab[17]={0xed,0x7e,0x7d,0x7b, 0xbe,0xbd,0xbb,0xde, 0xdd,0xdb,0x77,0xb7, 0xee,0xd7,0xeb,0xe7,0XFF};//========================此数组为键盘编码, //本人采用类式类似电话按键的编码方式,方便以后设计 // 1 2 3 a 0x01 0x02 0x03 0x0a // 4 5 6 b 对应16进制码: 0x04 0x05 0x06 0x0b // 7 8 9 d 0x07 0x08 0x09 0x0d // * 0 # f 0x0c 0x00 0x0e 0x0f //打个比方,如果你按下0键,P0口读到数据为0xed //如果你按下2键,P0口读到数据为0x7d,按下9键为0xdb, //我们将读到的P0口数据经过查表法就能得到相应的16进制码 //键盘的读取,我们采用分时扫描unsigned char l_tmpdate[8]={0,0,0,0,0,0,0,0};//定义数组变量unsigned char l_key=0x0; //定义变量,存放键值 unsigned char l_keyold=0xFF; //做为按键松开否的凭证 void ReadKey(void); //扫描键盘 获取键值void delay();//延时子函数,5个空指令void display(unsigned char *lp,unsigned char lc);//数字的显示函数;lp为指向数组的地址,lc为显示的个数 //这个函数在第二节用过不用再说了吧!void main(void) //入口函数{ while(1){ ReadKey(); //调用键盘扫描 display(&l_key,1); //输出显示获取的键值码 if(l_key==0x0e) //这里我们检测是否按了0x0e键, JDQ=0; //是,我们就驱动继电器打开 if(l_key==0x0c) //检测是否按下了0x0c键, JDQ=1; //是,我们就驱动继电器断开 }}void ReadKey(void) //读键盘值{ unsigned char i,j,key; //分三个部份来理解, //第一部份,用扫描来读取键盘, j=0xfe; key=0xff; //设定初值 for (i=0;i<4;i++){ P0=j; //P0口低4位循环输出0,扫描键盘 //leday(); if ((P0&0xf0)!=0xf0){ //如果有键按下,P0口高4位不会全为1, key=P0; //读取P0口,退出循环,否则循环下次 break; } j=_crol_(j,1); //此函数功能为左循环移位 } //第二部份,检测是否干扰或按键放开 if (key==0xff){ //如果读取不到P0口的值,比如是干扰或是键盘又松开,我们做相应复位,返回 l_keyold=0xff; SPK=1; //按键有松开,停止蜂鸣器响 return; } else SPK=0; //打开蜂鸣器 //第三部份,检测是新按键按下,获取新的键盘编码值 if(l_keyold!=key){ //检测按键放开否,如果一样表明没放开,不做处理,不一样表时另一个键按下做编码转换 l_keyold=key; //获取键码做为放开下次的凭证 for(i=0;i<17;i++){ //查表获得相应的16进制值存放l_key变量中 if (key==key_tab[i]){ l_key=i; break; } } } //程序运行到这里,就表明有键值被读取存放于l_key变量中,主程序就可以检测此变量做相应外理, //此时我们回到主程序} void display(unsigned char *lp,unsigned char lc)//显示{ unsigned char i; //定义变量 P2=0; //端口2为输出 P1=P1&0xF8; //将P1口的前3位输出0,对应138译门输入脚,全0为第一位数码管 for(i=0;i<lc;i++){ //循环显示 P2=table[lp[i]]; //查表法得到要显示数字的数码段 delay(); //延时5个空指令 if(i==7) //检测显示完8位否,完成直接退出,不让P1口再加1,否则进位影响到第四位数据 break; P2=0; //清0端口,准备显示下位 P1++; //下一位数码管 }}void delay(void) //空5个指令{ _nop_();_nop_();_nop_();_nop_();_nop_();}
要用扫描仪扫描文件得下载什么软件?
我给你一个我自己写的吧 有注释假设按下的是S1键进行如下检测(4*4键盘)先在P3口输出p3 00001111低四位 行会有变化cord_h =00001111&00001110 =00001110 if !=00001111延时0.1uscord_h=00001110&00001111=00001110 if !=00001111P3再输出11111110P3 =00001110|11110000=11111110输出高四位cord_l=P3&0xf0 //此时P3口就是输入值01111110 而不是上面的11111110cord_l=01111110&11110000=01110000cord_h+cord_l=00001110+01110000=01111110=0x7e //此编码即为S1的编码#include //包含头文件#define uchar unsigned char#define uint unsigned intunsigned char const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71};//0-Fuchar keyscan(void);void delay(uint i);void main(){ uchar key; P2=0x00;//1数码管亮 按相应的按键,会显示按键上的字符 while(1){ key=keyscan();//调用键盘扫描, switch(key) { case 0x7e:P0=table[0];break;//0 按下相应的键显示相对应的码值 case 0x7d:P0=table[1];break;//1 case 0x7b:P0=table[2];break;//2 case 0x77:P0=table[3];break;//3 case 0xbe:P0=table[4];break;//4 case 0xbd:P0=table[5];break;//5 case 0xbb:P0=table[6];break;//6 case 0xb7:P0=table[7];break;//7 case 0xde:P0=table[8];break;//8 case 0xdd:P0=table[9];break;//9 case 0xdb:P0=table[10];break;//a case 0xd7:P0=table[11];break;//b case 0xee:P0=table[12];break;//c case 0xed:P0=table[13];break;//d case 0xeb:P0=table[14];break;//e case 0xe7:P0=table[15];break;//f } }}uchar keyscan(void)//键盘扫描函数,使用行列反转扫描法{ uchar cord_h,cord_l;//行列值 P3=0x0f; //行线输出全为0 cord_h=P3&0x0f; //读入列线值 if(cord_h!=0x0f) //先检测有无按键按下 { delay(100); //去抖 cord_h=P3&0x0f; //读入列线值 if(cord_h!=0x0f) { P3=cord_h|0xf0; //输出当前列线值 cord_l=P3&0xf0; //读入行线值 return(cord_h+cord_l);//键盘最后组合码值 } }return(0xff); //返回该值}void delay(uint i)//延时函数{while(i--);}在P3口做的键盘你的去抖检测没有做好
手机下载什么软件可以扫描条码
微信就可以,我查查软件,还有QQ浏览器主页右上角也有扫描的。
二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理。
二维码具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。
同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。
【扫扫看价格软件下载】手机扫描条码需要下载什么软件?
展开全部为了人民隐私安全,身份证暂不支持手机扫描 身份证扫描件与银行卡扫描专用机盒,如果没有扫描设备,您可以使用数码相机、手机或电脑摄像头来拍摄,照片必须保证可以看清证件号码和姓名,银行卡需清晰可见卡号。
若您没有身份证,您可以使用户口本上您的人个信息那一页进行扫描或者拍照上传也是可以的。
谢谢采纳...
转载请注明出处51数据库 » 按键扫描是什么软件下载