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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2702|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)矩陣鍵盤掃描仿真加源代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
鍵盤掃描仿真原理圖如下(proteus的仿真工程文件可以到附件中下載):




51單片機(jī)源代碼如下:
  1. #include <reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int   
  5. #define out P2
  6. #define outk P1
  7. #define N 3

  8. void delayms(uint);
  9. uchar scan(void);

  10. void main(void)
  11. {
  12.         uchar key,i;
  13.         while(1)
  14.         {
  15.                 key=scan();
  16.                 if(key!=0xff) {
  17.                 switch(key) {
  18.                 case 0:
  19.                 for(i=0;i<N;i++) {out=0xfe; delayms(100);
  20.                 out=0xff; delayms(100);
  21.                 } break;
  22.                 case 1: for(i=0;i<N;i++) {out=0xfd; delayms(100);
  23.                 out=0xff; delayms(100);
  24.                 } break;
  25.                 case 2: for(i=0;i<N;i++) {out=0xfb; delayms(100); out=0xff; delayms(100);
  26.                 }break;
  27.                 case 3: for(i=0;i<N;i++) {out=0xf7; delayms(100);out=0xff; delayms(100);
  28.                 } break;
  29.                 case 4: for(i=0;i<N;i++) {out=0xef; delayms(100);out=0xff; delayms(100);
  30.                 } break;
  31.                 case 5: for(i=0;i<N;i++) {out=0xdf; delayms(100); out=0xff; delayms(100);
  32.                 }break;
  33.                 case 6: for(i=0;i<N;i++) {out=0xbf; delayms(100);out=0xff; delayms(100);
  34.                 } break;
  35.                 case 7: for(i=0;i<N;i++) {out=0x7f; delayms(100);out=0xff; delayms(100);
  36.                 } break;
  37.                 case 8: for(i=0;i<N;i++) {out=0xfc; delayms(100);out=0xff; delayms(100);
  38.                 } break;
  39.                 case 9: for(i=0;i<N;i++) {out=0xf3; delayms(100);out=0xff; delayms(100);
  40.                 } break;
  41.                 case 10: for(i=0;i<N;i++) {out=0xcf; delayms(100);out=0xff; delayms(100);
  42.                 } break;
  43.                 case 11: for(i=0;i<N;i++) {out=0x3f; delayms(100); out=0xff; delayms(100);
  44.                 }break;
  45.                 case 12:
  46.                 for(i=0;i<N;i++) {out=0x00; delayms(100);
  47.                 out=0xff; delayms(100);
  48.                 } break;
  49.                 case 13: for(i=0;i<N;i++) {out=0xf8; delayms(100); out=0xff; delayms(100);
  50.                 }break;
  51.                 case 14: for(i=0;i<N;i++) {out=0xf0; delayms(100); out=0xff; delayms(100);
  52.                 }break;
  53.                 case 15: for(i=0;i<N;i++) {out=0x0f; delayms(100);out=0xff; delayms(100);
  54.                 } break;

  55.                 }}
  56.         }
  57. }
  58. // 延遲
  59. void delayms(uint j)
  60. {
  61.         uchar i;
  62.         for(;j>0;j--)
  63.         {
  64.                 i=250;
  65.                 while(--i);
  66.                 i=249;
  67.                 while(--i);
  68.            }
  69. }

  70. //鍵盤掃描函數(shù)
  71. //行線為0 掃描列
  72. uchar scan(void)                                          
  73. {

  74.         uchar k=16,m,n,in,a;
  75.         outk=0x0f;                //行線為0 掃描列
  76.         a=outk&0x0f;        //讀入列線值
  77.         if(a!=0x0f)                //檢測有無鍵按下
  78.         {
  79.         delayms(100);        //去抖
  80.         }
  81.         if(a!=0x0f) {        //檢測有無鍵按下
  82.       for(m=0;m<4;m++)      //m為列號
  83.                 {
  84.                         outk=~(0x10<<m); //按位左移

  85.                         for(n=0;n<4;n++)
  86.                         {
  87.                                 in=outk;
  88.                                 in=in>>n; //按位右移
  89.                                 if((in&0x01)==0)
  90.                                 {
  91.                                         delayms(10);
  92.                                         if((in&0x01)==0){k=4*n+m;break;}
  93.                                 }
  94.                         }
  95.                         if(k!=16){break;}
  96.                 }
  97.         }
  98.         return(k);
  99. }

  100.         /*
  101. // 列線為0 掃描行
  102.         uchar k=16,m,n,in,a;
  103.         outk=0xf0;                //列線為0 掃描行
  104.         a=outk&0xf0;        //讀入行線值
  105.         if(a!=0xf0)                //檢測有無鍵按下
  106.         {
  107.         delayms(100);        //去抖
  108.         }
  109.         if(a!=0xf0) {        //檢測有無鍵按下
  110.                 for(m=0;m<4;m++)      //m為行號
  111.                 {
  112.                         outk=~(0x01<<m); //按位左移

  113. ……………………

  114. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
鍵盤掃描.zip (44.67 KB, 下載次數(shù): 20)


評分

參與人數(shù) 1黑幣 +5 收起 理由
vktpas + 5

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:399872 發(fā)表于 2018-9-19 10:37 | 只看該作者
樓主分享的很有用,
回復(fù)

使用道具 舉報(bào)

板凳
ID:400024 發(fā)表于 2018-9-19 15:24 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 黄色日本视频 | 三级视频网站 | 美日韩精品 | 精久久久 | 国产日韩欧美精品 | 日韩成人精品 | 亚洲喷水 | 亚洲免费高清 | 精品一区二区电影 | 深爱激情综合 | 综合网视频 | 天堂一区二区三区 | av一区二区三区四区 | 米奇成人网 | 欧美精品1区2区3区 精品国产欧美一区二区 | 欧美操操操 | 中文成人在线 | 久久久成人免费一区二区 | 日韩毛片在线视频 | 午夜视频大全 | 老牛嫩草一区二区三区av | www.日本在线播放 | 免费看欧美一级片 | 日韩精品一区二区三区视频播放 | 国产亚洲精品久久yy50 | 婷婷在线免费 | 天天插天天操 | 天天操夜夜拍 | 成年网站在线观看 | 日日天天 | 一区二区久久 | 国产专区在线 | 日本涩涩网 | 精品中文字幕在线观看 | 欧美日韩国产一区二区 | av一区二区三区四区 | 久久99国产精一区二区三区 | 国产精品视频一区二区三区 | 久久久精品 | 国产精品国产三级国产播12软件 | 久久久精品一区 |