找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1053|回复: 0
打印 上一主题 下一主题
收起左侧

为什么这段单片机蜂鸣器代码不能实现不同发声,只能听到一种持续声音,改了好久了

[复制链接]
跳转到指定楼层
楼主


单片机源程序如下:
  1. #include <reg52.h>
  2. #defineuchar unsigned char
  3. #defineuint  unsigned int
  4. uchartemp;
  5. intyanp=20;
  6. uchari,key,yand;
  7. uchardispay_[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
  8. ucharyanp_[]={64104,64260,64400,64524,
  9.                    64580,64685,64778,64820,64898,64968,65030,
  10.                     65058,65110,65157,65178,65217};
  11. ucharyand_[3]={0xfe,0xef,0xee};
  12. sbitP3_7=P3^7;
  13. voiddelay(uint i)
  14. {
  15.         uint m,n;
  16.         for(m=i;m>0;m--)
  17.                 for(n=125;n>0;n--);
  18. }
  19. voidkeyscan()
  20. {
  21.         P1=0xf0;
  22.         if(P1!=0xf0)
  23.         {
  24.                 delay(10);
  25.                 if(P1!=0xf0)
  26.                 {
  27.                         temp=P1;
  28.                         temp|=0x0f;
  29.                         P1=temp;
  30.                         switch(P1)
  31.                         {
  32.                                 case0xee:key=4;yand=0;yanp=0;break;
  33.                                 case0xde:key=5;yand=0;yanp=1;break;
  34.                                 case 0xbe:key=6;yand=0;yanp=2;break;
  35.                                 case0x7e:key=7;yand=0;yanp=3;break;
  36.                                 case0xed:key=1;yand=1;yanp=4;break;
  37.                                 case0xdd:key=2;yand=1;yanp=5;break;
  38.                                 case0xbd:key=3;yand=1;yanp=6;break;
  39.                                 case0x7d:key=4;yand=1;yanp=7;break;
  40.                                 case0xeb:key=5;yand=1;yanp=8;break;
  41.                                 case0xdb:key=6;yand=1;yanp=9;break;
  42.                                 case0xbb:key=7;yand=1;yanp=10;break;
  43.                                 case0x7b:key=1;yand=2;yanp=11;break;
  44.                                 case0xe7:key=2;yand=2;yanp=12;break;
  45.                                 case 0xd7:key=3;yand=2;yanp=13;break;
  46.                                 case0xb7:key=4;yand=2;yanp=14;break;
  47.                                 case0x77:key=5;yand=2;yanp=15;break;
  48.                         }     
  49.                 }
  50.         }
  51. }
  52. voiddiapay()
  53. {
  54.         P2=yand_[yand];
  55.         P0=dispay_[key];
  56. }
  57. voidmain()
  58. {       TMOD=0x10;
  59.                                    EA=1;
  60.                                    ET1=1;
  61.         while(1)
  62.         {
  63.                                    keyscan();
  64.           diapay();         
  65.           delay(200);                              
  66.                                    if(yanp!=20)
  67.                                    {
  68.                                           TR1=1;
  69.                                           TH1=yanp_[yanp]/256;
  70.                 TL1=yanp_[yanp]%256;
  71.                                           TR1=1;
  72.                                    }
  73.                             }  }
  74. voidt0(void) interrupt 3
  75. {     TH1=yanp_[yanp]/256;
  76.        TL1=yanp_[yanp]%256;
  77.        P3_7=~P3_7;
  78. }

复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表