色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

4*4鍵盤數碼管顯示程序解析

算法&編程學院 ? 2018-04-19 12:56 ? 次閱讀

這個例程也是開發板上面的一個經典例程,我對程序的框架進行了修改,更適合以后的調用。具體的4*4鍵盤掃描原理較為基礎這里不再贅述,這里我認為比較重要的是要養成一個良好的寫程序的習慣,想4*4鍵盤掃描這樣的函數可以寫成一個固定的C或者H文件,便于以后調用。先看看主程序:

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

程序功能:掃描4X4鍵盤并將鍵值在數碼管上顯示

------------------------------------------------

測試說明:按動K1~K16按鍵,觀察數碼管顯示

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

#include 《msp430x14x.h》

#include “Keypad.C”

//數碼管7位段碼:0--f

unsigned char scandata[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

//記錄顯示位數的全局變量

unsigned char cnt = 0;

//顯示緩存

unsigned char Dispbuf[2];

//引用外部變量的聲明

extern unsigned char key_Pressed;

extern unsigned char key_val;

extern unsigned char key_Flag;

/********************主函數********************/

void main(void)

{

/*下面六行程序關閉所有的IO口*/

P1DIR = 0XFF;P1OUT = 0XFF;

P2DIR = 0XFF;P2OUT = 0XFF;

P3DIR = 0XFF;P3OUT = 0XFF;

P4DIR = 0XFF;P4OUT = 0XFF;

P5DIR = 0XFF;P5OUT = 0XFF;

P6DIR = 0XFF;P6OUT = 0XFF;

P6DIR |= BIT2;P6OUT |= BIT2; //關閉電平轉換

WDTCTL = WDT_ADLY_1_9; //設置內部看門狗工作在定時器模式,1.9ms中斷一次

IE1 |= WDTIE; //使能看門狗中斷

_EINT(); //打開全局中斷

Init_Keypad();

while(1)

{

Key_Event();

if(key_Flag == 1)

{

key_Flag = 0;

Dispbuf[1] = key_val / 10;

Dispbuf[0] = key_val % 10;

}

}

}

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

函數名稱:watchdog_timer

功 能:看門狗中斷服務函數,在這里輸出數碼管的

段選和位選信號

參 數:無

返回值 :無

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

#pragma vector=WDT_VECTOR

__interrupt void watchdog_timer(void)

{

P4OUT = 0xff;

P5OUT = scandata[Dispbuf[cnt]]; //輸出段選信號

P4OUT &= ~(1 《《 (cnt+2)); //輸出位選信號

cnt++; //位計數變量在0~1之間循環

if(cnt == 2) cnt = 0;

}

主程序較為簡單,具體的原理參見上一個筆記,在主程序中與鍵盤掃描相關的函數被擊中在Keypad.C中,需要說明的是在主函數中需要對Keypad.C的部分變量做聲明,這樣才能使用Keypad.C中的變量。Keypad.C代碼如下:

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

4*4鍵盤掃描函數

作者:孫浩

修改時間:2010.8.2

程序說明:

此程序以開發板的例程做部分修改,更方便程序調用。

在調用之前需要注意需要在主函數中對程序中使用的變量做外部變量聲明

需要在主函數中聲明的變量如下:

//引用外部變量的聲明

extern unsigned char key_Pressed; //按鍵是否被按下:1--是,0--否

extern unsigned char key_val; //存放鍵值

extern unsigned char key_Flag; //按鍵是否已放開:1--是,0--否

另外對應的鍵值可以在本文件的全局變量中修改,只需要對應修改

數組uchar key_Map[]的對應的值即可。

調用示例如下:

Init_Keypad(); //先進行初始化

while(1)

{

Key_Event(); //在死循環中進行鍵值掃描

if(key_Flag == 1)//用來判斷有無按鍵按下,從而讀取鍵值進行操作

{

key_Flag = 0;//key_Flag需要手動清零

}

}

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

#include 《msp430x14x.h》

//相應的函數聲明

void Init_Keypad(void);//鍵盤初始化

void Check_Key(void);

void delay();

void Key_Event(void);//讀取鍵盤函數,在使用時通過此函數進行鍵盤掃描

//選擇對應的端口

#define KEYOUT P1OUT

#define KEYIN P1IN

#define KEYDIR P1DIR

typedef unsigned char uchar;

typedef unsigned int uint;

/***************全局變量***************/

uchar key_Pressed; //按鍵是否被按下:1--是,0--否

uchar key_val; //存放鍵值

uchar key_Flag; //按鍵是否已放開:1--是,0--否

//設置鍵盤邏輯鍵值與程序計算鍵值的映射

uchar key_Map[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};

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

函數名稱:Init_Keypad

功 能:初始化掃描鍵盤的IO端口

參 數:無

返回值 :無

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

void Init_Keypad(void)

{

KEYDIR = 0xf0; //KEY.0~KEY.3設置為輸入狀態, KEY.4~KEY.7設置為輸出狀態

KEYOUT |= 0xf0; // KEY.4~KEY.7輸出高電平

key_Flag = 0;

key_Pressed = 0;

key_val = 0;

}

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

* Check_Key(),檢查按鍵,確認鍵值

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

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

函數名稱:Check_Key

功 能:掃描鍵盤的IO端口,獲得鍵值

參 數:無

返回值 :無

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

void Check_Key(void)

{

uchar row ,col,tmp1,tmp2;

tmp1 = 0x80;

for(row = 0;row 《 4;row++) //行掃描

{

KEYOUT = 0xf0; //KEY.4~KEY.7輸出全1

KEYOUT -= tmp1; //KEY.4~p1.7輸出四位中有一個為0

tmp1 》》=1;

if ((KEYIN & 0x0f) 《 0x0f) //是否KEYIN的KEY.0~KEY.3中有一位為0

{

tmp2 = 0x01; // tmp2用于檢測出那一位為0

for(col = 0;col 《 4;col++) // 列檢測

{

if((KEYIN & tmp2) == 0x00) // 是否是該列,等于0為是

{

key_val = key_Map[row * 4 + col]; // 獲取鍵值

return; // 退出循環

}

tmp2 《《= 1; // tmp2右移1位

}

}

}

}

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

函數名稱:delay

功 能:延時約15ms,完成消抖功能

參 數:無

返回值 :無

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

void delay()

{

uint tmp;

for(tmp = 12000;tmp 》 0;tmp--);

}

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

函數名稱:Key_Event

功 能:檢測按鍵,并獲取鍵值

參 數:無

返回值 :無

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

void Key_Event(void)

{

uchar tmp;

KEYOUT &= 0x00; // 設置KEYOUT全為0,等待按鍵輸入

tmp = KEYIN; // 獲取 p1IN

if ((key_Pressed == 0x00)&&((tmp & 0x0f) 《 0x0f)) //如果有鍵按下

{

key_Pressed = 1; // 如果有按鍵按下,設置key_Pressed標識

delay(); //消除抖動

Check_Key(); // 調用check_Key(),獲取鍵值

}

else if ((key_Pressed == 1)&&((tmp & 0x0f) == 0x0f)) //如果按鍵已經釋放

{

key_Pressed = 0; // 清除key_Pressed標識

key_Flag = 1; // 設置key_Flag標識

}

else

{

_NOP();

}

}

具體的注意提防都已經在注釋中做了說明,在原來的程序中這個文件是分為Keypad.C和Keypad.h兩個文件,鍵盤掃描函數的聲明單獨為一個頭文件,我覺得并不是特別需要。源程序中全局變量是單獨列為一個頭文件gdata.h的。這樣在全局變量比較多的情況下可以使程序更有條理可以參考。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數碼管
    +關注

    關注

    32

    文章

    1882

    瀏覽量

    91063
  • 程序
    +關注

    關注

    117

    文章

    3785

    瀏覽量

    81003
  • 開發板
    +關注

    關注

    25

    文章

    5032

    瀏覽量

    97371
收藏 人收藏

    評論

    相關推薦

    鍵盤掃描和數碼管顯示程序和電路圖

    鍵盤掃描和數碼管顯示程序和電路圖 在RB口上擴充一個矩陣式鍵盤,一共4×
    發表于 01-11 23:19 ?2627次閱讀
    <b class='flag-5'>鍵盤</b>掃描和<b class='flag-5'>數碼管</b><b class='flag-5'>顯示</b>源<b class='flag-5'>程序</b>和電路圖

    4X4鍵盤接口數碼管顯示

    用C51仿真4X4鍵盤,然后在數碼管顯示
    發表于 10-22 14:55

    數碼管顯示4×4鍵盤矩陣按鍵

    數碼管顯示4×4鍵盤矩陣按鍵
    發表于 12-22 16:49

    數碼管如何顯示4×4矩陣鍵盤的鍵號

    電路圖分析P1.0 ~ P1.3控制鍵盤的列(置0代表按鈕被按下)P1.4 ~ P1.7控制鍵盤的行(置0代表按鈕被按下)數碼管為共陽極,低電平有效,P0.0 ~ P0.7置0對應數碼管
    發表于 01-07 07:56

    利用單片機實現數碼管顯示44鍵盤矩陣按鍵的C語言程序

    使用單片機實現數碼管顯示44鍵盤矩陣按鍵的C語言程序
    發表于 09-20 08:29

    數碼管顯示矩陣鍵盤掃描程序

    數碼管顯示矩陣鍵盤掃描程序 ?/*矩陣鍵盤掃描出鍵值,在數碼管
    發表于 01-11 19:14 ?2272次閱讀

    動態數碼管顯示程序

    動態數碼管顯示程序,動態數碼管顯示程序,動態數碼管
    發表于 01-12 14:55 ?60次下載

    LESSON4_數碼管動態掃描顯示

    LESSON4_數碼管動態掃描顯示 LESSON4_數碼管動態掃描顯示
    發表于 02-18 18:20 ?0次下載

    基于8051的Proteus仿真-數碼管顯示4×4鍵盤矩陣按鍵

    基于8051的Proteus仿真-數碼管顯示4×4鍵盤矩陣按鍵
    發表于 09-01 23:36 ?95次下載

    ZLG驅動數碼管4*4按鍵的程序

    ZLG驅動數碼管4*4按鍵的程序
    發表于 11-05 10:52 ?26次下載

    數碼管顯示4X4鍵盤矩陣按鍵的仿真原理圖免費下載

    本文檔的主要內容詳細介紹的是數碼管顯示4X4鍵盤矩陣按鍵的仿真原理圖免費下載。
    發表于 12-31 10:04 ?49次下載
    <b class='flag-5'>數碼管</b><b class='flag-5'>顯示</b><b class='flag-5'>4X4</b><b class='flag-5'>鍵盤</b>矩陣按鍵的仿真原理圖免費下載

    使用單片機實現數碼管顯示4X4鍵盤矩陣按鍵的程序和仿真資料免費下載

    本文檔的主要內容詳細介紹的是使用單片機實現數碼管顯示4X4鍵盤矩陣按鍵的程序和仿真資料免費下載。
    發表于 06-01 14:18 ?38次下載
    使用單片機實現<b class='flag-5'>數碼管</b><b class='flag-5'>顯示</b><b class='flag-5'>4X4</b><b class='flag-5'>鍵盤</b>矩陣按鍵的<b class='flag-5'>程序</b>和仿真資料免費下載

    數碼管顯示4X4鍵盤矩陣按鍵的程序和電路圖免費下載

    本文檔的做作主要內容詳細介紹的是數碼管顯示4X4鍵盤矩陣按鍵的程序和電路圖免費下載。
    發表于 06-03 15:01 ?52次下載
    <b class='flag-5'>數碼管</b><b class='flag-5'>顯示</b><b class='flag-5'>4X4</b><b class='flag-5'>鍵盤</b>矩陣按鍵的<b class='flag-5'>程序</b>和電路圖免費下載

    使用單片機實現數碼管顯示44鍵盤矩陣按鍵的C語言程序免費下載

    本文檔的主要內容詳細介紹的是使用單片機實現數碼管顯示44鍵盤矩陣按鍵的C語言程序免費下載。
    發表于 03-16 14:39 ?26次下載

    數碼管顯示4X4鍵盤矩陣按鍵 PROTEUS 和51單片機教程(附仿真文件+源代碼)

    功能:數碼管顯示4X4鍵盤矩陣按鍵 PROTEUS 和51單片機教程程序源代碼如下:/*數碼管
    發表于 11-23 17:21 ?42次下載
    <b class='flag-5'>數碼管</b><b class='flag-5'>顯示</b><b class='flag-5'>4X4</b><b class='flag-5'>鍵盤</b>矩陣按鍵  PROTEUS 和51單片機教程(附仿真文件+源代碼)
    主站蜘蛛池模板: 久久机热免费视频| 香蕉动漫库| 精品无码国产自产在线观看水浒传| 在线观看亚洲免费人成网址| 免费乱理伦片在线观看八戒| av在线观看网站免费| 香蕉鱼视频观看在线视频下载| 麻豆婷婷狠狠色18禁久久| 国产麻豆91网在线看| WWW婷婷AV久久久影片| 2017天天拍天天拍香蕉视频| 超级碰碰青草久热国产| 色欲国产麻豆精品AV免费| 李丽莎与土豪50分钟在线观看| 国产午夜人成在线视频麻豆| 成人国产三级在线播放| 97一期涩涩97片久久久久久久| 亚洲区欧美日韩综合| 无码区国产区在线播放| 色悠久久久久综合欧美99| 欧美特级特黄AAAAA片| 女性酥酥影院| 女人一级毛片免费视频观看| 快播苍井空| 麻豆久久婷婷五月国产| 久久青青草原综合伊人| 快播官方网站| 免费毛片视频网站| 欧美日韩亚洲中字二区| 欧美日韩888在线观看| 日韩精品免费一区二区| 受坐在攻腿上H道具PLAY| 婷婷精品国产亚洲AV在线观看 | 99精品免费观看| 波多野结衣的AV一区二区三区| 潮 喷女王cytherea| 一级毛片视频免费| 99精彩视频在线观看| 把英语老师强奷到舒服动态图| 大香伊人久久精品一区二区| 国产精品久久精品视|