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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2164|回復: 2
打印 上一主題 下一主題
收起左側

51單片數碼管顯示矩陣按鍵正常,換stc15單片機就不管用了

[復制鏈接]
跳轉到指定樓層
樓主
ID:304041 發表于 2018-4-15 11:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
哪位大哥幫忙給我看看
/*行線接P1.0-P1.3,列線接P1.4-P1.7。                                       
根據掃描鍵盤返回的鍵值編碼查鍵值編碼表,從而得到鍵值并送數碼管顯示。
開機時,數碼管顯示“-”。
當鍵按下時,數碼管顯示按下鍵的鍵值,蜂鳴器響一聲。*/

//#include <regx52.h>
#include <STC15F2K60S2.H>

#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int

sbit BEEP = P3^7;                  //蜂鳴器驅動線

uchar  key;

unsigned char code disp_code[]={
                                                      0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
                                                      0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf
                                                           };

unsigned char code key_code[]={
                                                      0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,
                                                      0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77
                                                             };

/**********************************************************

  延時子函數

**********************************************************/
void delayms(uint ms)
{
   uchar t;
   while(ms--)
   {
     for(t=0;t<120;t++);
   }
}

void port_mode()            // 端口模式
{
        P0M1=0x00; P0M0=0x00;P1M1=0x00; P1M0=0x00;P2M1=0x00; P2M0=0x00;P3M1=0x00; P3M0=0x00;
        P4M1=0x00; P4M0=0x00;P5M1=0x00; P5M0=0x00;P6M1=0x00; P6M0=0x00;P7M1=0x00; P7M0=0x00;
}
/**********************************************************

  x*0.14MS 延時子函數

**********************************************************/
void delay0(uchar x)   
{
   uchar i;
   while(x--)
   {
     for(i=0;i<13;i++) {;}
   }
}

/***********************************************************
                                                                                                                        
  蜂鳴器驅動子函數
                                                                                                                       
**********************************************************/
void beep()
{
  uchar i;
  for (i=0;i<180;i++)
  {
    delay0(5);
    BEEP=!BEEP;       //BEEP取反
  }
   BEEP=1;            //關閉蜂鳴器
   delayms(250);      //延時     
}
                                                                                                            
/**********************************************************
                                                                                                                                                                         
鍵盤掃描子函數
                                                                                                                                                                                                          
**********************************************************/                                                                                               
uchar  keyscan()                                                                                                                                                          
{                                                                                                                                                                                                                                                                                
   uchar  scan1,scan2,keycode,j;                                                                                                        
                                                                                                                                                                                                         
   P1=0xf0;                     
   scan1=P1;                                                                                                                                                                                                                                                                                                                                                                                                                                       
   if((scan1&0xf0)!=0xf0)           //判鍵是否按下                                                                                                   
   {                                                                                                         
     delayms(30);         //延時30ms
     scan1=P1;                                    
     if((scan1&0xf0)!=0xf0)                             //二次判鍵是否按下
     {                                                                          
        P1=0x0f;                                                                       
        scan2=P1;                                       
        keycode=scan1|scan2;          //組合成鍵編碼
                                                                       
        for(j=0;j<=15;j++)                                         
        {
           if(keycode== key_code[j])  //查表得鍵值
           {
              key=j;
              return(key);
           }
        }
     }
   }
   else  P1=0xff;
                                                
   return (16);
}

/**********************************************************

  判鍵是否按下子函數

**********************************************************/
void  keydown()
{  
   P1=0xf0;
   if((P1&0xf0)!=0xf0)
   {
     keyscan();
     P1=disp_code[key];
     beep();
   }
}

/**********************************************************

主函數

**********************************************************/
main()
{
         port_mode();
   P0 = 0xbf;
   P2 = 0xf0;            //數碼管顯示"-"
   P1 = 0xff;

   while(1)
   {
     keydown();     
   }
}

/*********************************************************/         

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

使用道具 舉報

沙發
ID:213173 發表于 2018-4-15 21:30 | 只看該作者
本帖最后由 wulin 于 2018-4-16 06:36 編輯

STC15系列是1T單片機,速度快許多,P1=0xf0;后要加1到2個空操作指令等待寄存器穩定再讀scan1=P1;,P1=0x0f;也是如此,否則讀不準。另外軟件延時程序要修改。
回復

使用道具 舉報

板凳
ID:304041 發表于 2018-4-16 14:20 | 只看該作者
wulin 發表于 2018-4-15 21:30
STC15系列是1T單片機,速度快許多,P1=0xf0;后要加1到2個空操作指令等待寄存器穩定再讀scan1=P1;,P1=0x0f; ...

謝謝。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久国内精品 | 91在线看片| 日韩欧美中文在线 | 在线免费观看成人 | 国产一二区视频 | 影视先锋av资源噜噜 | 成人av电影网 | 欧美a级成人淫片免费看 | av一二三区 | www.yw193.com| 91麻豆精品国产91久久久久久久久 | 日韩精品无码一区二区三区 | 久久久久国产一区二区三区 | 在线一区视频 | 欧美日韩在线一区二区 | 精品一区二区久久久久久久网站 | 丝袜一区二区三区 | 91精品国产乱码麻豆白嫩 | 国产一区91精品张津瑜 | 毛片网在线观看 | 午夜丰满少妇一级毛片 | 婷婷久久网 | 91免费在线看 | 一区二区三区日韩 | 国产视频一区二区在线观看 | 亚洲成人动漫在线观看 | 青青草精品视频 | 性xxxxx| 国产色在线 | 天天插天天舔 | 亚洲91视频 | 在线视频日韩 | 国产成人艳妇aa视频在线 | 中文av电影 | av影片在线 | 青青草视频网站 | 一区二区福利视频 | 亚洲欧美一区二区三区视频 | 亚洲91精品 | 日日操网站 | 久久网站免费视频 |