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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機的有關(guān)問題,小白求教,main重復(fù)出錯,源碼已貼出

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:658466 發(fā)表于 2019-12-10 17:53 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 愛自由O 于 2019-12-10 17:59 編輯

一個矩陣鍵盤控制蜂鳴器,一個數(shù)碼管程序,怎么合并使用,源碼已貼出,
  1. #include "reg52.h"
  2. #include "key.h"

  3. sbit led=P2^5;

  4. unsigned int Tab_F[]={440,494,554,220,
  5.                                                                                         440,494,554,220,
  6.                                                                                         554,587,659,554,
  7.                                                                                         587,659,999,};

  8. unsigned char key_num;

  9. unsigned int Pinlv,Shichang;

  10. bit beep;

  11. void Timer0Init()
  12. {
  13.         TMOD|=0X01;
  14.   TH0=(65536-92)/256;
  15.         TL0=(65536-92)%256;         
  16.         ET0=1;                                                                                   //T0中斷
  17.         EA=1;                                                                                   //cpu總中斷
  18.         TR0=1;        
  19. }


  20. void main()
  21. {        
  22.         Timer0Init();  
  23.         while(1)
  24.         {
  25.                 key_num=KeyDown();
  26.                
  27.                 if(key_num!=0xff)
  28.                 {
  29.                         Pinlv=Tab_F[key_num];  
  30.                   beep=1;
  31.                         Shichang=0;
  32.                         EA=1;
  33.                 }
  34.         };
  35.         
  36. }


  37. void Timer0() interrupt 1
  38. {
  39.         static unsigned int i;
  40.         TH0=(65536-92)/256;        
  41.         TL0=(65536-92)%256;         
  42.         
  43.         i++;
  44.         if(i>(5000/Pinlv))
  45.         {
  46.                                 if(beep==1)
  47.                                         {led=~led;}
  48.                  i=0;        
  49.         }        
  50.         
  51.         Shichang++;
  52.         if(Shichang==1000)
  53.           {
  54.                         beep=0;
  55.                         led=0;
  56.                         EA=0;
  57.                 }
  58. }
  59. //===========================分隔//
  60. #include "key.h"

  61. unsigned char KeyValue=0;

  62. void delay(unsigned int i)
  63. {
  64.         while(i--);        
  65. }


  66. unsigned char KeyDown(void)
  67. {
  68.         char a=0;
  69.         GPIO_KEY=0x0f;

  70.         if(GPIO_KEY!=0x0f)
  71.         {
  72.                 delay(1000);
  73.                 if(GPIO_KEY!=0x0f)
  74.                 {        
  75.                         
  76.                         GPIO_KEY=0X0F;
  77.                         switch(GPIO_KEY)                                                                   //lie
  78.                         {
  79.                                 case(0X07):        KeyValue=0;break;//   0111
  80.                                 case(0X0b):        KeyValue=1;break;//   1011
  81.                                 case(0X0d): KeyValue=2;break; //  1101
  82.                                 case(0X0e):        KeyValue=3;break;//   1110
  83.                         }
  84.                         
  85.                         GPIO_KEY=0XF0;                                                                    //hang
  86.                         switch(GPIO_KEY)
  87.                         {
  88.                                 case(0X70):        KeyValue=KeyValue;break;   //0111
  89.                                 case(0Xb0):        KeyValue=KeyValue+4;break;
  90.                                 case(0Xd0): KeyValue=KeyValue+8;break;
  91.                                 case(0Xe0):        KeyValue=KeyValue+12;break;
  92.                         }
  93.                         while((a<50)&&(GPIO_KEY!=0xf0))         
  94.                         {
  95.                                 delay(1000);
  96.                                 a++;
  97.                         }
  98.                         
  99.                 }
  100.         }
  101.         else
  102.         {
  103.                 KeyValue=0xff;
  104.         }
  105.         
  106.         return KeyValue;
  107. }
  108. //===========================分隔//
  109. #include <reg52.h>
  110. typedef unsigned char uchar;
  111. typedef unsigned int uint;
  112. sbit LSA=P2^2;                                         
  113. sbit LSB=P2^3;
  114. sbit LSC=P2^4;
  115. uchar smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  116. 0x7f,0x6f};
  117. void delay(uint a)
  118. {
  119.   while(a--);
  120. }

  121. void dig_Disp()
  122. {
  123. uchar i=0;
  124. for(;i<8;i++)
  125.         {
  126.         switch(i)
  127.       {
  128.         case 0:
  129.                        LSA=0;LSB=0;LSC=0;P0=smg[0];break;
  130.                 case 1:
  131.                        LSA=1;LSB=0;LSC=0;P0=smg[1];break;
  132.             case 2:
  133.                        LSA=0;LSB=1;LSC=0;P0=smg[2];break;
  134.                 case 3:
  135.                        LSA=1;LSB=1;LSC=0;P0=smg[1];break;
  136.             case 4:
  137.                        LSA=0;LSB=0;LSC=1;P0=smg[9];break;
  138.                 case 5:
  139.                        LSA=1;LSB=0;LSC=1;P0=smg[1];break;
  140.                 case 6:
  141.                        LSA=0;LSB=1;LSC=1;P0=smg[0];break;
  142.                 case 7:
  143.                        LSA=1;LSB=1;LSC=1;P0=smg[2];break;
  144.            }
  145.            delay(100);
  146.            P0=0x00;
  147.           }
  148.    }
  149.    void main()
  150.    {
  151.    while(1)
  152.    {
  153.    dig_Disp();
  154.    }
  155.    }
復(fù)制代碼


代碼.png (20.45 KB, 下載次數(shù): 17)

代碼.png

程序.rar

30.4 KB, 下載次數(shù): 5

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

使用道具 舉報

沙發(fā)
ID:658466 發(fā)表于 2019-12-10 18:00 | 只看該作者
工程架構(gòu)不知道正確不,這個控制數(shù)碼管的程序一直實現(xiàn)不過
回復(fù)

使用道具 舉報

板凳
ID:601478 發(fā)表于 2019-12-11 09:23 | 只看該作者
不清楚你放的這三個程序是什么關(guān)系,我也是初學的,不過大概看了一下好像找不到shuxian這個東東,報錯提示你的main里面沒有用到這個shuxian,還有那兩個重復(fù)定義的提示,建議還是先看清楚程序哪里漏了什么東西吧,慢慢找原因總能解決的
回復(fù)

使用道具 舉報

地板
ID:278179 發(fā)表于 2019-12-11 13:19 | 只看該作者
這是兩個程序代碼段,合并很簡單,要寫出你想要顯示哪些內(nèi)容或者要達到什么目的,下面是合并的結(jié)果:
#include "reg52.h"
#include "key.h"
/////////移到這里//////////////////////
//#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit LSA=P2^2;                                         
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
/////////////////////////////////

sbit led=P2^5;

unsigned int Tab_F[]={440,494,554,220,
                                                                                        440,494,554,220,
                                                                                        554,587,659,554,
                                                                                        587,659,999,};

unsigned char key_num;

unsigned int Pinlv,Shichang;

bit beep;

void Timer0Init()
{
        TMOD|=0X01;
  TH0=(65536-92)/256;
        TL0=(65536-92)%256;         
        ET0=1;                                                                                   //T0中斷
        EA=1;                                                                                   //cpu總中斷
        TR0=1;        
}

/*/////////////下面這段聲明移到最后面的main主程序里面
void main()
{        
        Timer0Init();  
        while(1)
        {
                key_num=KeyDown();
               
                if(key_num!=0xff)
                {
                        Pinlv=Tab_F[key_num];  
                  beep=1;
                        Shichang=0;
                        EA=1;
                }
        };
        
}
//////////////////////*/

void Timer0() interrupt 1
{
        static unsigned int i;
        TH0=(65536-92)/256;        
        TL0=(65536-92)%256;         
        
        i++;
        if(i>(5000/Pinlv))
        {
                                if(beep==1)
                                        {led=~led;}
                 i=0;        
        }        
        
        Shichang++;
        if(Shichang==1000)
          {
                        beep=0;
                        led=0;
                        EA=0;
                }
}
//===========================分隔//
#include "key.h"

unsigned char KeyValue=0;

void delay(unsigned int i)
{
        while(i--);        
}


unsigned char KeyDown(void)
{
        char a=0;
        GPIO_KEY=0x0f;

        if(GPIO_KEY!=0x0f)
        {
                delay(1000);
                if(GPIO_KEY!=0x0f)
                {        
                        
                        GPIO_KEY=0X0F;
                        switch(GPIO_KEY)                                                                   //lie
                        {
                                case(0X07):        KeyValue=0;break;//   0111
                                case(0X0b):        KeyValue=1;break;//   1011
                                case(0X0d): KeyValue=2;break; //  1101
                                case(0X0e):        KeyValue=3;break;//   1110
                        }
                        
                        GPIO_KEY=0XF0;                                                                    //hang
                        switch(GPIO_KEY)
                        {
                                case(0X70):        KeyValue=KeyValue;break;   //0111
                                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++;
                        }
                        
                }
        }
        else
        {
                KeyValue=0xff;
        }
        
        return KeyValue;
}
//===========================分隔//
/*/////////////下面這段聲明移到前面開頭的聲明
//#include <reg52.h>
//typedef unsigned char uchar;
//typedef unsigned int uint;
//sbit LSA=P2^2;                                         
//sbit LSB=P2^3;
//sbit LSC=P2^4;
//uchar smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
//0x7f,0x6f};
//////////////////////*/

void delay(uint a)
{
  while(a--);
}

void dig_Disp()
{
uchar i=0;
for(;i<8;i++)
        {
        switch(i)
      {
        case 0:
                       LSA=0;LSB=0;LSC=0;P0=smg[0];break;
                case 1:
                       LSA=1;LSB=0;LSC=0;P0=smg[1];break;
            case 2:
                       LSA=0;LSB=1;LSC=0;P0=smg[2];break;
                case 3:
                       LSA=1;LSB=1;LSC=0;P0=smg[1];break;
            case 4:
                       LSA=0;LSB=0;LSC=1;P0=smg[9];break;
                case 5:
                       LSA=1;LSB=0;LSC=1;P0=smg[1];break;
                case 6:
                       LSA=0;LSB=1;LSC=1;P0=smg[0];break;
                case 7:
                       LSA=1;LSB=1;LSC=1;P0=smg[2];break;
           }
           delay(100);
           P0=0x00;
          }
   }
   void main()
   {
   while(1)
   {
//////////////移到這里,屏蔽多余的語句                 
//void main()
//{        
//        Timer0Init();  
//        while(1)
//        {
                key_num=KeyDown();
               
                if(key_num!=0xff)
                {
                        Pinlv=Tab_F[key_num];  
                  beep=1;
                        Shichang=0;
                        EA=1;
                }
//        };
//        
//}                 
/////////////////////////////////                                                               
   dig_Disp();
   }
   }
回復(fù)

使用道具 舉報

5#
ID:658466 發(fā)表于 2019-12-11 22:48 | 只看該作者
PDDDF 發(fā)表于 2019-12-11 09:23
不清楚你放的這三個程序是什么關(guān)系,我也是初學的,不過大概看了一下好像找不到shuxian這個東東,報錯提示 ...

一個是引用,一個是矩陣鍵盤對應(yīng)蜂鳴器頻率,shuxian是一個數(shù)碼管顯示的程序,好像引腳使用重復(fù)了
回復(fù)

使用道具 舉報

6#
ID:658466 發(fā)表于 2019-12-11 22:48 | 只看該作者
huwqly 發(fā)表于 2019-12-11 13:19
這是兩個程序代碼段,合并很簡單,要寫出你想要顯示哪些內(nèi)容或者要達到什么目的,下面是合并的結(jié)果:
#inc ...

好的好的,我試下程序,謝謝謝謝
回復(fù)

使用道具 舉報

7#
ID:658466 發(fā)表于 2019-12-11 23:31 | 只看該作者
huwqly 發(fā)表于 2019-12-11 13:19
這是兩個程序代碼段,合并很簡單,要寫出你想要顯示哪些內(nèi)容或者要達到什么目的,下面是合并的結(jié)果:
#inc ...

Build target 'Target 1'
assembling STARTUP.A51...
compiling gai.c...
gai.c(2): warning C318: can't open file 'key.h'
GAI.C(68): error C202: 'GPIO_KEY': undefined identifier
GAI.C(70): error C202: 'GPIO_KEY': undefined identifier
GAI.C(73): error C202: 'GPIO_KEY': undefined identifier
GAI.C(76): error C202: 'GPIO_KEY': undefined identifier
GAI.C(77): error C202: 'GPIO_KEY': undefined identifier
GAI.C(85): error C202: 'GPIO_KEY': undefined identifier
GAI.C(86): error C202: 'GPIO_KEY': undefined identifier
GAI.C(93): error C202: 'GPIO_KEY': undefined identifier
GAI.C(111): error C237: '_delay': function already has a body
GAI.C(146): error C141: syntax error near '{'
GAI.C(164): error C141: syntax error near '}'
compiling key.c...
Target not created
回復(fù)

使用道具 舉報

8#
ID:278179 發(fā)表于 2019-12-12 08:11 | 只看該作者
#include "key.h"這個是外部引用,你要找到你原先復(fù)制那段鍵盤的程序,把里面的 "key.h"復(fù)制添加到你的這個工程
回復(fù)

使用道具 舉報

9#
ID:278179 發(fā)表于 2019-12-12 08:14 | 只看該作者
gai.c(2): warning C318: can't open file 'key.h'
這里提示你 不能打開'key.h'
回復(fù)

使用道具 舉報

10#
ID:213173 發(fā)表于 2019-12-12 08:44 | 只看該作者
這兩個程序本來就是一種完成基本功能的學習代碼,其缺陷是非常明顯的,在實際應(yīng)用中很少采用。兩者合并后其基本功能都有,但不完善。按鍵反應(yīng)不靈敏,蜂鳴器工作期間明顯干擾數(shù)碼管顯示。

  1. #include "reg52.h"
  2. #define GPIO_KEY P3
  3. typedef unsigned char uchar;
  4. typedef unsigned int uint;
  5. sbit LSA=P2^2;                                         
  6. sbit LSB=P2^3;
  7. sbit LSC=P2^4;
  8. sbit led=P2^5;
  9. uchar smg[]={
  10.         0x3f,0x06,0x5b,0x4f,0x66,
  11.         0x6d,0x7d,0x07,0x7f,0x6f};
  12. unsigned int Tab_F[]={
  13.         440,494,554,220,440,494,554,220,
  14.         554,587,659,554,587,659,999,};
  15. unsigned char key_num;
  16. unsigned int Pinlv,Shichang;
  17. unsigned char KeyValue=0;
  18. unsigned char key_num;
  19. bit beep;

  20. void delay(unsigned int i)
  21. {
  22.         while(i--);        
  23. }

  24. void Timer0Init()
  25. {
  26.         TMOD|=0X01;
  27.         TH0=(65536-92)/256;
  28.         TL0=(65536-92)%256;         
  29.         ET0=1;       //T0中斷
  30.         EA=1;         //cpu總中斷
  31.         TR0=1;        
  32. }

  33. unsigned char KeyDown(void)
  34. {
  35.         char a=0;
  36.         GPIO_KEY=0x0f;
  37.         if(GPIO_KEY!=0x0f)
  38.         {
  39.                 delay(1000);
  40.                 if(GPIO_KEY!=0x0f)
  41.                 {        
  42.                         GPIO_KEY=0X0F;
  43.                         switch(GPIO_KEY) //lie
  44.                         {
  45.                                 case(0X07): KeyValue=0;break;//   0111
  46.                                 case(0X0b): KeyValue=1;break;//   1011
  47.                                 case(0X0d): KeyValue=2;break; //  1101
  48.                                 case(0X0e): KeyValue=3;break;//   1110
  49.                         }

  50.                         GPIO_KEY=0XF0;    //hang
  51.                         switch(GPIO_KEY)
  52.                         {
  53.                                 case(0X70): KeyValue=KeyValue;break;   //0111
  54.                                 case(0Xb0): KeyValue=KeyValue+4;break;
  55.                                 case(0Xd0): KeyValue=KeyValue+8;break;
  56.                                 case(0Xe0): KeyValue=KeyValue+12;break;
  57.                         }
  58.                         while((a<50)&&(GPIO_KEY!=0xf0))
  59.                         {
  60.                                 delay(1000);
  61.                                 a++;
  62.                         }
  63.                 }
  64.         }
  65.         else
  66.         {
  67.                 KeyValue=0xff;
  68.         }
  69.         return KeyValue;
  70. }
  71. void dig_Disp()
  72. {
  73.         uchar i=0;
  74.         for(;i<8;i++)
  75.         {
  76.                 switch(i)
  77.                 {
  78.                         case 0:
  79.                         LSA=0;LSB=0;LSC=0;P0=smg[0];break;
  80.                         case 1:
  81.                         LSA=1;LSB=0;LSC=0;P0=smg[1];break;
  82.                         case 2:
  83.                         LSA=0;LSB=1;LSC=0;P0=smg[2];break;
  84.                         case 3:
  85.                         LSA=1;LSB=1;LSC=0;P0=smg[1];break;
  86.                         case 4:
  87.                         LSA=0;LSB=0;LSC=1;P0=smg[9];break;
  88.                         case 5:
  89.                         LSA=1;LSB=0;LSC=1;P0=smg[1];break;
  90.                         case 6:
  91.                         LSA=0;LSB=1;LSC=1;P0=smg[0];break;
  92.                         case 7:
  93.                         LSA=1;LSB=1;LSC=1;P0=smg[2];break;
  94.                 }
  95.                 delay(100);
  96.                 P0=0x00;
  97.         }
  98. }

  99. void main()
  100. {        
  101.         Timer0Init();  
  102.         while(1)
  103.         {
  104.                 dig_Disp();
  105.                 key_num=KeyDown();
  106.                 if(key_num!=0xff)
  107.                 {
  108.                         Pinlv=Tab_F[key_num];  
  109.                         beep=1;
  110.                         Shichang=0;
  111.                         EA=1;
  112.                 }
  113.         }
  114. }

  115. void Timer0() interrupt 1
  116. {
  117.         static unsigned int i;
  118.         TH0=(65536-92)/256;        
  119.         TL0=(65536-92)%256;         

  120.         i++;
  121.         if(i>(5000/Pinlv))
  122.         {
  123.                 if(beep==1)
  124.                 {led=~led;}
  125.                 i=0;        
  126.         }        

  127.         Shichang++;
  128.         if(Shichang==1000)
  129.         {
  130.                 beep=0;
  131.                 led=0;
  132.                 EA=0;
  133.         }
  134. }

  135. //===========================分隔//
  136. /*
  137. #include <reg52.h>

  138. void delay(uint a)
  139. {
  140. while(a--);
  141. }

  142. void main()
  143. {
  144. while(1)
  145. {
  146. dig_Disp();
  147. }
  148. }
  149. */
復(fù)制代碼



回復(fù)

使用道具 舉報

11#
ID:658466 發(fā)表于 2019-12-12 13:01 | 只看該作者
謝謝大家
回復(fù)

使用道具 舉報

12#
ID:658466 發(fā)表于 2019-12-12 13:01 | 只看該作者
huwqly 發(fā)表于 2019-12-12 08:11
#include "key.h"這個是外部引用,你要找到你原先復(fù)制那段鍵盤的程序,把里面的 "key.h"復(fù)制添加到你的這個 ...

key.h是那個矩陣鍵盤掃描,現(xiàn)在不用了,用的獨立鍵盤
回復(fù)

使用道具 舉報

13#
ID:278179 發(fā)表于 2019-12-12 20:30 | 只看該作者
那你就把key.h這個語句屏蔽或者刪除,不然編譯肯定找不到報錯
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产美女精品视频免费观看 | 97超在线视频 | 国产精品完整版 | 一区二区成人 | 91国产视频在线观看 | 免费久 | 九九热在线观看 | 国产精品无码专区在线观看 | 草久久久| 可以在线看的黄色网址 | 久久久久精 | 一区二区在线 | 精品免费国产一区二区三区四区介绍 | 在线一区视频 | 成人av在线播放 | 超碰最新在线 | 午夜视频大全 | 国产美女在线观看 | 2018天天干天天操 | 亚洲伊人久久综合 | 久久一视频 | 91视视频在线观看入口直接观看 | 国产精品.xx视频.xxtv | 日韩在线观看网站 | av国产精品毛片一区二区小说 | 国产精品永久 | www.久久久久久久久久久久 | 日韩毛片网 | 日本韩国电影免费观看 | 色综合国产 | 特黄色一级毛片 | 在线观看亚洲精品 | 精品久久久久久久 | 精品久久久久久亚洲精品 | 免费视频久久 | 久久精品—区二区三区 | 99热首页| 亚洲在线| 欧美乱淫视频 | 国产日韩欧美在线 | 国产精品视频网 |