调用bios喇叭发声

话不多说,上代码:

#include <windows.h>
#include <iostream>
#include <map>
using namespace std;

const int DO = 261;
const int RE = 293;
const int MI = 329;
const int FA = 349;
const int SO = 392;
const int LA = 440;
const int TI = 493;

const int DO_ = 130;
const int RE_ = 147;
const int MI_ = 165;
const int FA_ = 174;
const int SO_ = 186;
const int LA_ = 220;
const int TI_ = 247;

int frequency(char note){
    static map<const char,int> table;

    if(table.size() == 0){
        table['1'] = DO;
        table['2'] = RE;
        table['3'] = MI;
        table['4'] = FA;
        table['5'] = SO;
        table['6'] = LA;
        table['7'] = TI;    

        table['c'] = DO_;
        table['d'] = RE_;
        table['e'] = MI_;
        table['f'] = FA_;
        table['g'] = SO_;
        table['a'] = LA_;
        table['b'] = TI_;
    }

    return table.find(note) -> second;
}

class music{
    private:
        string notes;
        int tenuto;
    public:
        music(string &song , int tenuto_) { notes = song; tenuto = tenuto_; play(notes.end(),tenuto);}
        void play(string::iterator it,int duration );
};
void music::play(string::iterator it, int duration){
    char note = *it;

    if( it == notes.begin() )
        return;

    if( note == '-')
        play( it - 1, duration + tenuto);
    else {
        if( isalnum(note) ) {
            play( it - 1, 0);

            Beep(frequency(note), tenuto + duration);
        } else
            play( it - 1, duration);
    }

}

 string bee = " 5 3 3 - | 4 2 2 - | 1 2 3 4 | 5 5 5 - |  5 3 3 - | 4 2 2 - | 1 3 5 5 | 3 3 3 - |  2 2 2 2 | 2 3 4 - | 3 3 3 3 | 3 4 5 - |  5 3 3 - | 4 2 2 - | 1 3 5 5 | 1 3 1 - |   ";

 string happynewyear = "						  1 1 1 - g - | 3 3 3 - 1 - | 1 3 5 - 5 - | 						  4 3 2 - - - | 2 3 4 - 4 - | 3 2 3 - 1 - | 						  1 3 2 - g - | b 2 1 - - - | 						  ";

 int main()
 {
	 music m(bee, 300);

	 music m2(happynewyear, 200);

	 return 0;
 }
时间: 2024-10-14 16:03:49

调用bios喇叭发声的相关文章

第七天、调用 BIOS 中断读软盘

保护模式内容太多,一时半会消化不完,慢慢体会清楚了再继续写吧.今天先把读软盘搞清楚--当然是调用 BIOS 中断直接读了.就是 int 013h 中断,即"直接磁盘服务"(Direct Disk Service).这个中断功能丰富,今天只学 02 号功能,就是"读软盘". 首先讲清楚软盘的物理结构:软盘,顾名思义就是存储信息的软式磁盘片(Floppy Disk)--因为是塑料做的,当然软.一般一块软盘有一张磁片,磁片两面都涂有磁性材料,这层磁性材料就叫磁层.磁层就是

基本输入输出系统BIOS

基本输入输出系统BIOS概述 硬盘操作系统DOS建立在BIOS的基础上,通过BIOS操纵硬件,例如DOS调用BIOS显示I/O程序完成输入显示,调用打印I/O完成打印输出 通常应用程序应该调用DOS提供的系统功能完成输入输出或者其他操作,这样做不仅容易实现,而且对硬件依赖性最少,但是有时候DOS不提供某种服务,因此就不能利用DOS实现 也就是说,BIOS比DOS更加接近于硬件 键盘输入: 键盘中断处理程序 当用户按键时,键盘接口上会得到一个代表被按键的键盘的扫描码,同时产生一个中断请求,如果中断

BIOS

BIOS是英文"Basic Input Output System"的缩略语,直译过来后中文名称就是"基本输入输出系统". 其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序.系统设置信息.开机后自检程序和系统自启动程序. 其主要功能是为计算机提供最底层的.最直接的硬件设置和控制. ?基本简介 BIOS是英文"Basic Input Output System"的缩略语,直译过来后中文名称就是&qu

计算机启动过程及相关知识BIOS CMOS等

Contents 一.bios存放在哪里?... 2 二.如果说BIOS存放在ROM中,那么为什么可以升级BIOS?... 3 三.BIOS与CMOS的区别和联系... 4 3.1.BIOS是什么?... 4 3.2.BIOS的功能... 4 3.3.CMOS是什么?... 5 3.4.BIOS设置和CMOS设置的区别与联系... 6 3.5.何时要对BIOS或CMOS进行设置?... 6 四.POST(开机自检)与BIOS在启动过程那个先开始执行... 7 五.BIOS 是什么语言编写的...

CMOS、BIOS

CMOS主要的功能为记录主板上面的主要参数,包括系统时间.CPU电压与频率.各项设备的I/O地址与IRQ等,由于这些数据的记录要花费电力,因此主板上面才有电池. BIOS为写入到主板上某一块闪存或EEPROM的程序,它可以在开机的时候执行,以加载CMOS当中的参数,并尝试调用存储设备中的开机程序,进一步进入操作系统当中. BIOS程序也可以修改CMOS中的数据,每种主板调用BIOS设定程序的按键都不同.

软盘相关知识和通过BIOS中断访问

一. 软盘基础知识介绍 (1) 3.5英寸软盘 3.5英寸软盘分为上下两面,每面有80个磁道,每个磁道又分为18个扇区,每个扇区大小为512个字节. 软盘大小计算: 2面 * 80磁道 * 18扇区 * 512 字节 = 1440KB ≈ 1.44MB (2) 5.25英寸软盘 5.25英寸软盘每个磁道只有15个扇区,其它的与3.5英寸软盘一样.因此,5.25英寸软盘大小为 1.2MB 磁盘的实际访问由磁盘控制器进行.我们可以通过控制磁盘控制器来访问磁盘.只能以扇区为单位对磁盘进行读写.在读写扇

汇编语言-使用BIOS进行键盘输入和磁盘读写

int9中断例程对键盘输入的处理 ??键盘输入将引发9号中断,BIOS提供了int9中断例程.CPU在9号中断发生后,执行int 9中断例程,从60h端口读出扫描码,并将其转化为相应的ASCII码或状态信息,存储在内存的指定空间(键盘缓冲区或状态字节)中. ??一般的键盘输入,在CPU执行完int 9中断例程后,都放到了键盘缓冲区中.键盘缓冲区中有16个字单元,可以存储15个按键的扫描码和对应的ASCII码. 使用int16h中断例程读取键盘缓冲区 ??BIOS提供了int 16h中断例程供程序

OD调试程序常用断点大全

常用断点 拦截窗口: bp CreateWindow 创建窗口 bp CreateWindowEx(A) 创建窗口 bp ShowWindow 显示窗口 bp UpdateWindow 更新窗口 bp GetWindowText(A) 获取窗口文本 拦截消息框: bp MessageBox(A) 创建消息框 bp MessageBoxExA 创建消息框 bp MessageBoxIndirect(A) 创建定制消息框 bp IsDialogMessageW 拦截警告声: bp MessageBe

OD调试程序经常使用断点大全

经常使用断点 拦截窗体: bp CreateWindow 创建窗体 bp CreateWindowEx(A) 创建窗体 bp ShowWindow 显示窗体 bp UpdateWindow 更新窗体 bp GetWindowText(A) 获取窗体文本 拦截消息框: bp MessageBox(A) 创建消息框 bp MessageBoxExA 创建消息框 bp MessageBoxIndirect(A) 创建定制消息框 bp IsDialogMessageW 拦截警告声: bp Message