当前位置:   article > 正文

51单片机 蜂鸣器播放提示音_单片机蜂鸣器发声代码

单片机蜂鸣器发声代码

主函数

  1. #include <REGX52.H>
  2. #include "Delay.h"
  3. #include "Key.h"
  4. #include "Nixie.h"
  5. #include "Buzzer.h"
  6. sbit Buzzer=P2^5;
  7. unsigned char KeyNum;
  8. unsigned int i;
  9. void main()
  10. {
  11. Nixie(1,0);
  12. while(1)
  13. {
  14. KeyNum=Key();
  15. if(KeyNum)
  16. {
  17. Buzzer_Time(1000);
  18. Nixie(1,KeyNum);
  19. }
  20. }
  21. }

Buzzer

  1. #include <REGX52.H>
  2. #include <intrins.h>
  3. #include "delay.h"
  4. sbit Buzzer=P2^5;//蜂鸣器端口
  5. /**
  6. * @brief 蜂鸣器私有延时函数,延时500us
  7. * @param 无
  8. * @retval 无
  9. */
  10. void Buzzer_Delay500us() //@12.000MHz
  11. {
  12. unsigned char i;
  13. _nop_();
  14. i = 247;
  15. while (--i);
  16. }
  17. /**
  18. * @brief 蜂鸣器发声
  19. * @param ms 发声的时长
  20. * @retval 无
  21. */
  22. void Buzzer_Time(unsigned int ms)
  23. {
  24. unsigned int i;
  25. for(i=0;i<ms*2;i++)
  26. {
  27. Buzzer=!Buzzer;
  28. Buzzer_Delay500us();
  29. }
  30. }

Delay

  1. void Delay(unsigned int xms) //@12.000MHz
  2. {
  3. unsigned char i, j;
  4. while(xms--)
  5. {
  6. i = 2;
  7. j = 239;
  8. do
  9. {
  10. while (--j);
  11. } while (--i);
  12. }
  13. }

Key

  1. #include <REGX52.H>
  2. #include "Delay.h"
  3. /**
  4. * @brief 获取独立按键键码
  5. * @param 无
  6. * @retval 按下按键的键码,范围0——4 无按键按下,返回值为0
  7. */
  8. unsigned char Key()
  9. {
  10. unsigned char KeyNumber=0;
  11. if(P3_1==0){Delay(100);while(P3_1==0);Delay(100);KeyNumber=1;}
  12. if(P3_0==0){Delay(100);while(P3_0==0);Delay(100);KeyNumber=2;}
  13. if(P3_2==0){Delay(100);while(P3_2==0);Delay(100);KeyNumber=3;}
  14. if(P3_3==0){Delay(100);while(P3_3==0);Delay(100);KeyNumber=4;}
  15. return KeyNumber;
  16. }

MatrixLed

  1. #include <REGX52.H>
  2. #include "DELAY.h"
  3. sbit RCK=P3^5;//位申明,重新命名 RCLK
  4. sbit SCK=P3^6;//时钟 SRCLK
  5. sbit SER=P3^4;//SER
  6. #define MATRIX_LED_PORT P0
  7. /**
  8. * @brief 74HC595写入一个字节
  9. * @param 要写入的字节
  10. * @retval 无
  11. */
  12. void _74HC595_WriteByte(unsigned char Byte)//移位计时器
  13. {
  14. unsigned char i;
  15. for(i=0;i<8;i++)
  16. {
  17. SER=Byte&(0x80>>i);
  18. SCK=1;
  19. SCK=0;
  20. }
  21. RCK=1;
  22. RCK=0;
  23. }
  24. /**
  25. * @brief 点阵屏初始化
  26. * @param 无
  27. * @retval 无
  28. */
  29. void MatrixLED_Init()
  30. {
  31. SCK=0;
  32. RCK=0;
  33. }
  34. /**
  35. * @brief LED点阵屏显示一列数据
  36. * @param Column要选择的列,范围0—7,0在最左边
  37. Data要选择的显示的数据,高位在上,1为亮,0为灭
  38. * @retval 无
  39. */
  40. void MatrixLED_ShowColumn(unsigned char Column,Data)//点阵屏
  41. {
  42. _74HC595_WriteByte(Data);
  43. P0=~(0x80>>Column);//移位操作
  44. Delay(1);
  45. MATRIX_LED_PORT=0xFF;//位清零
  46. }

Nixie

  1. #include <REGX52.H>
  2. #include "Delay.h"
  3. unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7f,0x6F};
  4. void Nixie(unsigned char Location,Number)
  5. {
  6. switch(Location)
  7. {
  8. case 1: P2_4=1;P2_3=1;P2_2=1;break; //??????
  9. case 2: P2_4=1;P2_3=1;P2_2=0;break;
  10. case 3: P2_4=1;P2_3=0;P2_2=1;break;
  11. case 4: P2_4=1;P2_3=0;P2_2=0;break;
  12. case 5: P2_4=0;P2_3=1;P2_2=1;break;
  13. case 6: P2_4=0;P2_3=1;P2_2=0;break;
  14. case 7: P2_4=0;P2_3=0;P2_2=1;break;
  15. case 8: P2_4=0;P2_3=0;P2_2=0;break;
  16. }
  17. P0=NixieTable[Number];
  18. //Delay(1);
  19. //P0=0x00;
  20. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/554374
推荐阅读
相关标签
  

闽ICP备14008679号