找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

簡單任務(wù)之四位數(shù)碼管求助,新手求助

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:118098 發(fā)表于 2016-8-25 10:20 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
在實驗板上欲實現(xiàn)一個簡單的功能,按K1鍵 數(shù)碼管LED1 顯1  按K2鍵 數(shù)碼管LED2 顯2  按K3鍵 數(shù)碼管LED3 顯3 按K4鍵 數(shù)碼管LED1 顯4問題?現(xiàn)在按K1四個管子同時顯示1,其它按鍵也是四個數(shù)碼管同時顯示,不知問題出在那里,請高手指正,萬分感謝!
實驗板圖紙




下面是C代碼
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define LED P2
#define SMG P0                          //數(shù)碼管段選
#define GPIO_PLACE P1        //位選
sbit K1=P1^4;                          //位操作
sbit K2=P1^5;
sbit K3=P1^6;
sbit K4=P1^7;

sbit ws1=P1^0;                         //數(shù)碼管位選
sbit ws2=P1^1;
sbit ws3=P1^2;
sbit ws4=P1^3;

unsigned char code DIG_CODE[17] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼


void delay5(uint);

main()
{
        SMG=0xff;
        while(1)
        {
                if((P1&0xf0)!=0xff){
                        delay5(1);
                        SMG=0xff;
                        switch(P1&0xf0)
                        {
                                case 0xe0:SMG=DIG_CODE[1];ws1=0;delay5(1);ws1=1;break;
                            case 0xd0:SMG=DIG_CODE[2];ws2=0;delay5(1);ws2=1;break;
                                case 0xb0:SMG=DIG_CODE[3];ws3=0;delay5(1);ws3=1;break;
                            case 0x70:SMG=DIG_CODE[4];ws4=0;delay5(1);ws4=1;break;  
                        }
                }
        }
}

void delay5(uint c)                 //延時5ms
{
         uchar a,b;
         for(;c>0;c--)
                 for(b=19;b>0;b--)
                        for(a=130;a>0;a--);

}



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

使用道具 舉報

沙發(fā)
ID:118098 發(fā)表于 2016-8-25 10:21 | 只看該作者
簡單任務(wù)
回復

使用道具 舉報

板凳
ID:136609 發(fā)表于 2016-8-25 10:31 | 只看該作者
case語句少了大括號吧,應該是case 0xe0:{SMG=DIG_CODE[1];ws1=0;delay5(1);ws1=1;}break;
回復

使用道具 舉報

地板
ID:118098 發(fā)表于 2016-8-25 10:38 | 只看該作者
thest 發(fā)表于 2016-8-25 10:31
case語句少了大括號吧,應該是case 0xe0:{SMG=DIG_CODE[1];ws1=0;delay5(1);ws1=1;}break;

按你說的試了,不可以的
回復

使用道具 舉報

5#
ID:137549 發(fā)表于 2016-8-25 10:38 | 只看該作者
按key1的時候把LED1為1其他的全部寫為0;
switch(P1&0xf0)
{
    case 0xe0:
          ws1=1;ws2=0;ws3=0;ws4=0;
          SMG=DIG_CODE[1];
          break;
   case 0xd0:;;break; 同上打開相應的led位
   case 0xb0:;;;break;
   case 0x70:;;break;  
}
回復

使用道具 舉報

6#
ID:39386 發(fā)表于 2016-8-25 15:18 | 只看該作者
switch(P1&0xf0)
{
    case 0xe0:
          ws1=1;ws2=0;ws3=0;ws4=0;
          SMG=DIG_CODE[1];
          break;
   case 0xd0:;;break; 同上打開相應的led位
   case 0xb0:;;;break;
   case 0x70:;;break;  
}
回復

使用道具 舉報

7#
ID:118098 發(fā)表于 2016-8-25 16:53 | 只看該作者
找到問題出在那了,還是要謝謝你們
回復

使用道具 舉報

8#
ID:118098 發(fā)表于 2016-8-25 16:54 | 只看該作者
huangfuxi2002 發(fā)表于 2016-8-25 15:18
switch(P1&0xf0)
{
    case 0xe0:

找到問題出在那了,還要是謝謝你
回復

使用道具 舉報

9#
ID:118098 發(fā)表于 2016-8-25 16:54 | 只看該作者
huangfuxi2002 發(fā)表于 2016-8-25 15:18
switch(P1&0xf0)
{
    case 0xe0:

找到問題了,還是要謝謝你們
回復

使用道具 舉報

10#
ID:118098 發(fā)表于 2016-8-25 16:56 | 只看該作者
找到問題了,還是要謝謝你們
回復

使用道具 舉報

11#
ID:137239 發(fā)表于 2016-8-26 01:04 | 只看該作者
讀輸入的時候要把P1^4~P1^7拉高,也就是置一,其他的寫零,也就是P1=0xf0;除此之外,還要考慮到按鍵抖動,這點樓主是考慮到了,不過感覺有些不妥,有些啰嗦,不知道樓主把數(shù)碼管段選都置一是什么意思?建議樓主可以這樣寫:
void main()
{
    P1=0xf0;
while(1)
    {
         if((P1|0x00)!=0xf0)
         {
      delay5(1);//延時消抖
   if((P1&0x00)!=0xf0)
   {
     switch(P1&0xf0)
              {
                    case 0xe0:SMG=DIG_CODE[1];ws1=1;delay5(400);ws1=0;break; //延時加長,這樣看到的時間長點
                    case 0xd0:SMG=DIG_CODE[2];ws2=1;delay5(400);ws2=0;break;//NPN型三極管,發(fā)射極接地,高電平導通,做開關(guān)用
                    case 0xb0:SMG=DIG_CODE[3];ws3=1;delay5(400);ws3=0;break;
                    case 0x70:SMG=DIG_CODE[4];ws4=1;delay5(400);ws4=0;break;  
              }
   }                       
         }
    }
}

回復

使用道具 舉報

12#
ID:137239 發(fā)表于 2016-8-26 02:19 來自手機 | 只看該作者
likemanweb 發(fā)表于 2016-8-25 16:56
找到問題了,還是要謝謝你們

是哪里出了問題?可否告知一下?
回復

使用道具 舉報

13#
ID:5564 發(fā)表于 2016-8-26 09:29 | 只看該作者
是不是沒有采用動態(tài)掃描
回復

使用道具 舉報

14#
ID:137239 發(fā)表于 2016-8-26 13:04 | 只看該作者
likemanweb 發(fā)表于 2016-8-25 16:53
找到問題出在那了,還是要謝謝你們

樓主方便說說是哪里出了問題嗎?
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表