标题: 有大佬帮忙看看单片机程序为啥仿真时蜂鸣器不响 [打印本页]

作者: 1032405648    时间: 2020-6-2 23:11
标题: 有大佬帮忙看看单片机程序为啥仿真时蜂鸣器不响
求助程序和电路都在下面,怎么调试蜂鸣器都没反应。

  1. #include<reg52.h>
  2. #include<string.h>
  3. #include<intrins.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. unsigned long count;
  7. sbit key1=P3^4;
  8. sbit key2=P3^5;
  9. sbit dula=P2^6;
  10. sbit wela=P2^7;
  11. sbit beep=P1^4;
  12. uchar code table[]={
  13. 0x3f,0x06,0x5b,0x4f,
  14. 0x66,0x6d,0x7d,0x07,
  15. 0x7f,0x6f,0x77,0x7c,
  16. 0x39,0x5e,0x79,0x71
  17. };
  18. void delay(uint z)
  19. {
  20. uint x,y;
  21. for(x=z;x>0;x--);
  22. for(y=110;y>0;y--);
  23. }
  24. void display()
  25. {
  26. int a,b,c,d,e,f;
  27. a = count/100000%10;   //十万
  28. b = count/10000%10;    //万
  29. c = count/1000%10;     //千
  30. d = count/100%10;      //百
  31. e = count/10%10;       //十
  32. f = count/1%10;        //个

  33.     P0=0xfe; //第一个LED
  34. wela=1;
  35. wela=0;
  36. P0=table[a]; //十万位数
  37. dula=1;
  38.   dula=0;
  39.     P0=0xff;   //消隐
  40. delay(1);

  41. P0=0xfd; //第二个LED
  42. wela=1;
  43.   wela=0;
  44. P0=table[b];  // 万位位数
  45. dula=1;
  46.   dula=0;
  47. P0=0xff;
  48. delay(1);

  49. P0=0xfb; //第三个LED
  50. wela=1;
  51.   wela=0;

  52. P0=table[c];  // 千位数
  53. dula=1;
  54.   dula=0;
  55. P0=0xff;
  56. delay(1);

  57. P0=0xf7; //第四个LED
  58. wela=1;
  59.   wela=0;

  60. P0=table[d];  // 百位数
  61. dula=1;
  62.   dula=0;
  63. P0=0xff;
  64. delay(1);
  65. P0=0xef; //第五个LED
  66. wela=1;
  67.   wela=0;

  68. P0=table[e];  // 十位数
  69. dula=1;
  70.   dula=0;
  71.     P0=0xff;
  72. delay(1);

  73. P0=0xdf; //第六个LED
  74. wela=1;
  75.   wela=0;
  76. P0=table[f];  // 个位数
  77. dula=1;
  78.   dula=0;
  79. delay(1);

  80. }
  81. void key()
  82. {
  83. if(key1==0)
  84. {
  85.   delay(7);
  86.   if (key1==0)
  87.   {
  88.    count++;
  89.   }
  90.   while(!key1)
  91.   {
  92.    display();
  93.   }
  94.   delay(1);
  95.   while(!key1)
  96.   {
  97.    display();
  98.   }
  99. }

  100. if(key2==0)
  101. {
  102.   count=0;
  103. }
  104. }
  105. void main()
  106. {
  107. P3=0xff;
  108. P0=0xff;
  109. beep=1;
  110. while(1)
  111. {
  112.   key();
  113.   display();
  114.   if(count>=999999)
  115.   {
  116.    count=0;
  117.    beep=0;
  118.    delay(50);
  119.    beep=1;
  120.   }
  121. }
  122. }
复制代码


作者: 1032405648    时间: 2020-6-2 23:12
我是把999999改成50测试的
作者: nyyd20181    时间: 2020-6-3 08:06
测试下晶体管有没有导通,感觉你程序主循环里少一句延时吧,BEEP一直是0。

作者: benclee    时间: 2020-6-3 08:37
if(count>=999999)//这里改为<试试
  {
   count=0;
   beep=0;
   delay(50);
   beep=1;
  }
作者: wulin    时间: 2020-6-3 08:48
此蜂鸣器没有仿真功能



作者: 1943798304    时间: 2020-6-9 16:04
可能是器件问题
作者: daocheng    时间: 2020-6-10 09:42
蜂鸣器没有仿真功能?是不是这个蜂鸣器是无源的?需要在响时通方波?这个蜂鸣器应该有芯片驱动吧,我的就是普通的无源蜂鸣器
希望对你有帮助

作者: 魏海龙    时间: 2020-7-7 12:11

蜂鸣器可以有问题。
作者: yaoj666    时间: 2020-7-7 14:49
你那个蜂鸣器有问题 ,你换个仿真软件试试




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1