久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 這個單片機矩陣鍵盤的程序,為什么一半工作 一半不工作呢? [打印本頁]

作者: wang哈哈    時間: 2019-11-15 21:15
標題: 這個單片機矩陣鍵盤的程序,為什么一半工作 一半不工作呢?
uchar KeyScan(void)  
{
uchar cord_h,cord_l;
P2=0x0f;           
cord_h=P2&0x0f;   
if(cord_h!=0x0f)   
{
  DelayMs(10);        
  if((P2&0x0f)!=0x0f)
  {
    cord_h=P2&0x0f;  
    P2=cord_h|0xf0;
    cord_l=P2&0xf0;  

    while((P2&0xf0)!=0xf0);

    return(cord_h+cord_l);
   }
  }return(0xff);     
}

uchar KeyPro(void)
{
switch(KeyScan())
{
  case 0xee:return '1';break;
  case 0xed:return '4';break;
  case 0xeb:return '7';break;
  case 0xe7:return '.';break;

  case 0xde:return '2';break;
  case 0xdd:return '5';break;
  case 0xdb:return '8';break;
  case 0xd7:return '0';break;

  case 0xbe:return '3';break;
  case 0xbd:return '6';break;
  case 0xbb:return '9';break;
  case 0xb7:return '=';break;

  case 0x7e:return '+';break;
  case 0x7d:return '-';break;
  case 0x7b:return '*';break;
  case 0x77:return '/';break;

  default:return 0xff;break;
}
}


作者: yzwzfyz    時間: 2019-11-16 08:06
你是如何看出一半未工作的呢?

作者: pcbboy    時間: 2019-11-16 08:13
檢查下硬件吧,仿真的還是調板子?
作者: Wprogrammer    時間: 2019-11-16 08:30
是不是看門狗復位了
作者: Wprogrammer    時間: 2019-11-16 08:38
是不是看門狗復位了
作者: zhanghyg    時間: 2019-11-16 09:36
硬件問題
作者: 小黑屋525    時間: 2019-11-16 09:57
我怎么感jio只能執行到第一條呢??
作者: 小黑屋525    時間: 2019-11-16 10:14
emmmm,錯了錯了,剛剛那條不算,你的cord_I應該永遠都是0xf0,
作者: bh2030693    時間: 2019-11-16 23:17
uchar code Tab_PortKeyOut[4]={0xdf,0xef,0xbf,0x7f};//列線掃描電壓,分為第1,2,3,4根列線
for(i = 0; i < 4; i++)
    {
        P2 = Tab_PortKeyOut[i];     //輸出掃描電位。
作者: wulin    時間: 2019-11-17 14:17
你這個程序的寫法是玩不轉的,給你改寫,用數碼管顯示仿真。


  1. #include <reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. unsigned char code table[]={//共陰數碼管段碼"0~f-."
  5.                 0x3f,0x06,0x5b,0x4f,
  6.                 0x66,0x6d,0x7d,0x07,
  7.                 0x7f,0x6f,0x77,0x7c,
  8.                 0x39,0x5e,0x79,0x71,0x40,0x80};

  9. void delayms(uint k)
  10. {
  11.         uint i,j;
  12.         for(i=k;i>0;i--)
  13.                 for(j=125;j>0;j--);
  14. }

  15. uchar KeyScan()  
  16. {
  17.         uchar cord_h,cord_l;
  18.         P2=0x0f;               
  19.         if(P2!=0x0f)   
  20.         {
  21.                 delayms(10);
  22.                 if(P2!=0x0f)
  23.                 {
  24.                         cord_l=P2;  
  25.                         cord_l|=0xf0;
  26.                         P2=cord_l;  
  27.                         cord_l=P2;   
  28.                         cord_h=cord_l;
  29.                         while(P2==cord_l);
  30.                         return cord_h;
  31.                 }
  32.         }
  33. }

  34. void KeyPro()
  35. {
  36.         static uchar num=16;
  37.         switch(KeyScan())
  38.         {
  39.                 case 0xee:num= 0;break;
  40.                 case 0xed:num= 1;break;
  41.                 case 0xeb:num= 2;break;
  42.                 case 0xe7:num= 3;break;
  43.                
  44.                 case 0xde:num= 4;break;
  45.                 case 0xdd:num= 5;break;
  46.                 case 0xdb:num= 6;break;
  47.                 case 0xd7:num= 7;break;
  48.                
  49.                 case 0xbe:num= 8;break;
  50.                 case 0xbd:num= 9;break;
  51.                 case 0xbb:num=10;break;
  52.                 case 0xb7:num=11;break;
  53.                
  54.                 case 0x7e:num=12;break;
  55.                 case 0x7d:num=13;break;
  56.                 case 0x7b:num=14;break;
  57.                 case 0x77:num=15;break;
  58.        
  59.                 default:break;
  60.         }
  61.         P0=table[num];
  62. }

  63. void main()
  64. {
  65.         while(1)
  66.         {
  67.                 KeyPro();
  68.         }
  69. }
復制代碼





作者: lele5211314    時間: 2019-11-17 15:44
建議參考網上現成的程序
作者: bh2030693    時間: 2019-11-17 21:47
原來你們的寫法不同啊,學習一下你們的寫法:
  1. #include <intrins.h>
  2. #include <reg51.h>

  3. #define uint unsigned int
  4. #define uchar unsigned char

  5. #define KEY_LENGTH 16
  6. uchar code TableKeyData[2][KEY_LENGTH] = {
  7.     {0xee, 0xed, 0xeb, 0xe7, 0xde, 0xdd, 0xdb, 0xd7, 0xbe, 0xbd, 0xbb, 0xb7, 0x7e, 0x7d, 0x7b, 0x77},
  8.     {'1', '4', '7', '.', '2', '5', '8', '0', '3', '6', '9', '=', '+', '-', '*', '/'}
復制代碼




作者: bh2030693    時間: 2019-11-18 08:27
提交的時候很完整,怎么出來就顯示不全了,重新提交一下:
  1. #include <intrins.h>
  2. #include <reg51.h>

  3. #define uint unsigned int
  4. #define uchar unsigned char

  5. #define KEY_LENGTH 16
  6. uchar code TableKeyData[2][KEY_LENGTH] = {
  7.     {0xee, 0xed, 0xeb, 0xe7, 0xde, 0xdd, 0xdb, 0xd7, 0xbe, 0xbd, 0xbb, 0xb7,0x7e, 0x7d, 0x7b, 0x77},
  8.     {'1', '4', '7', '.', '2', '5', '8', '0', '3', '6', '9', '=', '+', '-', '*', '/'}};
  9. #define ID_KEY_DATA 0
  10. #define ID_KEY_NAME 1

  11. // @12.000MHz
  12. void Delay10ms(void) {
  13.   uchar i, j;

  14.   i = 20;
  15.   j = 113;
  16.   do {
  17.     while (--j) {
  18.     }
  19.   } while (--i);
  20. }

  21. uchar KeyScan(void) {
  22.   uchar ucData;
  23.   uchar i;

  24.   // 全部列下拉
  25.   P2 = 0x0f;
  26.   _nop_();
  27.   ucData = P2;
  28.   if (ucData == 0x0f) {
  29.     return KEY_LENGTH;
  30.   }
  31.   Delay10ms();
  32.   // 確定無抖動干擾
  33.   if (P2 != ucData) {
  34.     return KEY_LENGTH;
  35.   }
  36.   // 釋放列下拉,轉換為當前按鍵的行下拉
  37.   P2 = ucData | 0xf0;
  38.   _nop_();
  39.   // 讀取鍵值
  40.   ucData = P2;
  41.   Delay10ms();
  42.   // 確定按鍵唯一準確
  43.   if (P2 != ucData) {
  44.     return KEY_LENGTH;
  45.   }
  46.   // 查表確定按鍵索引(ID),查到有效ID則退出,否則索引等于KEY_LENGTH
  47.   for (i = 0; i < KEY_LENGTH; i++) {
  48.     if (ucData == TableKeyData[ID_KEY_DATA][i]) {
  49.       break;
  50.     }
  51.   }
  52.   // 重置全部列下拉
  53.   P2 = 0x0f;
  54.   _nop_();
  55.   // 等待按鍵釋放
  56.   while (P2 != 0x0f) {
  57.   }
  58.   // 返回按鍵ID
  59.   return i;
  60. }

  61. void main(void) {
  62.   uchar ucKey;

  63.   while (1) {
  64.     ucKey = KeyScan();
  65.     if (ucKey < KEY_LENGTH) {
  66.       P1 = ucKey;   // 臨時測試,用P1觀察結果
  67.       // 可以送顯示結果,或者串口發送結果,或用swicth執行按鍵任務...
  68.       // LcdDisplay(0, 0, TableKeyData[ID_KEY_NAME][ucKey]);
  69.     }
  70.   }
  71. }
復制代碼




作者: mms198259    時間: 2019-11-18 11:15
檢查下硬件吧,仿真的還是調板子?
作者: wang哈哈    時間: 2019-11-30 16:58
嗯 可以了  是我硬件的錯誤  
謝謝大家





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日本久久www成人免 成人久久久久 | 一级日韩 | 欧美成人激情视频 | 一区中文| 日韩免费 | 日韩二三区 | www.久久精品视频 | 亚洲精品久 | 婷婷桃色网 | 草久视频 | 九九av | av网站免费在线观看 | 亚洲看片网站 | 国产良家自拍 | 日韩精品区 | 91极品尤物在线播放国产 | 国产精品色哟哟网站 | 日韩av第一页 | 狠狠综合网 | 久久久激情 | 久久久久久亚洲精品不卡 | av在线免费观看网站 | 在线观看视频一区二区三区 | 亚洲国产视频一区二区 | 污视频在线免费观看 | 免费黄色大片 | 久久国产精品视频 | 在线观看国产精品视频 | 午夜久久久久久久久久一区二区 | 天天操天天摸天天爽 | 凹凸日日摸日日碰夜夜 | 亚洲欧美日韩精品 | 欧美日韩午夜精品 | 91久久久久久久久 | 一区二区三区中文字幕 | 成人免费视频网站在线观看 | 欧美日韩中文在线 | 国产精品久久国产精品 | 祝你幸福电影在线观看 | 欧美一区二区三区在线观看 | 久久久久久国产精品免费免费狐狸 |