国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

嵌入式開發(fā)7279A數(shù)碼管 鍵盤

這篇具有很好參考價值的文章主要介紹了嵌入式開發(fā)7279A數(shù)碼管 鍵盤。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

摘要

HD7279A硬件電路圖HD7279A是一種管理鍵盤和LED顯示器的專用智能控制芯片。它能對8位共陰極LED顯示器或64個LED發(fā)光管進(jìn)行管理和驅(qū)動,同時能對多達(dá)8×8的鍵盤矩陣的按鍵情況進(jìn)行監(jiān)視,具有自動消除鍵抖動并識別按鍵代碼的功能,從而可以提高CPU工作的效率。HD7279A和微處理器之間采用串行接口,其接口電路和外圍電路簡單,占用口線少,加之它具有較高的性能價格比,因此,在微型控制器、智能儀表、控制面板和家用電器等領(lǐng)域中日益獲得廣泛的應(yīng)用。

關(guān)鍵詞: HD7279A 接口電路 接口程序

一.引腳說明與接口電路

要求: 了解即可(編程涉及)

7279a,江蘇海洋大學(xué),ARM,期末復(fù)習(xí),單片機(jī),嵌入式硬件,arm開發(fā),stm32,學(xué)習(xí)方法,Powered by 金山文檔
  1. RC引腳用于連接HD7279A的外接振蕩元件

  1. RESET為復(fù)位端,該端由低電平變成高電平并保持25ms即復(fù)位結(jié)束

  1. IG0~DIG7分別為8個LED管的位驅(qū)動輸出端

  1. SA~SG分別為LED數(shù)碼管的A段~G段的輸出端

  1. DP為小數(shù)點(diǎn)的驅(qū)動輸出端

  1. DIG0~DIG7和SA~SG同時還分別是64鍵盤的列線和行線端口,完成對鍵盤的監(jiān)視、譯碼和鍵碼的識別。

  1. 在8×8陣列中每個鍵的鍵碼是用十六進(jìn)制表示的,可用讀鍵盤數(shù)據(jù)指令讀出,其范圍是00H~3FH。

  1. HD7279與微處理器僅需4條接口線,其中CS為片選信號(低電平有效)。

  1. 當(dāng)微處理器訪問HD7279A(讀鍵號或?qū)懼噶睿r,應(yīng)將片選端置為低電平。

  1. DATA為串行數(shù)據(jù)端,當(dāng)向HD7279A發(fā)送數(shù)據(jù)時,DATA為輸入端;

  1. 當(dāng)HD7279A輸出鍵盤代碼時,DATA為輸出端。

  1. CLK為數(shù)據(jù)串行傳送的同步時鐘輸入端,時鐘的上升沿表示數(shù)據(jù)有效。

  1. KEY為按鍵信號輸出端,在無鍵按下時為高電平;而有鍵按下時此引腳變?yōu)榈碗娖讲⑶乙恢北3值芥I釋放為止。

二.控制指令

要求: 了解皆可(編程涉及)

  1. 復(fù)位指令。指令代碼為A4H,其功能為清除所有顯示,包括字符消隱屬性和閃爍屬性。

  1. 測試指令。指令代碼為BFH,其功能為將所有的LED點(diǎn)亮并閃爍,可用于自檢。

  1. 左移指令。指令代碼為A1H,其功能為將所有的顯示左移1位,移位后,最右位空(無顯示),不改變消隱和閃爍屬性。

  1. 右移指令。指令代碼為A0H,其功能與左移指令相似,只是方向相反。

  1. 循環(huán)左移指令。指令代碼為A3H,其功能為將所有的顯示循環(huán)左移1位。移位后,最左位內(nèi)容移至最右位,不改變消隱和閃爍屬性。

  1. 循環(huán)右移指令。指令代碼為A2H,其功能與循環(huán)左移指令相似,只是方向相反。

三.時序

要求:會看更好(代碼涉及)

備注: 暫時可以只會第一種

1.純指令時序:微處理器發(fā)出8個CLK脈沖,向HD7279A傳送8位指令。DATA引腳為高阻狀態(tài)

7279a,江蘇海洋大學(xué),ARM,期末復(fù)習(xí),單片機(jī),嵌入式硬件,arm開發(fā),stm32,學(xué)習(xí)方法,Powered by 金山文檔

帶數(shù)據(jù)指令時序:微處理器發(fā)出16個CLK脈沖,前8個向HD7279A傳送8位指令;后8個向HD7279A傳送8位數(shù)據(jù)。DATA引腳為高阻狀態(tài)

7279a,江蘇海洋大學(xué),ARM,期末復(fù)習(xí),單片機(jī),嵌入式硬件,arm開發(fā),stm32,學(xué)習(xí)方法,Powered by 金山文檔

讀鍵盤指令時序:微處理器發(fā)出16個CLK脈沖,前8個向HD7279A傳送8位指令, DATA引腳為高阻狀態(tài);后8個由HD7279A向微處理器返回8位按鍵代碼,DATA引腳為輸出狀態(tài)。在最后1個CLK脈沖的下降沿DATA引腳恢復(fù)高阻狀態(tài)

7279a,江蘇海洋大學(xué),ARM,期末復(fù)習(xí),單片機(jī),嵌入式硬件,arm開發(fā),stm32,學(xué)習(xí)方法,Powered by 金山文檔

四.7279數(shù)碼管顯示案例

要求:都要看懂哦

#include "stm32f4xx.h"

#define      CMD_RESET         0xA4    //  7279的復(fù)位命令
#define      CMD_TEST          0xBF    //  7279的測試命令
#define      CMD_LEFT          0xA1    //  7279的左移位命令
#define      CMD_READ          0x15    //  7279的讀緩沖命令
#define      DECODE1           0xC8    //  7279的譯碼顯示命令

// 硬件資源引腳定義
// HD7279CS          PC12
// HD7279CLK         PA3
// HD7279DATA        PA5
// HD7279INT         PA0

// HD7279CS  PC12
#define      HD7279CS_L          GPIO_ResetBits(GPIOC, GPIO_Pin_12)   //PC12輸出0
#define      HD7279CS_H          GPIO_SetBits(GPIOC, GPIO_Pin_12)     //PC12輸出1

// HD7279CLK PA3
#define      HD7279CLK_L         GPIO_ResetBits(GPIOA, GPIO_Pin_3)    //PA3輸出0
#define      HD7279CLK_H         GPIO_SetBits(GPIOA, GPIO_Pin_3)      //PA3輸出1

// HD7279DATA PA5
#define      HD7279DATA_L        GPIO_ResetBits(GPIOA, GPIO_Pin_5)    //PA5輸出0
#define      HD7279DATA_H        GPIO_SetBits(GPIOA, GPIO_Pin_5)      //PA5輸出1

// 函數(shù)名稱:GPIO配置函數(shù)
// 輸入?yún)?shù):無
// 輸出參數(shù):無
// HD7279CS      PC12
// HD7279CLK     PA3
// HD7279DATA    PA5
void HD7279_GPIO_Configuration(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    
    //  HD7279CS PC12
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
    
    //  HD7279CLK PA3、HD7279DATA PA5
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    HD7279CS_H;
    HD7279CLK_H;
    HD7279DATA_H;
}

// 函數(shù)名稱:發(fā)送1字節(jié)數(shù)據(jù)函數(shù)
// 輸入?yún)?shù):數(shù)據(jù)
// 輸出參數(shù):無

void send_byte(unsigned char out_byte )
{
    unsigned short  i;                   //    設(shè)置循環(huán)變量
    HD7279CS_L;                          //    置低片選信號
    delay_us(50);
    for (i = 0; i < 8; i++)             //    寫入8 bit數(shù)據(jù)
    {   
         if (out_byte & 0x80)           //    最高位為1
        {
            HD7279DATA_H;               //    數(shù)據(jù)線輸出高電平
         }
        else
        {
            HD7279DATA_L;               //    否則輸出低電平
        }
        HD7279CLK_H;                    //    置高時鐘位
        delay_us(50);
        HD7279CLK_L;                    //    置低時鐘位
        delay_us(50);
        out_byte <<= 1;                //    輸出參數(shù)變量右移一位
    }
}

// 函數(shù)名稱:寫數(shù)據(jù)和命令函數(shù)
// 輸入?yún)?shù):命令、數(shù)據(jù)
// 輸出參數(shù):無

void write7279(unsigned char cmd, unsigned char dat)  //    向LED寫顯示數(shù)據(jù)和命令
{    
    if (cmd != 255) 
    {  
        send_byte(cmd);                              //    寫命令
    }
//    delay_ms(10);
    if (dat != 255) 
    {
        send_byte(dat&15);                           //    寫顯示數(shù)據(jù)
    } 
}
// 小案例
unsigned char Int_flag = 0;
int main(void)
{ 
    unsigned char i = 0;
    unsigned char j = 0;
    SysTick_Init();                    //  系統(tǒng)滴答定時器初始化
? ? HD7279_GPIO_Configuration();
    send_byte(CMD_RESET);              //    復(fù)位7279 
    delay_ms(1000);
    test7279();                        //    7279運(yùn)行測試程序
    while(1)
    {
        write7279(DECODE1 + i, j);                                        
        i++;   
        j++;        
        if (i > 7) 
        {
            i = 0;
        }
        if (j > 9) 
        {
            j = 0;
        }
        delay_ms(1000);
    }
}

五.7279鍵盤案例

要求:都要會哦


// 函數(shù)名稱:DATA設(shè)置為輸入模式
// 輸入?yún)?shù):無
// 輸出參數(shù):無
// HD7279DATA    PA5
void DATA_IN(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    //HD7279DATA PA5    
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);             
//  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);              
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;                      
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;                     
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;          
    GPIO_Init(GPIOA, &GPIO_InitStructure);  
}

// 函數(shù)名稱:DATA設(shè)置為輸出模式
// 輸入?yún)?shù):無
// 輸出參數(shù):無
// HD7279DATA    PA5

void DATA_OUT(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    
    //HD7279DATA PA5
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}

// 函數(shù)名稱:中斷配置函數(shù)
// 輸入?yún)?shù):無
// 輸出參數(shù):無
// HD7279INT  PA0

void INT_Configuration(void)
{         
    EXTI_InitTypeDef   EXTI_InitStructure;
    GPIO_InitTypeDef   GPIO_InitStructure;
    NVIC_InitTypeDef   NVIC_InitStructure;

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);               //  使能IO時鐘
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);              //  使能SYSCFG時鐘

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;                        //  輸入
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;                        //  設(shè)置上接
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                           //  IO口為0
    GPIO_Init(GPIOA, &GPIO_InitStructure);                             

    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);       //  初始化中斷線0

    EXTI_InitStructure.EXTI_Line = EXTI_Line0;                          //  配置中斷線為中斷線0
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                 //  配置中斷模式
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;             //  配置為下降沿觸發(fā)
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;                           //  配置中斷線使能
    EXTI_Init(&EXTI_InitStructure);                              

    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;             
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; 
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

// 函數(shù)名稱:接收1字節(jié)數(shù)據(jù)函數(shù)
// 輸入?yún)?shù):數(shù)據(jù)
// 輸出參數(shù):無
unsigned char receive_byte (void)                                  
{
    unsigned char i, in_byte = 0;                        
    unsigned char temp = 0;    
    HD7279DATA_H;                                                            
    Delay_us(15);
    for (i = 0; i < 8; i++)                            //    讀出8 bit數(shù)據(jù)
    {
        HD7279CLK_H;                                    //    置高時鐘位
        Delay_us(10);
        in_byte <<= 1;                                 //    已收到的數(shù)據(jù)移位
        DATA_IN();  
        temp = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5);
        if (temp == 1)  
        {
            in_byte |= 1;                               //    向數(shù)據(jù)中增加一位
        }
        HD7279CLK_L;                                    //    置低時鐘位
        Delay_us(10);
    }
    DATA_OUT();
    HD7279DATA_L;                                        //    數(shù)據(jù)線輸出低電平
    Delay_us(10); 
    return(in_byte);                                    //    返回接收到的數(shù)據(jù)
}

// 函數(shù)名稱:讀7279
// 輸入?yún)?shù):無
// 輸出參數(shù):無

unsigned char read7279(void)                              //    讀鍵值
{
    unsigned char temp = 0;
    send_byte(CMD_READ);                                 //    發(fā)送讀鍵值命令
    temp = receive_byte();
    return temp;                                         //    返回鍵值
}
// 測試
void test7279(void)                                                   //    顯示測試程序
{
     send_byte(CMD_TEST);                                            //    發(fā)送測試命令
     Delay_ms(1000);                                                 //    等待以便觀察
     send_byte(CMD_RESET);                                           //    發(fā)送復(fù)位命令
}

int main(void)
{     
    unsigned char temp = 0;
    char buf[5] = {0};
    SysTick_Init();                                                     //  系統(tǒng)滴答定時器初始化
    lcd_init();                                                         //  液晶初始化
    lcd_clear(Black);                                                   //  設(shè)置液晶背景
    LCD_DrawRectangle(0,0, 479, 271, Green);
    LCD_DrawRectangle(5,5, 474, 266, Green);
    LCD_ShowString(10, 60, "由于IO口復(fù)用,所以請打開所有模塊的電源開關(guān)", Red, Black); 
    LCD_ShowString(10, 100, "現(xiàn)象:", Red, Black); 
    LCD_ShowString(10, 120, "1.按下按鍵,觀察數(shù)碼管和液晶上顯示的數(shù)據(jù)", Red, Black); 
    HD7279_GPIO_Configuration();  
    INT_Configuration();                                                 //  7279中斷引腳配置
    send_byte(CMD_RESET);                                                //    復(fù)位7279
    Delay_ms(1000);
    test7279();                                                          //    7279測試
    while(1)
    {            
        if (Int_flag == 1)
        {    
            Int_flag = 0;   
            temp = read7279();
            write7279(CMD_LEFT, 0xff);
            sprintf(buf, "%2X", temp);
            LCD_ShowString(200, 180, (unsigned char*)buf, White, Black);
            write7279(DECODE1, temp);
        }
    }
}

六.球球關(guān)注

關(guān)注b站 : Chasbaby bili_24795983555文章來源地址http://www.zghlxwxcb.cn/news/detail-780312.html

到了這里,關(guān)于嵌入式開發(fā)7279A數(shù)碼管 鍵盤的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包