| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1117 人关注过本帖
标题:在以下程序中加入音乐程序用p3.7控制、、、无限感激
只看楼主 加入收藏
小姐
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-12-27
结帖率:0
收藏
 问题点数:0 回复次数:3 
在以下程序中加入音乐程序用p3.7控制、、、无限感激
#include "reg51.h"                          //包含51单片机头文件
sbit HOST=P3^0;                          //设置主持人变量,接P3.0
sbit BEEP=P3^7;                              //设置扬声器变量,接P3.7
//-----------------------------------------------------------------------------------
//延时子程序
//-----------------------------------------------------------------------------------
delay(int t)                                //整型参变量t,可用于调整延时时间
{
         int i;                         //整型变量
         while(t--)                         //参变量非0时执行下面语句
                for(i=0;i<120;i++)        //下面语句循环执行120次
                        ;                 //空操作
}
//-----------------------------------------------------------------------------------
//初始化子函数
//-----------------------------------------------------------------------------------
void sysini(void)
{
         HOST=1;                         //设置主持人按钮引脚为高电平1,表示未按键
         BEEP=1;                          //设置扬声器引脚为高电平1,表示未发声
         P2=0xFF;                       //设置选手按钮引脚为高电平1,表示未按键
}
//-----------------------------------------------------------------------------------
//发声子函数
//-----------------------------------------------------------------------------------
void sound(int t)
{
         int i;
         for(i=0;i<100;i++)               //循环执行100次
         {
                   BEEP=0;               //扬声器发声
                   delay(t);            //发声保持一段时间
                   BEEP=1;              //停止扬声器发声
                   delay(t);           //停止发声保持一段时间
         }
}
//-----------------------------------------------------------------------------------
//主函数
//-----------------------------------------------------------------------------------
void main(void)
{
         sysini( );                    //初始化
         while(1)                           //循环执行下述语句
         {
                   while(HOST==1);      //主持按键引脚为高电平1时不断循环执行本语句,其实就是等待主持人按键按下
                   P2=0xC0;             //C0是数字0的段码,所以LED数码管显示0
                   while(P1==0xFF);    //循环判断,等待选手按键
                   switch(P1)               //判断并送显函数
                   {
                            case 0xFE:   //FEH=11111110B,表明1号选手抢答
                                 P2=0xF9;  //F9是1的段码,故LED数码管显示1
                                 break;  //返回
                            case 0xFD:   //FDH=11111101B,表明2号选手抢答
                                 P2=0xA4; //A4是2的段码,故LED数码管显示2
                                 break;  //返回
                            case 0xFB:   //FBH=11111011B,表明3号选手抢答
                                 P2=0xB0;  //B0是3的段码,故LED数码管显示3
                                 break;  //返回
                            case 0xF7:   //F7H=11110111B,表明4号选手抢答
                                 P2=0x99;  //99是4的段码,故LED数码管显示4
                                 break;  //返回
                            case 0xEF:   //EFH=11101111B,表明5号选手抢答
                                 P2=0x92; //92是5的段码,故LED数码管显示5
                                 break;   //返回
                            case 0xDF:   //DFH=11011111B,表明6号选手抢答
                                 P2=0x82; //82是6的段码,故LED数码管显示6
                                 break; //返回
                            case 0xBF:  //BFH=10111111B,表明7号选手抢答
                                 P2=0xF8; //F8是7的段码,故LED数码管显示7
                                 break;  //返回
                            case 0x7F:    //7FH=01111111B,表明8号选手抢答
                                 P2=0x80;  //80是8的段码,故LED数码管显示8
                                 break;   //返回
                            default:
                                 P2=0x90;  //默认情况LED数码管显示9
                    }
                    sound(1);          //调用发声子函数
         }
}
搜索更多相关主题的帖子: include 主持人 单片机 扬声器 子程序 
2012-12-27 10:44
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
你这声音的输出设备应该就是一个蜂鸣器吧。延时函数中内循环次数取120,如果用的是12M的晶振,大概应该是半个毫秒左右吧。那么sound(1)也就是发出0.1秒的1KHz的声音。

想变成音乐,那需要准备一个音阶频率表和乐谱。既然你在玩单片机那手头肯定至少有一本教材吧,里面肯定有相关代码(一般不是生日歌就是圣诞歌什么的)。

不过就一蜂鸣器就是做成音乐也好听不到哪去,不如直接输出一个发声信号给另一个设备,由另一个设备专门播放音乐。

另外这你代码测试过吗?肯定没。

首先,sysint()里你定义P2为选手按钮,但main里你在用P1做判断。笔误了吧?

第二,sysint函数的位置有问题。每一轮主持人与选手互动之后都应该重新初始化一次。

第三,还是sysint函数,将主持人按钮与选手按钮同时初始化会引入一个bug。选手可以在主持人按按钮前提前按,这样你根本无法区分是谁先按的。所以选手按钮应该在主持人触发完按钮后再初始化。

重剑无锋,大巧不工
2012-12-27 11:16
小姐
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-12-27
收藏
得分:0 
初学啊,其实我是要写一个八路抢答器的,里面加入音乐程序,当有人抢答时就停止没有时就放音乐,大侠方便留个qq么,我把截图发到你的邮箱上你帮我写下程序吧,谢谢、、、、
2012-12-27 15:09
小姐
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-12-27
收藏
得分:0 
老师要求我们家的音乐,而且很快要交任务了,谢谢谢、、、、
2012-12-27 23:12
快速回复:在以下程序中加入音乐程序用p3.7控制、、、无限感激
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.066417 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved