標(biāo)題: 求解程序一邊控制LED一邊控制按鍵 [打印本頁]

作者: 大黃蜂001    時間: 2017-6-18 16:35
標(biāo)題: 求解程序一邊控制LED一邊控制按鍵
我從廠里面拿來了一個學(xué)習(xí)板(作為初學(xué)者,我用的是AT89C52單片機(jī)),這個學(xué)習(xí)板數(shù)碼管位選是P0口,低電平有效,
段選是P2口,也是低電平有效。數(shù)碼管對應(yīng)的按鍵是一邊是P2^2~P2^7,公共端接的是P3^3。怎么才能一邊控制按鍵一邊讓數(shù)碼管亮(程序不會寫)。這是我的寫的按鍵控制小燈的程序,可是控制數(shù)碼管就不會了。
//LED小燈區(qū)別按鍵
//LED小燈區(qū)別按鍵
#include<reg52.h>                        
#define uint unsigned int       
#define uchar unsigned char
uchar temp;
sbit key=P3^3;             //按鍵公共端
void delay(uchar z)       //延時函數(shù)
{
uint x,y;
for(x=70;x>0;x--)
   for(y=z;y>0;y--);
}       
void main()
{
while(1)
  {
    key=0;              //按鍵公共端置0
    temp=P2;          //用按鍵掃描方法判斷是否有按鍵按下
    temp=temp&0xff;
    while(temp!=0xff)
      {
       delay(5);            //延時一段時間確認(rèn)按鍵是否按下
        temp=P2;
        temp=temp&0xff;
        while(temp!=0xff)
        {
                temp=P2;
                switch(temp)          //對應(yīng)按下的不同按鍵,點亮不同的LED小燈
                {
                        case 0x7f:P1=0x7f;break;
                        case 0xbf:P1=0xbf;break;
                        case 0xdf:P1=0xdf;break;
                        case 0xef:P1=0xef;break;
                        case 0xf7:P1=0xf7;break;
                        case 0xfb:P1=0xfb;break;
                }
                while(temp!=0xff)          //消除按鍵松開時的抖動
                {
                temp=P2;
                }
        }
     }
  }
}

作者: 大黃蜂001    時間: 2017-6-18 17:28
P0段選,P2位選,說錯了
作者: 小潘哥    時間: 2017-6-18 17:53
數(shù)碼管驅(qū)動分為位選和段選,如果是多位數(shù)碼管,得進(jìn)行動態(tài)掃描,建議先了解一下數(shù)碼管的驅(qū)動原理,然后先讓一位顯示,再升級成多位的
作者: 大黃蜂001    時間: 2017-6-18 19:31
小潘哥 發(fā)表于 2017-6-18 17:53
數(shù)碼管驅(qū)動分為位選和段選,如果是多位數(shù)碼管,得進(jìn)行動態(tài)掃描,建議先了解一下數(shù)碼管的驅(qū)動原理,然后先讓 ...

數(shù)碼管動態(tài)顯示我也嘗試著做好了,可是不知道怎么把數(shù)碼管動態(tài)顯示和這個程序和在一起。
void display()                                           //數(shù)碼管從0到255動態(tài)顯示
{                       
        P2=0x7f;
        P0=number[num/100];
        delay(10);
        P2=0xbf;
        P0=number[num%100/10];
        delay(10);
        P2=0xdf;
        P0=number[num%10];
        delay(10);
}




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1