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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

新手求解單片機矩陣鍵盤

[復制鏈接]
跳轉到指定樓層
樓主
第一個程序(一共兩個)
這個代碼是單片機自帶的程序,按下矩陣鍵盤數碼管可以顯示對應數字。還有一個我改的,數碼管卻不亮了。附件有開發板原理圖,兩個代碼編譯都沒問題,求解,謝謝了。圖片就是原理圖了,不用下載附件了.

#include "reg52.h"               


#define uint unsigned int ;        
#define uchar unsigned char ;

#define GPIO_DIG P0
#define GPIO_KEY P1


uchar KeyValue;
uchar temp;
uchar i;

uchar code smgduan[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
                                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}  
void delay(unsigned int 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++;
                        }
                }
        }
}


void main()
{        

        while(1)
        {        
                KeyDown();        
                GPIO_DIG=smgduan[KeyValue];        
        }               
}





#include "reg52.h"               
#include <intrins.h>

#define uint unsigned int ;
#define uchar unsigned char ;

#define GPIO_DIG P0
#define GPIO_KEY P1
sbit L0=P1^3;
sbit L1=P1^2;
sbit L2=P1^1;
sbit L3=P1^0;

uchar KeyValue;
uchar temp;
uchar i;

uchar code smgduan[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
                                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void delay(unsigned int i)
{
        while(i--);        
}
void KeyDown(void)
{
        while(1)
        {
                P1=0x7f;
                for(i=0;i<=3;i++)
                {
                        if(L0==0) KeyValue=i*4+0;
                        if(L1==0) KeyValue=i*4+1;
                        if(L2==0) KeyValue=i*4+2;
                        if(L3==0) KeyValue=i*4+3;
                        temp=P1;
                        temp=_cror_(temp,1);
                        P1=temp;
                }
        }
}

void main()
{        

        while(1)
        {        
                KeyDown();        
                GPIO_DIG=smgduan[KeyValue];        
        }               
}



屏幕截圖 2023-11-18 124340.png (1007.35 KB, 下載次數: 72)

屏幕截圖 2023-11-18 124340.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:213173 發表于 2023-11-18 14:05 | 只看該作者
代碼編譯沒有問題只能說沒有語法問題,不能證明沒有邏輯問題。雖然開發板自帶的程序不算是好程序,但對于初學者比較容易理解。只有充分理解原代碼,才能在此基礎上優化,否則出錯都找不到問題所在。
回復

使用道具 舉報

板凳
ID:1100220 發表于 2023-11-18 14:12 | 只看該作者
可以debug看一下問題出在哪里
回復

使用道具 舉報

地板
ID:1100223 發表于 2023-11-18 14:15 | 只看該作者
wulin 發表于 2023-11-18 14:05
代碼編譯沒有問題只能說沒有語法問題,不能證明沒有邏輯問題。雖然開發板自帶的程序不算是好程序,但對于初 ...

第二個程序是我改的,也只是換了個思路,也是按照硬件來的,為啥不亮呢?
回復

使用道具 舉報

5#
ID:1100223 發表于 2023-11-18 14:45 | 只看該作者
菜雞工程師 發表于 2023-11-18 14:12
可以debug看一下問題出在哪里

啊,剛用keil不知debug咋用,不過謝謝了,我去看看怎么用
回復

使用道具 舉報

6#
ID:227818 發表于 2023-11-18 16:40 | 只看該作者
void KeyDown(void)
{
        while(1)

第二個程序,有一個死循環?
回復

使用道具 舉報

7#
ID:1100223 發表于 2023-11-18 18:15 | 只看該作者
newlined 發表于 2023-11-18 16:40
void KeyDown(void)
{
        while(1)

啊,不對嗎?我這個按下一個按鍵后,顯示一個數字,然后一直循環,如果有鍵按下,數字就會在變,沒有就不變
回復

使用道具 舉報

8#
ID:213173 發表于 2023-11-18 20:58 | 只看該作者
missingor 發表于 2023-11-18 14:15
第二個程序是我改的,也只是換了個思路,也是按照硬件來的,為啥不亮呢?

只要運行到KeyDown();就死在里面了,根本沒有機會運行GPIO_DIG=smgduan[KeyValue];,數碼管怎么亮?
回復

使用道具 舉報

9#
ID:1100223 發表于 2023-11-18 21:40 | 只看該作者
newlined 發表于 2023-11-18 16:40
void KeyDown(void)
{
        while(1)

哦哦,謝謝
回復

使用道具 舉報

10#
ID:1100223 發表于 2023-11-18 21:41 | 只看該作者
wulin 發表于 2023-11-18 20:58
只要運行到KeyDown();就死在里面了,根本沒有機會運行GPIO_DIG=smgduan[KeyValue];,數碼管怎么亮?

嗯嗯,謝謝了
回復

使用道具 舉報

11#
ID:227818 發表于 2023-11-19 12:11 | 只看該作者

不客氣,我沒有看懂您的按鍵在哪個數碼管顯示,所以我只好提示了下。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99精品久久久久久 | 久久动态图| 午夜性福利 | 99xav| 成年人一级片 | 求av网站 | 亚洲亚洲人成综合网络 | 一区二区日韩 | 国产黄色免费视频 | 一级二级毛片 | 欧美 日韩 国产 成人 在线 | 国产一区二区免费在线观看 | 国产一级免费观看 | 亚洲成人免费观看 | 国产精品免费av | 91动漫在线观看 | 精品国产伦一区二区三区 | 黄色片视频 | 黄色天天影视 | 欧美不卡一区二区三区 | 日本福利视频 | 国产黄色三级 | 午夜在线影院 | eeuss一区二区三区 | 久久午夜影院 | 午夜www | 国产精品欧美日韩 | 成人高清视频在线观看 | 日本伊人网 | 国产成人一区二区三区 | 午夜一级片 | 久久在线免费观看 | 色综合天天综合网天天狠天天 | 这里只有精品视频在线观看 | 国产一区二区三区在线视频 | 亚洲人在线观看 | a视频| 死神来了4无删减版在线观看 | 午夜精品国产 | 久草视频网站 | 色综合视频 |