这是单片机AT89C52的矩形按键程序,哪位大神帮忙讲一下,或翻译一下。急!谢谢。

这是单片机AT89C52的矩形按键程序,哪位大神帮忙讲一下,或翻译一下。急!谢谢。,第1张

它的原理是一行一行扫描,

如选定第一行后,此行的I/O口输出为0,

如果那列的按键按下,则会反映到输入的列上对应的I/O口,

单片机得到的结果是行、列的值,就可以推导出那个按键按下了。

以此类推,再扫描下一行,直到所有行都扫描结束。

首先是矩阵按键,不是矩形按键。

GPIO_KEY=0x0f,这对于并行口,不算是赋值,是输出状态:高四位为低电平0,低四位为高电平1。高四位输出0,就是为了扫描按键的,所以,再输出几次也不会影响扫描按键的,因只要有按键按下了,从低四位读入的就不是全为高电平了,才能判断出是否有按键按下了。

这里不能GPIO_KEY=0x0f看成是变量赋值一样,因为,它外部是有按键的,按键会强制改变GPIO_KEY口的状态的,而读这个口时,就是读入的外部的按键的状态。与变量赋值是截然不同的。

void  keyscan(void)

{

    D_1=0X0f

    delay(1)

    if(D_1!=0X0F)

    {

         delay(1)

         if(D_1!=0X0F)

         {

            D_1=0x0f  

            switch(D_1)

           {    

                 case(0x07):M=0break 

                 case(0x0b):M=1break

                 case(0x0d):M=2break

                 case(0x0e):M=3break

                 delay(1)

           }

           D_1=0xf0

           switch(D_1)

          {

              case(0x70):M=Mbreak

              case(0xb0):M=M+4break

              case(0xd0):M=M+8break

              case(0xe0):M=M+12break

          }

          while((b<50)&&(D_1!=0xf0))

          {                            //花括号扩错了吧

              dis_buf =M    

              dis_buf = dis_buf&0x0f

           }

        }

     }

}

你用的反转法吧  应该就是那个花括号问题了


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11567543.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存