找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1894|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

誰能幫我看看為啥單片機(jī)程序?qū)崿F(xiàn)不了鍵盤逐個輸入到BCD中

[復(fù)制鏈接]
回帖獎勵 40 黑幣 回復(fù)本帖可獲得 20 黑幣獎勵! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
為啥實(shí)現(xiàn)不了從鍵盤逐個輸入到數(shù)碼管中,我在PROTUES手動控制鎖存是可以實(shí)現(xiàn)的,代碼不知道哪里出了問題。目標(biāo)是想輸入一個數(shù)字鎖存然后輸入下一個再鎖存。這樣

單片機(jī)源程序如下:
#include <reg51.h>
unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F, //0-9字形碼,也叫段碼
0x77,0x7C,0x39,0x5E,0x79,0x71};

sbit Q=P3^0;   //BCD1
sbit W=P3^1;        //BCD2
sbit E=P3^2;        //BCD3
sbit R=P3^3;        //BCD4

unsigned char count=0;
void delay(unsigned int i)
{          unsigned char j,k;
  for(j=i;j>0;j--)
    for(k=255;k>0;k--);
}
void keyscanf() {
          unsigned char temp;

        
         P2=0xfe;
          temp=P2;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {          temp=P2;
                switch        (temp){
                case 0xee:P1=table[1];count++;break;
                case 0xde:P1=table[2];count++;break;
                case 0xbe:P1=table[3];count++;break;
                case 0x7e:P1=table[4];count++;break;        }
               
        }


                P2=0xfD;
          temp=P2;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {          temp=P2;
                switch        (temp){
                case 0xed:P1=table[5];count++;break;
                case 0xdd:P1=table[6];count++;break;
                case 0xbd:P1=table[7];count++;break;
                case 0x7d:P1=table[8];count++;break;        }
                        

        }
                   P2=0xfB;
          temp=P2;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {          temp=P2;
                switch        (temp){
                case 0xeB:P1=table[9];count++;break;
                case 0xdB:P1=table[10];count++;break;
                case 0xbB:P1=table[11];count++;break;
                case 0x7B:P1=table[12];count++;break;        }
                        

        }
                   P2=0xf7;
          temp=P2;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {          temp=P2;
                switch        (temp){
                case 0xe7:P1=table[13];count++;break;
                case 0xd7:P1=table[14];count++;break;
                case 0xb7:P1=table[15];count++;break;
                case 0x77:P1=table[0];count++;break;        }
                        

        }
                  
           
        }

           


void main()        {

         Q=W=E=R=0;
                        
  while(1){
                  
                if(count==0)
        {        Q=1;W=E=R=0;
                   keyscanf();
        }
        
                if(count==1)
                {         
                         W=1;Q=E=R=0;
                        
                          keyscanf();
                }
                        
                if(count==2)
                {         
                        E=1;Q=W=R=0;
               
                          keyscanf();
                }

               
                if(count==3)
                {         
                        R=1;Q=W=E=0;
               
                          keyscanf();
                }
                if(count==4)
                {        count=0;}
   }
        }

1592383573(1).jpg (81.04 KB, 下載次數(shù): 54)

1592383573(1).jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:332444 發(fā)表于 2020-6-18 07:02 | 只看該作者
對于P3的4個口用于控制鎖存器不用那樣寫的麻煩,直接賦值給P3口1,2,4,8就可以了,寫法比較簡單。按鍵取值那樣寫也太啰嗦了,看起來也不直觀,不如使用16個獨(dú)立按鍵,驅(qū)動寫的容易懂。
回復(fù)

使用道具 舉報

板凳
ID:332444 發(fā)表于 2020-6-18 11:08 | 只看該作者

回復(fù)

使用道具 舉報

地板
ID:600952 發(fā)表于 2020-6-26 13:53 | 只看該作者
樓上說的很詳細(xì),完全贊同,對于P3的4個口用于控制鎖存器不用那樣寫的麻煩,直接賦值給P3口1,2,4,8就可以了,寫法比較簡單。按鍵取值那樣寫也太啰嗦了,看起來也不直觀,不如使用16個獨(dú)立按鍵,驅(qū)動寫的容易懂。
回復(fù)

使用道具 舉報

5#
ID:788495 發(fā)表于 2020-6-27 09:43 | 只看該作者
樓上說的確實(shí)詳細(xì),就直接賦值P3的1、2、4、8就可以,這樣的話操作比較簡單,而且也沒那么麻煩
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表