搜索
bottom↓
回复: 0

遇到了一个单片机的问题,觉得很奇葩,进来看看什么原因

[复制链接]

出0入0汤圆

发表于 2013-10-31 02:21:55 | 显示全部楼层 |阅读模式
  1. #include <reg52.h>
  2. #include <stdio.h>
  3. #include "sys.h"
  4. #define  KEY_BOARD P2
  5. u8 SenData,Flag;
  6. u8 key_scan()
  7. {
  8.     u8 KEY_VALUE;
  9.         u8 KEY;
  10.     u8 mark = 1;
  11.     KEY_BOARD = 0xf7;
  12.     if(0xf0 != (KEY = KEY_BOARD&0xf0) && mark)
  13.     {
  14.                 put_s("key1 is ok!");
  15.                 put_char('\n');
  16.         mark = 0;
  17.         switch (KEY)
  18.                 {
  19.             case 0x70:
  20.                 KEY_VALUE = 0x10;       //一行一列
  21.                 break;
  22.             case 0xb0:
  23.                 KEY_VALUE = 0x11;       //二行一列
  24.                 break;
  25.             case 0xd0:
  26.                 KEY_VALUE = 0x12;       //三行一列
  27.                 break;
  28.             case 0xe0:
  29.                 KEY_VALUE = 0x13;       //四行一列
  30.                 break;
  31.                 }       
  32.                 return KEY_VALUE;
  33.     }
  34.     KEY_BOARD = 0xfb;
  35.     if(0xf0 != (KEY = KEY_BOARD&0xf0) && mark)
  36.     {
  37.                 put_s("key2 is ok!");
  38.                 put_char('\n');
  39.         mark = 0;
  40.         switch (KEY)
  41.                 {
  42.             case 0x70:
  43.                 KEY_VALUE = 0x14;       //一行二列
  44.                 break;
  45.             case 0xb0:
  46.                 KEY_VALUE = 0x15;       //二行二列
  47.                 break;
  48.             case 0xd0:
  49.                 KEY_VALUE = 0x16;       //三行二列
  50.                 break;
  51.             case 0xe0:
  52.                 KEY_VALUE = 0x17;       //四行二列
  53.                 break;
  54.                 }
  55.                     return KEY_VALUE;
  56.     }
  57.     KEY_BOARD = 0xfd;
  58.     if(0xf0 != (KEY = KEY_BOARD&0xf0) && mark)
  59.     {
  60.                 put_s("key3 is ok!");
  61.                 put_char('\n');
  62.         mark = 0;
  63.         switch (KEY)
  64.                 {
  65.             case 0x70:
  66.                 KEY_VALUE = 0x18;       //一行二列
  67.                 break;
  68.             case 0xb0:
  69.                 KEY_VALUE = 0x19;       //二行二列
  70.                 break;
  71.             case 0xd0:
  72.                 KEY_VALUE = 0x1a;       //三行二列
  73.                 break;
  74.             case 0xe0:
  75.                 KEY_VALUE = 0x1b;       //四行二列
  76.                 break;
  77.                 }       
  78.                  return KEY_VALUE;
  79.     }
  80.     KEY_BOARD = 0xfe;
  81.     if((0xf0 != (KEY = KEY_BOARD&0xf0)) && mark)
  82.     {
  83.                 put_s("key4 is ok!");
  84.                 put_char('\n');
  85.         mark = 0;
  86.         switch (KEY)
  87.                 {
  88.             case 0x70:
  89.                 KEY_VALUE = 0x1c;       //一行二列
  90.                 break;
  91.             case 0xb0:
  92.                 KEY_VALUE = 0x1d;       //二行二列
  93.                 break;
  94.             case 0xd0:
  95.                 KEY_VALUE = 0x1e;       //三行二列
  96.                 break;
  97.             case 0xe0:
  98.                 KEY_VALUE = 0x1f;       //四行二列
  99.                 break;
  100.                 }
  101.                     return KEY_VALUE;
  102.     }

  103.     return KEY_VALUE;
  104. }

  105. void delay()
  106. {
  107.         u16 i,j;
  108.         for(i=0;i<2000;i++)
  109.         {
  110.                 for(j=0;j<100;j++);
  111.        
  112.         }

  113. }

  114. /*********************************
  115. *函数名:tranlate
  116. *函数功能:将十进制转换成
  117. *
  118. *********************************/
  119. void tranlate(int a,char *ftable)
  120. {
  121.     char table[5],num=5,fnum=0,hh=0;
  122.     while(num--)
  123.     {
  124.         table[num]=a%10+'0';
  125.         a=a/10;
  126.     }
  127.     for (num=0;num<5;num++)
  128.     {
  129.         if((table[num]!='0')||hh)
  130.         {
  131.             *(ftable+fnum)=table[num];
  132.             fnum++;
  133.             hh=1;
  134.         }
  135.     }
  136.     *(ftable+fnum)='\0';
  137. }

  138. void main()
  139.    {
  140.                    u8 key_pan;
  141.                 char fuck[20];
  142.                 Bps_Init(9600);         //设置串口为9600波特率
  143.                 EA   = 1;                 //开启总中断
  144.                 while(1)
  145.           {
  146.              key_pan = key_scan();
  147.              if(( key_pan &0xf0) !=  0)
  148.              {
  149.                  delay();
  150.                  key_pan = key_scan();
  151.                  if(0 != (key_pan & 0xf0))
  152.                  {
  153.                                          tranlate(key_pan,fuck);
  154.                                         put_s(fuck);
  155.                                         put_char('\n');
  156.                                         put_s("key is ok!");
  157.                                         put_char('\n');


  158.                  }
  159.              }
  160.                          delay();
  161.                          put_s("keyjj is ok!");
  162.                          put_char('\n');
  163.                    }

  164.         }


  165.          

  166. /****************************************************
  167.                串口中断程序
  168. ******************************************************/

  169. void ser_int (void) interrupt 4 using 1
  170. {

  171. u8 ReData;
  172. if(RI == 1)        //RI接受中断标志
  173. {
  174.         RI = 0;                    //清除RI接受中断标志
  175.         ReData = SBUF;  //SUBF接受/发送缓冲器
  176.         SenData=ReData;
  177.         Flag=1;
  178.    
  179. }
  180. }



复制代码
  1. if(0 != (key_pan & 0xf0))
  2.                  {
  3.                                          tranlate(key_pan,fuck);
  4.                                         put_s(fuck);
  5.                                         put_char('\n');
  6.                                         put_s("key is ok!");
  7.                                         put_char('\n');


  8.                  }
复制代码
中,如果不写tranlate(key_pan,fuck);这个函数,程序就一直输出key is ok!  不知道原因啊。。。。。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 05:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表