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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

4*4矩陣掃描 STM32f103RCT6的程序是對的 改成ZET6就不對了

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 5 黑幣 回復(fù)本帖可獲得 5 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:849635 發(fā)表于 2021-9-9 22:08 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
RCT6的程序是對的,改成原子ZET6核心板就不對了
#include "key4_4.h"
#include "delay.h"
#include "sys.h"
//8個(gè)引腳 4個(gè)為行 4個(gè)為列
//行輸出端口定義
#define X1_GPIO_PORT GPIOA           
#define X2_GPIO_PORT GPIOA   
#define X3_GPIO_PORT GPIOA           
#define X4_GPIO_PORT GPIOB
//列輸入端口定義
#define Y1_GPIO_PORT GPIOB           
#define Y2_GPIO_PORT GPIOB   
#define Y3_GPIO_PORT GPIOB           
#define Y4_GPIO_PORT GPIOB

//行輸出引腳定義
#define X1_GPIO_PIN GPIO_Pin_11
#define X2_GPIO_PIN GPIO_Pin_12
#define X3_GPIO_PIN GPIO_Pin_15
#define X4_GPIO_PIN GPIO_Pin_5

//列輸入引腳定義
#define Y1_GPIO_PIN GPIO_Pin_6
#define Y2_GPIO_PIN GPIO_Pin_7
#define Y3_GPIO_PIN GPIO_Pin_8
#define Y4_GPIO_PIN GPIO_Pin_9

//行輸出時(shí)鐘定義
#define X1_RCC RCC_APB2Periph_GPIOA
#define X2_RCC RCC_APB2Periph_GPIOA
#define X3_RCC RCC_APB2Periph_GPIOA
#define X4_RCC RCC_APB2Periph_GPIOB

//列輸入時(shí)鐘定義
#define Y1_RCC RCC_APB2Periph_GPIOB
#define Y2_RCC RCC_APB2Periph_GPIOB
#define Y3_RCC RCC_APB2Periph_GPIOB
#define Y4_RCC RCC_APB2Periph_GPIOB

//移植代碼只需要修改上面的端口和引腳和時(shí)鐘即可,下面的代碼不用修改。
//矩陣鍵盤所用的8個(gè)引腳可連續(xù)可不連續(xù),看實(shí)際需要和個(gè)人愛好自己定義。

unsigned char Y1,Y2,Y3,Y4;
void Key_Init(void)
{
   GPIO_InitTypeDef GPIO_InitStructure;   
   RCC_APB2PeriphClockCmd(X1_RCC|X2_RCC|X3_RCC|X4_RCC|Y1_RCC|Y2_RCC|Y3_RCC|Y4_RCC|RCC_APB2Periph_AFIO, ENABLE);
   GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
//    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
////開啟AFIO時(shí)鐘
//
//GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
////改變指定管腳的映射 GPIO_Remap_SWJ_Disable SWJ 完全禁用(JTAG+SW-DP)
//
//GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
////改變指定管腳的映射 GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP 禁用 + SW-DP 使能
   
/*****************************4行輸出*********************************************/
   GPIO_InitStructure.GPIO_Pin =  X1_GPIO_PIN ;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(X1_GPIO_PORT, &GPIO_InitStructure);
   
   GPIO_InitStructure.GPIO_Pin =  X2_GPIO_PIN ;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(X2_GPIO_PORT, &GPIO_InitStructure);
   
   GPIO_InitStructure.GPIO_Pin =  X3_GPIO_PIN ;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(X3_GPIO_PORT, &GPIO_InitStructure);
   
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Pin = X4_GPIO_PIN ;   
   GPIO_Init(X4_GPIO_PORT, &GPIO_InitStructure);
   
/**************************************4列輸入*************************************/
   GPIO_InitStructure.GPIO_Pin =  Y1_GPIO_PIN ;   
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;     
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(Y1_GPIO_PORT, &GPIO_InitStructure);   
   
   GPIO_InitStructure.GPIO_Pin =  Y2_GPIO_PIN ;   
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;     
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(Y2_GPIO_PORT, &GPIO_InitStructure);   
   
   GPIO_InitStructure.GPIO_Pin =  Y3_GPIO_PIN ;   
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;     
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(Y3_GPIO_PORT, &GPIO_InitStructure);   
   
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;     
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Pin = Y4_GPIO_PIN;      
   GPIO_Init(Y4_GPIO_PORT, &GPIO_InitStructure);   
}

int Key_Scan(void)
{
   uchar KeyVal;
   GPIO_SetBits(X1_GPIO_PORT,X1_GPIO_PIN);  //先讓X1輸出高
   GPIO_SetBits(X2_GPIO_PORT,X2_GPIO_PIN);  //先讓X2輸出高
   GPIO_SetBits(X3_GPIO_PORT,X3_GPIO_PIN);  //先讓X3輸出高
   GPIO_SetBits(X4_GPIO_PORT,X4_GPIO_PIN);  //先讓X4輸出高


    if((GPIO_ReadInputDataBit(Y1_GPIO_PORT,Y1_GPIO_PIN)|GPIO_ReadInputDataBit(Y2_GPIO_PORT,Y2_GPIO_PIN)|GPIO_ReadInputDataBit(Y3_GPIO_PORT,Y3_GPIO_PIN)|GPIO_ReadInputDataBit(Y4_GPIO_PORT,Y4_GPIO_PIN))==0x0000)  
        return -1; //如果X1到X4全為零則沒有按鍵按下  
     else
     {   
        delay_ms(5);    //延時(shí)5ms去抖動(dòng)
         if((GPIO_ReadInputDataBit(Y1_GPIO_PORT,Y1_GPIO_PIN)|GPIO_ReadInputDataBit(Y2_GPIO_PORT,Y2_GPIO_PIN)|GPIO_ReadInputDataBit(Y3_GPIO_PORT,Y3_GPIO_PIN)|GPIO_ReadInputDataBit(Y4_GPIO_PORT,Y4_GPIO_PIN))==0x0000)
        return -1;
     }
     
     GPIO_ResetBits(X1_GPIO_PORT,X1_GPIO_PIN);
     GPIO_ResetBits(X2_GPIO_PORT,X2_GPIO_PIN);
     GPIO_ResetBits(X3_GPIO_PORT,X3_GPIO_PIN);
     GPIO_SetBits(X4_GPIO_PORT,X4_GPIO_PIN);
     
    Y1=GPIO_ReadInputDataBit(Y1_GPIO_PORT,Y1_GPIO_PIN);Y2=GPIO_ReadInputDataBit(Y2_GPIO_PORT,Y2_GPIO_PIN);
    Y3=GPIO_ReadInputDataBit(Y3_GPIO_PORT,Y3_GPIO_PIN);Y4=GPIO_ReadInputDataBit(Y4_GPIO_PORT,Y4_GPIO_PIN);
     if(Y1==1&&Y2==0&&Y3==0&&Y4==0)
            KeyVal='*';
     if(Y1==0&&Y2==1&&Y3==0&&Y4==0)
            KeyVal=0;
     if(Y1==0&&Y2==0&&Y3==0&&Y4==1)
            KeyVal='D';
     if(Y1==0&&Y2==0&&Y3==1&&Y4==0)
            KeyVal='#';
   
     while(((GPIO_ReadInputDataBit(Y1_GPIO_PORT,Y1_GPIO_PIN))|(GPIO_ReadInputDataBit(Y2_GPIO_PORT,Y2_GPIO_PIN))|(GPIO_ReadInputDataBit(Y3_GPIO_PORT,Y3_GPIO_PIN))|(GPIO_ReadInputDataBit(Y4_GPIO_PORT,Y4_GPIO_PIN))) > 0);
    //等待按鍵釋放
     GPIO_SetBits(X1_GPIO_PORT,X1_GPIO_PIN);
     GPIO_ResetBits(X2_GPIO_PORT,X2_GPIO_PIN);
     GPIO_ResetBits(X3_GPIO_PORT,X3_GPIO_PIN);
     GPIO_ResetBits(X4_GPIO_PORT,X4_GPIO_PIN);
   
    Y1=GPIO_ReadInputDataBit(Y1_GPIO_PORT,Y1_GPIO_PIN);Y2=GPIO_ReadInputDataBit(Y2_GPIO_PORT,Y2_GPIO_PIN);
    Y3=GPIO_ReadInputDataBit(Y3_GPIO_PORT,Y3_GPIO_PIN);Y4=GPIO_ReadInputDataBit(Y4_GPIO_PORT,Y4_GPIO_PIN);
     if(Y1==1&&Y2==0&&Y3==0&&Y4==0)
            KeyVal=1;
     if(Y1==0&&Y2==1&&Y3==0&&Y4==0)
            KeyVal=2;
     if(Y1==0&&Y2==0&&Y3==1&&Y4==0)
            KeyVal=3;
     if(Y1==0&&Y2==0&&Y3==0&&Y4==1)
            KeyVal='A';
      
      while(((GPIO_ReadInputDataBit(Y1_GPIO_PORT,Y1_GPIO_PIN))|(GPIO_ReadInputDataBit(Y2_GPIO_PORT,Y2_GPIO_PIN))|(GPIO_ReadInputDataBit(Y3_GPIO_PORT,Y3_GPIO_PIN))|(GPIO_ReadInputDataBit(Y4_GPIO_PORT,Y4_GPIO_PIN))) > 0);
        

     GPIO_ResetBits(X1_GPIO_PORT,X1_GPIO_PIN);
     GPIO_SetBits(X2_GPIO_PORT,X2_GPIO_PIN);
     GPIO_ResetBits(X3_GPIO_PORT,X3_GPIO_PIN);
     GPIO_ResetBits(X4_GPIO_PORT,X4_GPIO_PIN);
        
     Y1=GPIO_ReadInputDataBit(Y1_GPIO_PORT,Y1_GPIO_PIN);Y2=GPIO_ReadInputDataBit(Y2_GPIO_PORT,Y2_GPIO_PIN);
     Y3=GPIO_ReadInputDataBit(Y3_GPIO_PORT,Y3_GPIO_PIN);Y4=GPIO_ReadInputDataBit(Y4_GPIO_PORT,Y4_GPIO_PIN);
     if(Y1==1&&Y2==0&&Y3==0&&Y4==0)
            KeyVal=4;
     if(Y1==0&&Y2==1&&Y3==0&&Y4==0)
            KeyVal=5;
     if(Y1==0&&Y2==0&&Y3==1&&Y4==0)
            KeyVal=6;
     if(Y1==0&&Y2==0&&Y3==0&&Y4==1)
            KeyVal='B';
   
      while(((GPIO_ReadInputDataBit(Y1_GPIO_PORT,Y1_GPIO_PIN))|(GPIO_ReadInputDataBit(Y2_GPIO_PORT,Y2_GPIO_PIN))|(GPIO_ReadInputDataBit(Y3_GPIO_PORT,Y3_GPIO_PIN))|(GPIO_ReadInputDataBit(Y4_GPIO_PORT,Y4_GPIO_PIN))) > 0);
        
     GPIO_ResetBits(X1_GPIO_PORT,X1_GPIO_PIN);
     GPIO_ResetBits(X2_GPIO_PORT,X2_GPIO_PIN);
     GPIO_SetBits(X3_GPIO_PORT,X3_GPIO_PIN);
     GPIO_ResetBits(X4_GPIO_PORT,X4_GPIO_PIN);   

     Y1=GPIO_ReadInputDataBit(Y1_GPIO_PORT,Y1_GPIO_PIN);Y2=GPIO_ReadInputDataBit(Y2_GPIO_PORT,Y2_GPIO_PIN);
     Y3=GPIO_ReadInputDataBit(Y3_GPIO_PORT,Y3_GPIO_PIN);Y4=GPIO_ReadInputDataBit(Y4_GPIO_PORT,Y4_GPIO_PIN);
     if(Y1==1&&Y2==0&&Y3==0&&Y4==0)
            KeyVal=7;
     if(Y1==0&&Y2==1&&Y3==0&&Y4==0)
            KeyVal=8;
     if(Y1==0&&Y2==0&&Y3==1&&Y4==0)
            KeyVal=9;
     if(Y1==0&&Y2==0&&Y3==0&&Y4==1)
            KeyVal='C';

       while(((GPIO_ReadInputDataBit(Y1_GPIO_PORT,Y1_GPIO_PIN))|(GPIO_ReadInputDataBit(Y2_GPIO_PORT,Y2_GPIO_PIN))|(GPIO_ReadInputDataBit(Y3_GPIO_PORT,Y3_GPIO_PIN))|(GPIO_ReadInputDataBit(Y4_GPIO_PORT,Y4_GPIO_PIN))) > 0);
      
        return KeyVal;
}

/************************************
        按鍵表盤為:        1  2  3  A
                            4  5  6  B
                            7  8  9  C
                            *  0  #  D
************************************/
void Key_Test(void)
{
    int num;
      num = Key_Scan();
      switch(num)
      {
                case 0: printf("0\n"); break;                                            
                case 1: printf("1\n"); break;                                             
                case 2: printf("2\n"); break;                                          
                case 3: printf("3\n"); break;                                          
                case 4: printf("4\n"); break;                           
                case 5: printf("5\n"); break;                                            
                case 6: printf("6\n"); break;                                            
                case 7: printf("7\n"); break;                                       
                case 8: printf("8\n"); break;                                                
                case 9: printf("9\n"); break;                                                      
                case 'A': printf("A\n"); break;                                                      
                case 'B': printf("B\n"); break;                                          
                case 'C': printf("C\n"); break;                                                      
                case 'D': printf("D\n"); break;                                                        
                case '#': printf("#\n"); break;                                          
                case '*': printf("*\n"); break;                                       
      }
}



51.7z

222.48 KB, 下載次數(shù): 2

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

使用道具 舉報(bào)

沙發(fā)
ID:965024 發(fā)表于 2021-9-10 09:22 | 只看該作者
是不是庫文件有問題
回復(fù)

使用道具 舉報(bào)

板凳
ID:514901 發(fā)表于 2021-9-10 09:59 | 只看該作者
一般沒問題的,你說的不對是程序不能用還是鍵盤和數(shù)字對不上,后者的話建議檢測接線順序
回復(fù)

使用道具 舉報(bào)

地板
ID:849635 發(fā)表于 2021-9-10 11:43 | 只看該作者
鄭漢松 發(fā)表于 2021-9-10 09:59
一般沒問題的,你說的不對是程序不能用還是鍵盤和數(shù)字對不上,后者的話建議檢測接線順序

接線沒有問題的,但是16個(gè)按鍵只能打印一兩個(gè),還不對
回復(fù)

使用道具 舉報(bào)

5#
ID:849635 發(fā)表于 2021-9-10 11:50 | 只看該作者
hal_w 發(fā)表于 2021-9-10 09:22
是不是庫文件有問題

庫文件?HD,s嗎?
回復(fù)

使用道具 舉報(bào)

6#
ID:96682 發(fā)表于 2021-9-10 12:09 來自手機(jī) | 只看該作者
問題是芯片型號后綴不一樣能直接使用么?
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 午夜免费在线电影 | 国产精品久久久久久久久久99 | 91国内视频在线 | 国产激情视频网站 | 拍真实国产伦偷精品 | 亚洲福利在线观看 | 91精品国产综合久久久久久丝袜 | 欧美日韩一区二区在线 | 午夜影院在线视频 | 国产色婷婷久久99精品91 | 久久精品亚洲 | 91在线视频在线观看 | 成人亚洲视频 | 精品视频99 | 久久精品99 | caoporn视频在线 | 亚洲一区二区久久久 | 中文字幕亚洲在线 | 超碰激情 | 午夜黄色| 亚洲成人免费在线 | 精品一区二区三区四区五区 | 欧美二区在线 | 精品三级在线观看 | 亚洲高清视频在线观看 | jdav视频在线观看免费 | 亚洲精品国产第一综合99久久 | 国产视频中文字幕 | 日韩高清国产一区在线 | 一区二区国产精品 | 亚洲a视频 | 久久国内| 国产成人福利在线观看 | 久久精品99 | 久久成人一区 | 婷婷综合五月天 | www.色五月.com | 麻豆久久久9性大片 | 亚洲成人福利在线观看 | 欧美涩涩网 | 日韩在线精品 |