OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9931|回复: 8

求一个基于89C52用18B20测温到达警报温度蜂鸣器响(最好响音乐),然后有数码管显示的程序。我的数码管和音乐弄不出来。

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2014-5-16
在线时间
0 小时
发表于 2014-5-19 15:19:15 | 显示全部楼层 |阅读模式
5金钱
求一个基于89C52用18B20测温到达警报温度蜂鸣器响(最好响音乐),然后有数码管显示。我的数码管和音乐弄不出来。都弄了2个多礼拜了。求高手帮助啊。

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
11471
金钱
11471
注册时间
2013-3-8
在线时间
1226 小时
发表于 2014-5-19 15:19:16 | 显示全部楼层
可用proteus仿真。

电子琴可放音乐.rar

113 KB, 下载次数: 253

回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2014-5-16
在线时间
0 小时
 楼主| 发表于 2014-5-19 15:20:23 | 显示全部楼层
需要详聊可以加QQ。谢谢。
回复

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2014-5-6
在线时间
0 小时
发表于 2014-5-19 17:15:59 | 显示全部楼层
我有啊,不过要找一下,音乐没有,1KHZ 倒是挺简单的
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2014-5-16
在线时间
0 小时
 楼主| 发表于 2014-5-19 18:52:59 | 显示全部楼层
回复【3楼】今夜雨寒:
---------------------------------
好人啊!!!做朋友吧!直接加我QQ:290952279
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2014-5-16
在线时间
0 小时
 楼主| 发表于 2014-5-22 19:20:06 | 显示全部楼层
回复【5楼】augustedward:
---------------------------------
谢谢。值得参考。
回复

使用道具 举报

4

主题

43

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1248
金钱
1248
注册时间
2020-5-26
在线时间
106 小时
发表于 2021-6-17 12:03:45 | 显示全部楼层
挺好的
回复

使用道具 举报

4

主题

43

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1248
金钱
1248
注册时间
2020-5-26
在线时间
106 小时
发表于 2021-7-18 00:36:58 | 显示全部楼层
我这有音乐播放的,与原理图比较简单就不发了,就是加一个蜂鸣器
  1. #include<reg52.h>  

  2. sbit Y=P2^0;
  3. sbit G=P2^1;
  4. sbit R=P2^2;

  5. sbit speaker=P3^3;
  6. sbit k1=P3^0;

  7. unsigned char timer1h, timer1l; //音调高低
  8. unsigned char time;             //一个音符的时间

  9. // 频率-半周期数据表 高八位 本软件共保存了四个八度的28个频率数据
  10. code unsigned char FREQH[] = {
  11. 0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8,            //低音1234567
  12. 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC, //1,2,3,4,5,6,7,i
  13. 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,                         //高音 234567
  14. 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF};                 //超高音 1234567

  15. // 频率-半周期数据表 低八位
  16. code unsigned char FREQL[] = {
  17. 0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6,                 //低音1234567
  18. 0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i
  19. 0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,                         //高音 234567
  20. 0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16};                 //超高音 1234567

  21. //《烟花易冷》
  22. unsigned char code song1[]={
  23.      5,2,1, 3,2,1, 2,2,2, 2,2,4, 3,2,1, 1,2,1, 2,2,1, 3,2,4,
  24.          5,2,1, 3,2,1, 2,2,2, 2,2,2, 5,1,1, 3,2,1, 4,2,1, 3,2,4,
  25.          3,2,1, 3,2,1, 7,2,1, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1,
  26.          2,2,1, 3,2,1, 6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1,
  27.          1,2,1, 7,1,1, 5,1,1, 6,1,6, 5,2,1, 3,2,1, 2,2,2, 2,2,1,
  28.          2,2,1, 3,2,1, 1,2,1, 2,2,1, 3,2,4, 5,2,1, 3,2,1, 2,2,2,
  29.          2,2,1, 2,2,1, 5,1,1, 3,2,1, 4,2,1, 3,2,4, 3,2,1, 3,2,1,
  30.          7,2,3, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1, 2,2,1, 3,2,1,
  31.          6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1, 1,2,1, 7,1,2,
  32.          5,1,2, 6,1,6, 0,0,0 };


  33. typedef unsigned char u8;
  34. typedef unsigned int u16;



  35. void Timer0Init()
  36. {
  37.         TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。

  38.         TH0=0XFC;        //给定时器赋初值,定时1ms
  39.         TL0=0X18;       
  40.         ET0=1;//打开定时器0中断允许
  41.         EA=1;//打开总中断
  42.         TR0=1;//打开定时器                       
  43. }

  44. void Timer1Init()
  45. {
  46.         TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。
  47.         ET1=1;//打开定时器1中断允许
  48.         EA=1;//打开总中断               
  49. }

  50.                                                                                
  51. void delay(u16 i)
  52. {
  53.         while(i--);
  54. }          

  55. void tone_time(unsigned char t) //延时程序,控制发音的时间长度
  56. {
  57.         unsigned char t1;
  58.         unsigned long t2;
  59.         for(t1 = 0; t1 < t; t1++) //双重循环, 共延时t个半拍
  60.         for(t2 = 0; t2 < 8000; t2++); //延时期间, 可进入T1中断去发音
  61.         TR1 = 0;                                                 //关闭T1, 停止发音
  62. }

  63. void song() //演奏一个音符
  64.         {
  65.         TH1 = timer1h; //控制音调
  66.         TL1 = timer1l;
  67.         TR1 = 1; //启动T0, 由T0输出方波去发音
  68.         tone_time(time); //控制时间长度
  69.         }

  70. void rgy()
  71. {
  72.                 Y=~Y;
  73.                 delay(100000);
  74.                 Y=~Y;
  75.                 G=~G;
  76.                 delay(100000);
  77.                 G=~G;
  78.                 R=~R;
  79.                 delay(100000);
  80.                 R=~R;
  81. }

  82. void smg()
  83. {
  84.         u8 code smgduan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  85.                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
  86.         int i=0;
  87.         for(i=0;i<16;i++)
  88.         {
  89.                 P1=smgduan[i];
  90.                 delay(50000);       
  91.         }
  92. }
  93.                
  94. void main()
  95. {
  96.         Timer0Init();  //定时器0初始化Timer0Init();  //定时器0初始化
  97.         Timer1Init();  //定时器1初始化

  98.         Y=1;
  99.         G=1;
  100.         R=1;

  101.         while(1)
  102.         {
  103.                 rgy();
  104.                 if(k1==0)
  105.                 {
  106.                         delay(1000);
  107.                         if(k1==0)
  108.                         {
  109.                                 unsigned char k, i;
  110.                         i = 0;
  111.                                 time = 1;
  112.                                 while(time)
  113.                                 {
  114.                                         k = song1[i] + 7 * song1[i + 1] - 1;
  115.                                         //第i个是音符, 第i+1个是第几个八度
  116.                                         timer1h = FREQH[k]; //从数据表中读出频率数值
  117.                                         timer1l = FREQL[k]; //实际上, 是定时的时间长度
  118.                                         time = song1[i + 2]; //读出时间长度数值
  119.                                         i += 3;
  120.                                         song(); //发出一个音?
  121.                 }
  122.                         }
  123.                 while(!k1);                        //检测是否松开
  124.                        
  125.                 }
  126.         }

  127. }

  128. void Timer0() interrupt 1
  129. {
  130.         static u16 i;
  131.         TH0=0XFC;        //给定时器赋初值,定时1ms
  132.         TL0=0X18;
  133.         i++;
  134.         if(i==1000)
  135.         {
  136.                 i=0;
  137.                 smg();       
  138.         }       
  139. }



  140. void Timer1() interrupt 3        //T1中断程序,控制发音的音调
  141. {
  142.         TR1 = 0;                                  //先关闭T1
  143.         speaker = !speaker;          //输出方波, 发音
  144.         TH1 = timer1h;                          //下次的中断时间, 这个时间, 控制音调高低
  145.         TL1 = timer1l;
  146.         TR1 = 1;                                  //启动T1
  147. }


复制代码
回复

使用道具 举报

4

主题

43

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1248
金钱
1248
注册时间
2020-5-26
在线时间
106 小时
发表于 2021-7-18 00:40:55 | 显示全部楼层
  1. #include<reg52.h>  

  2. sbit Y=P2^0;
  3. sbit G=P2^1;
  4. sbit R=P2^2;

  5. sbit speaker=P3^3;
  6. sbit k1=P3^0;

  7. unsigned char timer1h, timer1l; //音调高低
  8. unsigned char time;             //一个音符的时间

  9. // 频率-半周期数据表 高八位 本软件共保存了四个八度的28个频率数据
  10. code unsigned char FREQH[] = {
  11. 0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8,            //低音1234567
  12. 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC, //1,2,3,4,5,6,7,i
  13. 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,                         //高音 234567
  14. 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF};                 //超高音 1234567

  15. // 频率-半周期数据表 低八位
  16. code unsigned char FREQL[] = {
  17. 0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6,                 //低音1234567
  18. 0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i
  19. 0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,                         //高音 234567
  20. 0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16};                 //超高音 1234567

  21. //《烟花易冷》
  22. unsigned char code song1[]={
  23.      5,2,1, 3,2,1, 2,2,2, 2,2,4, 3,2,1, 1,2,1, 2,2,1, 3,2,4,
  24.          5,2,1, 3,2,1, 2,2,2, 2,2,2, 5,1,1, 3,2,1, 4,2,1, 3,2,4,
  25.          3,2,1, 3,2,1, 7,2,1, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1,
  26.          2,2,1, 3,2,1, 6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1,
  27.          1,2,1, 7,1,1, 5,1,1, 6,1,6, 5,2,1, 3,2,1, 2,2,2, 2,2,1,
  28.          2,2,1, 3,2,1, 1,2,1, 2,2,1, 3,2,4, 5,2,1, 3,2,1, 2,2,2,
  29.          2,2,1, 2,2,1, 5,1,1, 3,2,1, 4,2,1, 3,2,4, 3,2,1, 3,2,1,
  30.          7,2,3, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1, 2,2,1, 3,2,1,
  31.          6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1, 1,2,1, 7,1,2,
  32.          5,1,2, 6,1,6, 0,0,0 };


  33. typedef unsigned char u8;
  34. typedef unsigned int u16;



  35. void Timer0Init()
  36. {
  37.         TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。

  38.         TH0=0XFC;        //给定时器赋初值,定时1ms
  39.         TL0=0X18;       
  40.         ET0=1;//打开定时器0中断允许
  41.         EA=1;//打开总中断
  42.         TR0=1;//打开定时器                       
  43. }

  44. void Timer1Init()
  45. {
  46.         TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。
  47.         ET1=1;//打开定时器1中断允许
  48.         EA=1;//打开总中断               
  49. }

  50.                                                                                
  51. void delay(u16 i)
  52. {
  53.         while(i--);
  54. }          

  55. void tone_time(unsigned char t) //延时程序,控制发音的时间长度
  56. {
  57.         unsigned char t1;
  58.         unsigned long t2;
  59.         for(t1 = 0; t1 < t; t1++) //双重循环, 共延时t个半拍
  60.         for(t2 = 0; t2 < 8000; t2++); //延时期间, 可进入T1中断去发音
  61.         TR1 = 0;                                                 //关闭T1, 停止发音
  62. }

  63. void song() //演奏一个音符
  64.         {
  65.         TH1 = timer1h; //控制音调
  66.         TL1 = timer1l;
  67.         TR1 = 1; //启动T0, 由T0输出方波去发音
  68.         tone_time(time); //控制时间长度
  69.         }

  70. void rgy()
  71. {
  72.                 Y=~Y;
  73.                 delay(100000);
  74.                 Y=~Y;
  75.                 G=~G;
  76.                 delay(100000);
  77.                 G=~G;
  78.                 R=~R;
  79.                 delay(100000);
  80.                 R=~R;
  81. }

  82. void smg()
  83. {
  84.         u8 code smgduan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  85.                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
  86.         int i=0;
  87.         for(i=0;i<16;i++)
  88.         {
  89.                 P1=smgduan[i];
  90.                 delay(50000);       
  91.         }
  92. }
  93.                
  94. void main()
  95. {
  96.         Timer0Init();  //定时器0初始化Timer0Init();  //定时器0初始化
  97.         Timer1Init();  //定时器1初始化

  98.         Y=1;
  99.         G=1;
  100.         R=1;

  101.         while(1)
  102.         {
  103.                 rgy();
  104.                 if(k1==0)
  105.                 {
  106.                         delay(1000);
  107.                         if(k1==0)
  108.                         {
  109.                                 unsigned char k, i;
  110.                         i = 0;
  111.                                 time = 1;
  112.                                 while(time)
  113.                                 {
  114.                                         k = song1[i] + 7 * song1[i + 1] - 1;
  115.                                         //第i个是音符, 第i+1个是第几个八度
  116.                                         timer1h = FREQH[k]; //从数据表中读出频率数值
  117.                                         timer1l = FREQL[k]; //实际上, 是定时的时间长度
  118.                                         time = song1[i + 2]; //读出时间长度数值
  119.                                         i += 3;
  120.                                         song(); //发出一个音?
  121.                 }
  122.                         }
  123.                 while(!k1);                        //检测是否松开
  124.                        
  125.                 }
  126.         }

  127. }

  128. void Timer0() interrupt 1
  129. {
  130.         static u16 i;
  131.         TH0=0XFC;        //给定时器赋初值,定时1ms
  132.         TL0=0X18;
  133.         i++;
  134.         if(i==1000)
  135.         {
  136.                 i=0;
  137.                 smg();       
  138.         }       
  139. }



  140. void Timer1() interrupt 3        //T1中断程序,控制发音的音调
  141. {
  142.         TR1 = 0;                                  //先关闭T1
  143.         speaker = !speaker;          //输出方波, 发音
  144.         TH1 = timer1h;                          //下次的中断时间, 这个时间, 控制音调高低
  145.         TL1 = timer1l;
  146.         TR1 = 1;                                  //启动T1
  147. }


复制代码
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 03:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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