落魄IV

  • 2019-03-10
  • 发表了主题帖: 新人小白请教一段电子密码锁的代码!

    在网上参考的一段代码,主要实现电子密码锁的键盘扫描功能,但是本人才疏学浅,孤陋寡闻,对C语言一知半解,特来请求各位大神指教!{:1_146:} 附上代码: //扫描第一行 void key_scan()        //           行扫描 { P1=0xfe; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(100); if(temp!=0xf0) { temp=P1; switch(temp) { case 0xee: key_manage1(); break; case 0xde: key_manage2(); break; case 0xbe: key_manage3(); break; case 0x7e: key_manage4(); break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } } //扫描第二行 P1=0xfd; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(100); if(temp!=0xf0) { temp=P1; switch(temp) { case 0xed: key_manage5(); break; case 0xdd: key_manage6(); break; case 0xbd: key_manage7(); break; case 0x7d: key_manage8(); break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } } //扫描第三行 P1=0xfb; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(100); if(temp!=0xf0) { temp=P1; switch(temp) { case 0xeb: key_manage9(); break; case 0xdb: key_manage10(); break; case 0xbb: key_manage11(); break; case 0x7b: key_manage12(); break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } } //扫描第四行 P1=0xf7; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(100); if(temp!=0xf0) { temp=P1; switch(temp) { case 0xe7: key_manage13(); break; case 0xd7: key_manage14(); break; case 0xb7: key_manage15(); break; case 0x77: key_manage16(); break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } } } 也许还需要部分元件的参考图!(如图所示) 本人脸皮较厚,所以特来讲讲我对第一段代码的理解,请求各位批评!(因为第二第三段与第一段的都有相似之处,所以略) P1=0xfe,转化为八位二进制就是11111110,对应P.10口是低电平,然后temp=P1=0xfe, 接着temp逻辑与0xf0化成八位二进制就是11111110&11110000,结果是11110000, 然后很明显不满足if(temp != 0xf0)条件,也不满足while(temp != 0xf0), 然后我就不会了……因为扫描第二第三第四行的代码除了P1不同其他都没太多区别, 所以我就。。。一筹莫展,不太明白这段程序,希望哪位大神可以给我讲解一下,十分感谢!:kiss:

  • 2019-03-04
  • 回复了主题帖: 菜鸟求助:AT89C51和C52在protues运用有什么区别?

    常见泽1 发表于 2019-3-4 17:50 P0口那些标号加上吧
    原来真的是标口的问题,因为程序里标注了相应的引脚号但是protues却没有标导致仿真出错。十分感谢

  • 回复了主题帖: 菜鸟求助:AT89C51和C52在protues运用有什么区别?

    chenbingjy 发表于 2019-3-4 17:39 应该没有关系的。我觉得你应该先单独调试各个外设,比如指示灯,EEPROM,喇叭,矩阵键盘,液晶。 慢慢找问 ...
    好的,我尽力尝试一下,十分感谢

  • 发表了主题帖: 菜鸟求助:AT89C51和C52在protues运用有什么区别?

    本人菜鸟,很菜的那种,在用protues进行单片机仿真的时候把AT89C51换成AT89C52,原本是没有问题的,可以仿真,可是换了之后就没办法仿真了。我做的是电子密码锁,换单片机前后程序是没变的,引脚应该也没链接错误,但是不明白为什么仿真失败。 51和52的引脚不是一样的吗,功能相差不大吧,难道是程序的问题?(程序跟单片机型号有关吗?) 请大神指教!

  • 回复了主题帖: 新人小白求助。。lcd_wdat如何声明,大神帮帮忙

    tiankai001 发表于 2019-3-1 09:44 关于变量的声明和定义,全局变量、局部变量,尤其是数组变量的声明和定义,你要仔细去看看
    问题解决了,也明白了自己之前的理解错误在哪,十分感谢

  • 2019-02-28
  • 发表了主题帖: 新人小白求助。。lcd_wdat如何声明,大神帮帮忙

    本人是新人小白,单片机C语言基础很差,在书上看到案例程序编译出错了,如果没判断错的话是声明的问题。。。吗?所以请问lcd_wdat应该如何声明,格式是怎样的,在这段程序里应该怎么更改呢? 大神求助{:1_85:}{:1_85:}{:1_85:} void pass_in(void) {         uchar m,n,sec10,key,pass_ok,T0_count,RELAY,cdis5,cdis6;         uchar TR0 = 1;         uchar PASS_NEW[6]={0,1,2,3,4,5};         void lcd_pos(unsigned char i,unsigned char j);         for(m = 0;m

  • 2019-02-26
  • 回复了主题帖: 关于C216的问题,想做一个密码锁,新人求大佬指教!!

    tiankai001 发表于 2019-2-26 10:27 数组定义可以这样uchar key_code[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};或者直接uc ...
    十分感谢!!:kiss::kiss:

  • 回复了主题帖: 关于C216的问题,想做一个密码锁,新人求大佬指教!!

    邱海涛qht 发表于 2019-2-26 09:10 首先你的数组没有定义,如果定义了你再看看你的数组是否有16个数组元素。如果没有16个,比如你只定义10个数 ...
    感谢指出!!:loveliness:顺便问一下,如果我这样定义数组:uchar key_code[a]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};或者直接uchar key_code[16];请问哪一种有错,或者两种都错?本人基础很差,恳请指教{:1_146:}

  • 回复了主题帖: 关于C216的问题,想做一个密码锁,新人求大佬指教!!

    tiankai001 发表于 2019-2-26 09:12 看不到数组的定义,无法判断错误原因。 看看你的数组元素是否有16个,或者是二维数组
    感谢指出!!:loveliness:顺便问一下,如果我这样定义数组:uchar key_code[a]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};或者直接uchar key_code[16];请问哪一种有错,或者两种都错?本人基础很差,恳请指教{:1_146:}

  • 回复了主题帖: 关于C216的问题,想做一个密码锁,新人求大佬指教!!

    懒猫爱飞 发表于 2019-2-26 08:24 key_code[]这个数组在哪里定义的?
    :loveliness:原来如此,感谢指出!!

  • 2019-02-25
  • 发表了主题帖: 关于C216的问题,想做一个密码锁,新人求大佬指教!!

    LOCK.C(24): error C216: subscript on non-array or too many dimensions 请问这是什么原因呢, 在网上找了很多的帖子, 有说是数组越界, 有说是头文件的引用不对,和程序的错误, 由于这个程序是参考书上的,我不知道怎么改,请大神指教{:1_85:}{:1_85:} 下面放上代码: #include #include #include #include #define uchar unsigned char #include /*键盘扫描模块*/ uchar keyscan(void) {         uchar scan1,scan2,keycode,a,key,key_code;         P1 = 0xf0;         scan1 = P1;         if (scan1 != 0xf0)//判断是否按下         {                 //delayms(10);//延时10ms                 scan1 = P1;                 if (scan1 != 0xf0)//二次判断是否按下                 {                         P1 = 0x0f;                         scan2 = P1;                         keycode = scan1 | scan2;//组合键扫描编码                         for (a=0;a

最近访客

< 1/1 >

统计信息

已有10人来访过

  • 芯币:31
  • 好友:--
  • 主题:4
  • 回复:7
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言