`
poower
  • 浏览: 18589 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

C语言调用汇编-电子琴

阅读更多

/*sound.h*/
/*http://blog.csdn.net/scs2000/archive/2006/09/14/1221079.aspx*/
#include <stdio.h>
#include <conio.h>
#define NOO 1450
int music1[8][6]={
    {262,262,294,262,349},
    {330,262,262,294,262},
    {392,349,262,262,523},
    {440,349,262,262,466},
    {466,440,262,392,349}
};
int time1[8][6]={
    {100,100,200,200,200},
    {200,200,100,100,200},
    {200,200,200,200,200},
    {200,200,200,200,200},
    {100,200,200,200,200}
};
int music2[3][10]={
    {330,392,330,294,330,392,330,294,330,330},
    {330,392,330,294,262,294,330,392,294,294},
    {262,262,220,196,196,220,262,294,332,262}
};
int time2[3][11]={
    {200,200,200,100,100,200,100,100,200,200},
    {200,200,100,100,200,200,100,100,200,200},
    {200,100,100,200,100,100,200,100,100,400}
};
int music3[4][11]={
    {441,393,330,393,131,441,393,441,441,1450,1450},
    {330,393,441,393,330,262,882,393,330,294,294},
    {294,330,393,393,441,330,294,262,262,1450,1450},
    {393,330,294,262,882,262,786,786,786,1450,1450}
};
int time3[4][11]={
    {200,100,200,200,200,100,100,200,200,0,0},
    {200,100,100,200,200,100,100,100,100,200,200},
    {200,100,200,100,100,200,200,200,200,0,0},
    {200,100,100,100,100,100,200,200,200,0,0}
};
const char * process_file[]={
                   " ",
                   "┌───┬┬┐┌┬┐┌┬┐┌┬┐┌┬┐┌┬┐┌┬┐┌┬┬───┐",
                   "│     ├接┤├口┤├技┤├术┤├课┤├程┤├设┤├计┤     │",
                   "├───┴┴┘└┴┘└┴┘└┴┘└┴┘└┴┘└┴┘└┴┴───┤",
                   "│                     《音乐发生器》                       │",
                   "├──────────────────────────────┤",
                   "│                                                           │",
                   "├──────────────────────────────┤",
                   "│                                                           │",
                   "│                   A.播放第一首音乐                       │",
                   "│                   B.播放第二首音乐                       │",
                   "│                   C.播放第三首音乐                       │",
                   "│                   Q.退出该程序                           │",
                   "│                                                           │",
                   "├──────────────────────────────┤",
                   "│   制作:王康                                             │",
                   "│   日期:年月日                                    │",
                   "│                                                            │",
                   "└──────────────────────────────┘"};
const char * end_file[]={
                   " ",
                   "┌─────┐   ┌─┐┌─┐     ┌─┐┌─┐   ┌─────┐",
                   "│★★★★★├☆☆┤个││人├☆☆☆┤简││介├☆☆┤★★★★★│",
                   "├─────┘   └─┘└─┘☆└─┘└─┘   └─────┤",
                   "├───────────────☆───────────────┤",
                   "│姓名:王康                                                   │",
                   "├───────────────────────────────┤",
                   "│性别:男                                                     │",
                   "├───────────────────────────────┤",
                   "│班级:                                                        │",
                   "├───────────────────────────────┤",
                   "│电话:--XXXXXXXX                                          │",
                   "├───────────────────────────────┤",
                   "│QQ号:                                                │",
                   "├───────────────────────────────┤",
                   "│邮箱:wkjs@163.com                                            │",
                   "├───────────────────────────────┤",   
                   "│                        谢谢您的使用                        │",
                   "└───────────────────────────────┘"};
void light(int a)
{
    asm MOV DX,283H
    asm MOV AL,80H
    asm OUT DX,AL
    asm MOV DX,280H
    asm MOV AL,0H;
    asm OUT DX,AL
    switch(a)
    {
    case 262:
    case 131:
        asm MOV AL,01H
        asm OUT DX,AL
        break;
    case 294:
        asm MOV AL,03H
        asm OUT DX,AL
        break;
    case 330:
        asm MOV AL,07H
        asm OUT DX,AL
        break;
    case 350:
        asm MOV AL,0FH
        asm OUT DX,AL
        break;
    case 393:
    case 786:
        asm MOV AL,1FH
        asm OUT DX,AL
        break;
    case 441:
    case 882:
        asm MOV AL,3FH
        asm OUT DX,AL
        break;
    case 495:
        asm MOV AL,7FH
        asm OUT DX,AL
        break;
    };
}
void sound_A(int a,int b)
{              
        int i=0;
        asm MOV DI,a    /*选择号计数器,先写低字节,后写高字节,选择工作方式,二进制*/
        asm MOV AL,10110110B
        asm MOV DX,12H
        asm MOV AX,34DEH
        asm DIV DI
        asm OUT 42H,AL /*先送低字节到号计数器*/
        asm MOV AL,AH   /*取高字节送AL*/
        asm OUT 42H,AL /*后送高字节到号计数器*/
        asm IN AL,61H   /*读入的PB口原输出值*/
        asm MOV AH,AL  
        asm OR AL,3     /*8255的PB0口PB1口输出有效*/
        asm OUT 61H,AL
        /*调用灯亮函数*/
        light(a);
        /*时间延迟*/
        for(i=0;i<b;i++)
        {
            delay(2000);
        }
        /*关闭扬声器*/
        asm MOV AL,AH
        asm OUT 61H,AL
}
void sound(char a)
{
    int i,j;
    if(a=='a')
    {
        for(i=0;i<5;i++)
        {
            for(j=0;j<5;j++)
            {
                sound_A(music1[i][j],time1[i][j]);
            }
        }
    }
    else if(a=='b')
    {
        for(i=0;i<3;i++)
        {
            for(j=0;j<11;j++)
            {
                sound_A(music2[i][j],time2[i][j]);
            }
        }
    }
    else if(a=='c')
    {
        for(i=0;i<4;i++)
        {
            for(j=0;j<11;j++)
            {
                sound_A(music3[i][j],time3[i][j]);
            }
        }
    }
    else
    {
        printf("\t对不起,没有该音乐!\n");
    }
}
void face()
{
    int i;
    system("cls");
    for(i=0;i<19;i++)
    {
        printf("\t%s\n",process_file[i]);
        delay(20000);
    }
    printf("\t请输入您的指令:");
}
void endface()
{
    int i;
    system("cls");
    for(i=0;i<19;i++)
    {
        printf("\t%s\n",end_file[i]);
        delay(20000);
    }
    printf("\t");
}
void operate()
{
    char a;
    face();
    while(1)
    {
        a=getche();
        switch(a)
        {
        case 'a':
        case 'A':
            sound('a');
            printf("\n\t音乐播放结束,谢谢你的收听,点任意键继续!");
            getch();
            face();
            break;
        case 'b':
        case 'B':
            sound('b');
            printf("\n\t音乐播放结束,谢谢你的收听,点任意键继续!");
            getch();
            face();
            break;
        case 'c':
        case 'C':
            sound('c');
            printf("\n\t音乐播放结束,谢谢你的收听,点任意键继续!");
            getch();
            face();
            break;
        case 'q':
        case 'Q':
            endface();
            exit(1);
            break;
        default:
            printf("\t您的输入有误,请核实,谢谢!");
            getch();
            face();
            break;
        }
    }
}
 /*sound.c*/

void main()
{
    operate();
}

分享到:
评论

相关推荐

    c调用汇编实例 学习单片机c语言调用汇编

    c调用汇编实例 学习单片机c语言调用汇编 c调用汇编实例 学习单片机c语言调用汇编 c调用汇编实例 学习单片机c语言调用汇编 c调用汇编实例 学习单片机c语言调用汇编 ..................

    8051C语言调用汇编详细注释源代码

    7. **指针和地址操作**:由于C语言和汇编语言对内存访问方式的不同,C语言的指针在调用汇编函数时,可能需要转换为汇编的直接地址或间接寻址方式。 8. **优化考虑**:在C调用汇编时,考虑到8051的性能限制,可能...

    汇编语言实现对引脚底层的配置,使用C语言调用汇编语言函数进行点灯.zip

    汇编语言实现对引脚底层的配置,使用C语言调用汇编语言函数进行点灯.zip汇编语言实现对引脚底层的配置,使用C语言调用汇编语言函数进行点灯.zip汇编语言实现对引脚底层的配置,使用C语言调用汇编语言函数进行点灯....

    利用C语言调用汇编子程序

    "利用C语言调用汇编子程序"是一个典型的混合编程案例,它结合了C语言的高效性和汇编语言的底层控制能力。C语言是一种高级编程语言,具有丰富的库支持和可移植性,而汇编语言则更接近机器代码,能直接对硬件进行操作...

    单片机C语言实例--138-电子琴.zip

    本实例"单片机C语言实例--138-电子琴"是关于如何使用C语言在单片机上实现一个简单的电子琴功能,下面将详细介绍相关知识点。 1. **C语言编程**: C语言是单片机编程的常用语言,它具有高效、灵活和可移植性强的...

    ARM中C语言调用汇编语言方法浅析[1].doc.doc

    本文将探讨如何在ARM中进行C语言调用汇编语言的方法。 首先,C语言中内嵌汇编语言是一种常见的方式,允许开发者利用汇编的灵活性和效率。在内嵌汇编中,需要注意以下几点: 1. 不能直接修改PC(程序计数器)寄存器...

    138-电子琴(51单片机C语言实例Proteus仿真和代码)

    138-电子琴(51单片机C语言实例Proteus仿真和代码)138-电子琴(51单片机C语言实例Proteus仿真和代码)138-电子琴(51单片机C语言实例Proteus仿真和代码)138-电子琴(51单片机C语言实例Proteus仿真和代码)138-电子琴(51...

    单片机C语言实例--345-简易电子琴.zip

    标题“单片机C语言实例--345-简易电子琴.zip”暗示了这是一个关于使用C语言编程实现的单片机项目,具体是构建一个简易的电子琴。在这个项目中,我们将探讨以下几个关键知识点: 1. **单片机基础**:单片机是一种...

    51单片机C语言 电子琴--程序

    【51单片机C语言 电子琴程序】 在电子技术与嵌入式系统领域,51单片机是入门学习的经典平台,而C语言则是其常用编程语言之一。本项目涉及的知识点主要集中在51单片机的硬件接口、C语言编程以及音乐合成技术上。以下...

    基于C语言和汇编语言电子琴程序

    【标题】:“基于C语言和汇编语言电子琴程序” 在计算机编程的世界中,电子琴程序是一种有趣的项目,它能够将计算机转化为一个音乐创作工具。本项目主要关注使用C语言和汇编语言来实现这样的功能,让学生或者爱好者...

    单片机C语言实例-电子琴.zip

    单片机C语言实例-电子琴.zip这个压缩包文件是一个关于使用C语言编程实现单片机控制的电子琴项目的资源集合。在这个项目中,我们将深入探讨C语言在单片机编程中的应用,以及如何利用单片机硬件特性来创建一个简单的...

    C语言库函数---unix常用系统调用

    C语言库函数---unix常用系统调用........

    CCS 中C语言程序调用线性汇编

    接下来,我们将分析一个简单的例子,了解如何在C语言中调用线性汇编实现两个数的相加。 - **main.c**: ```c #include int add(short a, short b); int main() { short a = 2, b = 3; short result; result =...

    51单片机C语言调用汇编子程序的简便方法_单片机_51单片机C语言调用汇编子程序的简便方法_.zip

    5. 实现调用约定:C语言和汇编之间的调用需要遵循一定的调用约定,包括参数传递方式和返回值处理。51单片机的C编译器通常遵循标准的函数调用约定,如将参数压栈,并在ACC寄存器中返回值。在汇编子程序中,必须确保...

    C语言课程设计---模拟器和汇编程序的设计.pdf

    C语言课程设计---模拟器和汇编程序的设计

    单片机C语言和汇编语言混合编程实例详解-杜树春.rar

    3. C语言调用汇编函数:讲解如何在C代码中声明和调用汇编函数,包括参数传递、返回值处理等细节。 4. 汇编语言调用C函数:相反地,也会讨论如何在汇编代码中调用C函数,这通常涉及函数地址的获取和调用约定的理解。...

    【C语言与宏汇编混合编程】C语言调用汇编及汇编调用C函数的方法:优化代码执行速度与内存结构分析

    内容概要:本文介绍了在不同编译程序的存储模式下,如何在C语言中调用汇编程序以及在汇编语言中调用C函数的方法。通过混合编程,用户可以掌握寄存器在程序执行过程中的内存结构变化,编写执行速度更快、代码更紧凑的...

    如何在C语言程序中调用汇编语言1

    标题中的“如何在C语言程序中调用汇编语言”是指在C编程中嵌入或调用汇编语言代码以实现特定功能的技术。这通常在需要高效能、直接硬件访问或者利用C语言无法方便实现的功能时进行。描述部分提到的“摘要”和...

    c语言调用汇编子程序

    本实验旨在探讨如何在C语言中调用汇编子程序,并处理输入参数和返回结果。C语言与汇编的混合编程使得我们可以利用C语言的易读性和汇编的高效性,以解决复杂的问题。 实验的目的是编写一个C语言程序,它调用一个汇编...

    C语言调用汇编的矩阵相乘

    本主题主要关注如何在DSP++5.0环境下,通过C语言调用汇编子程序来实现6x6矩阵相乘。 首先,我们需要理解矩阵相乘的基本概念。矩阵相乘是线性代数中的基础运算,两个矩阵A和B可以相乘,前提是A的列数等于B的行数。...

Global site tag (gtag.js) - Google Analytics