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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7870|回復: 9
打印 上一主題 下一主題
收起左側(cè)

我想用單片機矩陣鍵盤控制led點陣顯示數(shù)字(每個按鍵控制一個數(shù)字),寫了一點就是...

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:445287 發(fā)表于 2018-12-12 22:53 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>
typedef unsigned int u16;         
typedef unsigned char u8;

//--定義要使用的IO口--//
#define READPORTS P1
#define GPIO_KEY P2
#define COMMONPORTS P0
                                    
u8 KeyValue;

void delay(u16 i){
    while(i--);      
}

void KeyDown(void){
    char a=0;
    GPIO_KEY=0x0f;
    if(GPIO_KEY!=0x0f){
        delay(1000);
        if(GPIO_KEY!=0x0f){            
            GPIO_KEY=0X0F;
            switch(GPIO_KEY){
                case(0X07): KeyValue=0;break;
                case(0X0b): KeyValue=1;break;
                case(0X0d): KeyValue=2;break;
                case(0X0e): KeyValue=3;break;
            }         
            GPIO_KEY=0XF0;
            switch(GPIO_KEY){
                    case(0X70): KeyValue=KeyValue;break;
                    case(0Xb0): KeyValue=KeyValue+4;break;
                    case(0Xd0): KeyValue=KeyValue+8;break;
                    case(0Xe0): KeyValue=KeyValue+12;break;
            }
            while((a<50)&&(GPIO_KEY!=0xf0)){
                delay(1000);
                a++;
            }
        }
    }
}


//--列選通控制--//
unsigned char code TAB[8] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

//--點陣字碼--//
unsigned char code CHARCODE[16][8] = {

{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00}, //0

{0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00}, //1

{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00}, //2

{0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00}, //3

{0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00}, //4

{0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00}, //5

{0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00}, //6

{0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00}, //7

{0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00}, //8

{0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00}, //9

{0x00,0x00,0x7F,0x48,0x48,0x30,0x00,0x00}, //P

{0x00,0x00,0x7F,0x48,0x4C,0x73,0x00,0x00}, //R

{0x00,0x00,0x7F,0x49,0x49,0x49,0x00,0x00}, //E

{0x00,0x00,0x3E,0x41,0x41,0x62,0x00,0x00}, //C

{0x00,0x00,0x7F,0x08,0x08,0x7F,0x00,0x00}, //H

{0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00}, //I

};

void main(){        
    unsigned char tab, j;
    unsigned int  i;//無符號整數(shù)
    while(1){        
        for(i= 0; i<5000; i++ ){//兩個字之間的掃描間隔時間
            for(tab=0;tab<8;tab++){   
                KeyDown();                                       
                READPORTS=0xFF;//消隱
                COMMONPORTS=CHARCODE[KeyValue][tab];//輸出字碼
                READPORTS=TAB[tab];                              
            }
        }
        j++;
        if(j == 16){
            j = 0;
        }
    }
}      
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:445287 發(fā)表于 2018-12-12 22:56 | 只看該作者
哪位大神幫我看看

IMG_20181212_225423.JPG (782.94 KB, 下載次數(shù): 42)

IMG_20181212_225423.JPG
回復

使用道具 舉報

板凳
ID:94031 發(fā)表于 2018-12-13 07:37 | 只看該作者
1 程序是否和硬件不配套。
2 查硬件供電是否正常。
回復

使用道具 舉報

地板
ID:164602 發(fā)表于 2018-12-13 08:16 | 只看該作者
你大概沒有搞清楚你的板子的點陣電路吧!
你的這個板子上,8*8點陣,是這樣連接的:

你的程序中,一點屆沒有看到控制595的程序,點陣當然是不會亮的了。
給你一個示例程序,點陣顯示一些數(shù)字字符:
#include<reg51.h>
#include<intrins.h>

sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;

//--定義要使用的IO口--//
#define COMMONPORTS                P0

//--列選通控制--//
unsigned char code TAB[8]  = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

//--點陣字碼--//
unsigned char code CHARCODE[18][8]=
{

{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00}, //0

{0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00}, //1

{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00}, //2

{0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00}, //3

{0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00}, //4

{0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00}, //5

{0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00}, //6

{0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00}, //7

{0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00}, //8

{0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00}, //9

{0x00,0x00,0x7F,0x48,0x48,0x30,0x00,0x00}, //P

{0x00,0x00,0x7F,0x48,0x4C,0x73,0x00,0x00}, //R

{0x00,0x00,0x7F,0x49,0x49,0x49,0x00,0x00}, //E

{0x00,0x00,0x3E,0x41,0x41,0x62,0x00,0x00}, //C

{0x00,0x00,0x7F,0x08,0x08,0x7F,0x00,0x00}, //H

{0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00}, //I

{0x00,0x7F,0x10,0x08,0x04,0x7F,0x00,0x00}, //N

{0x7C,0x48,0x48,0xFF,0x48,0x48,0x7C,0x00}  //中

};
void delay(unsigned int time)
{
  unsigned int i,j;
  for(i=0;i<time;i++)
    for(j=0;j<121;j++);
}

/*******************************************************************************
* 函數(shù)名         : Hc595SendByte(unsigned char dat)
* 函數(shù)功能                   : 想74H595發(fā)送一個字節(jié)的數(shù)據(jù)
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/
void Hc595SendByte(unsigned char dat)
{
        unsigned char a;
        SRCLK=0;
        RCLK=0;
        for(a=0;a<8;a++)
        {
                SER=dat>>7;
                dat<<=1;

                SRCLK=1;
                _nop_();
                _nop_();
                SRCLK=0;       
        }

        RCLK=1;
        _nop_();
        _nop_();
        RCLK=0;
}
/*******************************************************************************
* 函數(shù)名         : main
* 函數(shù)功能                   : 主函數(shù)
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/

void main()
{       
        unsigned char tab, j;
        unsigned int  i;

        while(1)
        {       
                for(i= 0; i<50; i++ )   //兩個字之間的掃描間隔時間
                {
                        for(tab=0;tab<8;tab++)
                        {       

                                Hc595SendByte(0x00);                             //消隱                                                                                                                               
                                COMMONPORTS        = TAB[tab];                                 //輸出字碼       
                                Hc595SendByte(CHARCODE[j][tab]);       
                                delay(2);               
                        }
                         
                }
                j++;
                if(j == 18)
                {
                        j = 0;
                }
        }       
}


另外還要提醒你,一定要將標有JOE的跳線冒接到GND那邊才行哦。

評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:445287 發(fā)表于 2018-12-13 12:23 | 只看該作者
HC6800-ES-V2.0 發(fā)表于 2018-12-13 08:16
你大概沒有搞清楚你的板子的點陣電路吧!
你的這個板子上,8*8點陣,是這樣連接的:

好的,我試試,謝謝老哥
回復

使用道具 舉報

6#
ID:445287 發(fā)表于 2018-12-13 12:31 | 只看該作者
HC6800-ES-V2.0 發(fā)表于 2018-12-13 08:16
你大概沒有搞清楚你的板子的點陣電路吧!
你的這個板子上,8*8點陣,是這樣連接的:

大神怎么把矩陣鍵盤控制加進去?
回復

使用道具 舉報

7#
ID:438665 發(fā)表于 2018-12-13 20:07 | 只看該作者
jsj@1234 發(fā)表于 2018-12-13 12:31
大神怎么把矩陣鍵盤控制加進去?

設(shè)置一個按鍵標志位,利用中斷函數(shù)來掃描這個標志位(舉例:1ms進入一次中斷,一旦連續(xù)4次檢測到0,就更新對應(yīng)的按鍵值)。然后在main函數(shù)里面用if(標志位)來判斷就可以了;加一下自己的代碼:
  1.         while(1)
  2.         {
  3.                 for (i=0; i<4; i++)
  4.                 {
  5.                         if (backup [i] != KeySta [i])
  6.                         {
  7.                                 if(backup [i] != 0)
  8.                                 {
  9.                                         if(KeySta[0]==0)
  10.                                         {
  11.                                                 TR1 = 0;                        //進入第一個程序時,關(guān)閉定時器1
  12.                                                 ENLED = 0;
  13.                                                 ADDR3 = 1;
  14.                                                 ADDR2 = 0;
  15.                                                 ADDR1 = 0;
  16.                                                 ADDR0 = 0;
  17.                                                 
  18.                                                 if (KeySta[0]==0)
  19.                                                 {        
  20.                                                         P0 = LedChar[cnt];
  21.                                                         cnt++;
  22.                                                         if(cnt >= 10)
  23.                                                         cnt = 0;
  24.                                                 }        
  25.                                         }
復制代碼

然后是中斷里面的:
  1. void InterruptTimer0 () interrupt 1
  2. {
  3.         unsigned char i = 0;
  4.         static unsigned char KeyBuf[4]={
  5.                 0xFF,0xFF,0xFF,0xFF
  6.         };
  7.                         
  8.         TH0 = 0xFC;
  9.         TL0 = 0x67;

  10.         KeyBuf [0] = (KeyBuf[0]<<1)|KEY_IN_1;
  11.         KeyBuf [1] = (KeyBuf[1]<<1)|KEY_IN_2;
  12.         KeyBuf [2] = (KeyBuf[2]<<1)|KEY_IN_3;
  13.         KeyBuf [3] = (KeyBuf[3]<<1)|KEY_IN_4;

  14.         for (i=0; i<4; i++)
  15.         {
  16.                 if ((KeyBuf[i]&0x0F) == 0x00)
  17.                 {
  18.                         KeySta[i] = 0;
  19.                 }
  20.                  else if ((KeyBuf[i]&0x0F) == 0x0F)
  21.                 {
  22.                         KeySta[i] = 1;
  23.                 }               
  24.         }
  25. }
復制代碼

回復

使用道具 舉報

8#
ID:370231 發(fā)表于 2018-12-25 14:31 | 只看該作者
哈哈,拿著程序照搬是不對的,要根據(jù)程序是否和硬件配套不?跟硬件不配套你弄的代碼再好也等于0。
回復

使用道具 舉報

9#
ID:513294 發(fā)表于 2019-4-16 09:15 來自手機 | 只看該作者
jsj@1234 發(fā)表于 2018-12-13 12:31
大神怎么把矩陣鍵盤控制加進去?

樓主你做出來了嗎,我也想做和你一樣的加矩陣鍵盤的
回復

使用道具 舉報

10#
ID:554850 發(fā)表于 2019-6-5 10:56 | 只看該作者
HC6800-ES-V2.0 發(fā)表于 2018-12-13 08:16
你大概沒有搞清楚你的板子的點陣電路吧!
你的這個板子上,8*8點陣,是這樣連接的:

那請問下 就是完全的  每個矩陣按鍵控制不同的點陣數(shù)字或者圖案怎么寫
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产日韩精品一区二区 | 成人在线精品视频 | 美女露尿口视频 | 久久一二三区 | 日韩在线中文字幕 | 国产免费看 | 午夜国产 | 国产精品日本一区二区不卡视频 | 久久一二 | 中文字幕一区二区三区不卡 | 国产精品视频不卡 | 国产一区二区在线免费观看 | 日本精品久久久久久久 | 国产乱精品一区二区三区 | 久久精品性视频 | 久久专区 | 亚洲第一成年免费网站 | 成人欧美一区二区三区黑人孕妇 | 成人久久18免费网站图片 | 精品综合 | 亚洲草草视频 | 久久天天躁狠狠躁夜夜躁2014 | 日韩美女一区二区三区在线观看 | 天天操天天干天天曰 | 日韩在线成人 | 超碰在线人 | 国产成人免费视频网站高清观看视频 | 天天干天天爱天天操 | 成人午夜激情 | 色女人天堂 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 四虎海外 | 日韩成人免费 | 日本一区二区三区在线观看 | 夜夜爽99久久国产综合精品女不卡 | 九色网址| 欧美久久久久久久久中文字幕 | 国产区在线看 | 男人天堂色 | 国产黄色在线观看 | 国产成人精品一区二区三区四区 |