找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2026|回復(fù): 10
收起左側(cè)

單片機(jī)程序好多錯(cuò)誤 求指導(dǎo)

[復(fù)制鏈接]
ID:1062123 發(fā)表于 2023-2-7 22:20 | 顯示全部樓層 |閱讀模式
#include <REGX52.H>
typedef unsigned char u8;
typedef unsigned int u16;
#define SMG PORT P0
#define KEY_MATRIX_PORT P1
u8 gsmg_code[16]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x77,
0x7c,0x39,0x5e,0x79,0x71}
void delay_10us(u16 ten_us)
{
        while(ten_us--);
}
u8 key_matrix(void)
{
         u8 key_is=0;
        KEY_MATRIX_PORT =0xf7;
         if(KEY_MATRIX_PORT!=0xf7)
         {
                 delay_10us(1000);
                switch(KEY_MATRIX_PORT )
                {
                        case 0x77:key_is 1;break;
                        case 0xb7:key_is 5;break;
                        case 0xd7:key_is 9;break;
                        case 0xe7:key_is 13;break;
                }                                          
                while(KEY_MATRIX_PORT=0Xf7);
                return key_is;
         }
         else if(KEY_MATRIX_PORT!=0xfb)
         {
                 delay_10us(1000);
                switch(KEY_MATRIX_PORT)
                {
                        case 0x7b:key is 2;break;
                        case 0xbb:key is 6;break;
                        case 0xdb:key is 10;break;
                        case 0xeb:key is 14;break;
                }
                while(KEY_MATRIX_PORT=0Xfb);
                return key is;
         }
         else if(KEY_MATRIX_PORT!=0xfd)
         {
                 delay_10us(1000);
                switch(KEY_MATRIX_PORT)
                {
                        case 0x7d:key is 3;break;
                        case 0xbd:key is 7;break;
                        case 0xdd:key is 11;break;
                        case 0xed:key is 15;break;
                }
                while(KEY  MATRIX POR=0Xfd);
                return key is;
         }
         if(KEY_MATRIX_PORT !=0xfe)
         {
                 delay_10us(1000);
                switch(KEY_MATRIX_PORT )
                {
                        case 0x7e:key is 4;break;
                        case 0xbe:key is 8;break;
                        case 0xde:key is 12;break;
                        case 0xee:key is 16;break;
                }
                while(KEY_MATRIX_PORT =0Xfe);
                return key is;
         }
}
void main()
{          u8 key=0;
         while(1)
        {
                key=key_matrix();
                if(key!=0)
                P0=gsmg[key-1];
        }
}
   
回復(fù)

使用道具 舉報(bào)

ID:903582 發(fā)表于 2023-2-7 23:22 | 顯示全部樓層
你把錯(cuò)誤也貼出來(lái)啊 ,我們又不是編譯器
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2023-2-7 23:53 | 顯示全部樓層
只看到第一個(gè)錯(cuò)誤
#define SMG PORT P0
這里SMG PORT中間加空格就是兩個(gè)東西了,要寫成SMG_PORT
回復(fù)

使用道具 舉報(bào)

ID:844772 發(fā)表于 2023-2-8 00:01 來(lái)自觸屏版 | 顯示全部樓層
key is 少_。  
回復(fù)

使用道具 舉報(bào)

ID:94031 發(fā)表于 2023-2-8 06:08 | 顯示全部樓層
u8 gsmg_code[16]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x77,
0x7c,0x39,0x5e,0x79,0x71}最后要有分號(hào)。
回復(fù)

使用道具 舉報(bào)

ID:94031 發(fā)表于 2023-2-8 06:32 | 顯示全部樓層
case 0x77:key_is 1;break;應(yīng)該 key_is = 1;
回復(fù)

使用道具 舉報(bào)

ID:94031 發(fā)表于 2023-2-8 06:38 | 顯示全部樓層
while(KEY_MATRIX_PORT=0Xfb);應(yīng)該while(KEY_MATRIX_PORT==0Xfb);
回復(fù)

使用道具 舉報(bào)

ID:596109 發(fā)表于 2023-2-8 08:33 | 顯示全部樓層
                        case 0x7e:key is 4;break;                         case 0xbe:key is 8;break;                         case 0xde:key is 12;break;                         case 0xee:key is 16;break,k
回復(fù)

使用道具 舉報(bào)

ID:596109 發(fā)表于 2023-2-8 08:34 | 顯示全部樓層
                        case 0x7e:key is 4;break;                         case 0xbe:key is 8;break;                         case 0xde:key is 12;break;                         case 0xee:key is 16;break //key is改成key_is =
回復(fù)

使用道具 舉報(bào)

ID:76318 發(fā)表于 2023-2-8 11:34 | 顯示全部樓層
#include <REGX52.H> typedef unsigned char u8; typedef unsigned int u16; #define SMG_PORT P0                                       //P0口接數(shù)碼管 #define KEY_MATRIX_PORT P1                                               //P1口接矩陣按鍵 u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};          //0~9 a~f 全滅        共陰數(shù)碼管 void delay_10us(u16 ten_us) {      while(ten_us--); } u8 key_matrix(void)                                               //按鍵函數(shù)         高四位接行線,低四位接列線 {      u8 key_is=0;                                                                   //鍵值變量       KEY_MATRIX_PORT =0xf7;                                   //按鍵賦值        1111 0111      if(KEY_MATRIX_PORT!=0xf7)                           //有鍵按下               {          delay_10us(100);                         //延時(shí)          switch(KEY_MATRIX_PORT )                                  //匹配鍵值           {                 case 0x77:key_is=1;break;                   //0111 0111         鍵值1                 case 0xb7:key_is=5;break;                   //1011 0111         鍵值5                 case 0xd7:key_is=9;break;                   //1101 0111         鍵值9                 case 0xe7:key_is=13;break;                   //1110 0111         鍵值13           }                                                     while(KEY_MATRIX_PORT!=0xf7);                           //等待松手                   return key_is;                                                           //返回鍵值      }          KEY_MATRIX_PORT =0xfb;                         //按鍵賦值   1111 1011     if(KEY_MATRIX_PORT!=0xfb)                      //有鍵按下   不等于1111 1011      {          delay_10us(100);                          //延時(shí)          switch(KEY_MATRIX_PORT)                   //匹配           {                 case 0x7b:key_is=2;break;                   //0111 1011  鍵值2                 case 0xbb:key_is=6;break;                   //1011 1011  鍵值6                 case 0xdb:key_is=10;break;                   //1101 1011  鍵值10                 case 0xeb:key_is=14;break;                   //1110 1011  鍵值14           }          while(KEY_MATRIX_PORT!=0xfb);                   //等待松手             return key_is;                                                           //返回鍵值      }           KEY_MATRIX_PORT =0xfd;                               //按鍵賦值   1111 1101     if(KEY_MATRIX_PORT!=0xfd)                      //有鍵按下         {          delay_10us(100);                          //延時(shí)          switch(KEY_MATRIX_PORT)                   //匹配           {                 case 0x7d:key_is=3;break;          //0111 1101  鍵值3                 case 0xbd:key_is=7;break;                   //1011 1101  鍵值7                 case 0xdd:key_is=11;break;                   //1101 1101  鍵值11                 case 0xed:key_is=15;break;                   //1110 1101        鍵值15           }          while(KEY_MATRIX_PORT!=0xfd);             //等待松手            return key_is;                                   //返回鍵值      }           KEY_MATRIX_PORT =0xfe;                               //按鍵賦值        1111 1110     if(KEY_MATRIX_PORT !=0xfe)                                           //有鍵按下   不等于1111 1110      {           delay_10us(100);                               //延時(shí)           switch(KEY_MATRIX_PORT )                                   //匹配            {                 case 0x7e:key_is=4;break;                   //0111 1110  鍵值4                 case 0xbe:key_is=8;break;                   //1011 1110  鍵值8                 case 0xde:key_is=12;break;                   //1101 1110  鍵值12                 case 0xee:key_is=16;break;                   //1110 1110  鍵值16            }           while(KEY_MATRIX_PORT!=0xfe);            //等待松手              return key_is;                                                   //返回鍵值      } } void main()                                               //主函數(shù) {              u8 key=0;                                       //定義鍵值變量    SMG_PORT=gsmg_code[16];                         //熄滅數(shù)碼管        while(1)     {          key=key_matrix();                               //讀取按鍵值               SMG_PORT=gsmg_code[key-1];                           //P0顯示鍵值     } }
回復(fù)

使用道具 舉報(bào)

ID:1062123 發(fā)表于 2023-2-8 12:22 | 顯示全部樓層
謝謝大家建議很好我都采納了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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