IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STC-B学习板蜂鸣器播放音乐2.0 -> 正文阅读

[嵌入式]STC-B学习板蜂鸣器播放音乐2.0

首先科普点乐理知识

在这里插入图片描述
调号-音乐上指用以确定乐曲主音高度的符号。

很明显一个八度就有12个半音。

A、B、C、D、E、F、G。经过声学家的研究,全世界都用这些字母来表示固定的音高。比如,A这个音,标准的音高为每秒钟振动440周。

一首歌的简谱的左上角一般都有1=A或1=B之类的东西,所谓1=A,就是说,这首歌曲的“调”要唱得同A一样高,人们也把这首歌曲叫做A调歌曲,或叫“唱A调”。1=C,就是说,这首歌曲的“调”要唱得同C一样高,或者说“这歌曲唱C调”。同样是“调”,不同的调唱起来的高低是不一样的。

一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音。因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。

音调

在音乐中所谓“音调”,其实就是我们常说的“音高”。在音乐中常把中央C上方的A音定为标准音高,其频率f=440Hz。当两个声音信号的频率相差一倍时,也即f2=2f1时,则称f2比f1高一个倍频程, 在音乐中1(do)与,2(来)与……正好相差一个倍频程,在音乐学中称它相差一个八度音。在一个八度音内,有12个半音。

以1—i八音区为例,12个半音是:1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5一#5、#5—6、6—#6、#6—7、7—i。这12个音阶的分度基本上是以对数关系来划分的。如果我们只要知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程的关系得到其他音符基本音调的频率。

C调各音符频率与计数值如图1所示
在这里插入图片描述
知道了一个音符的频率后,怎样让单片机发出相应频率的声音呢?一般说来,常采用的方法就是通过单片机的定时器定时中断,将单片机上对应蜂鸣器的I/O口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音,为了让单片机发出不同频率的声音,我们只需将定时器予置不同的定时值就可实现。那么怎样确定一个频率所对应的定时器的定时值呢?

以标准音高A为例:
A的频率f = 440 Hz,其对应的周期为:

T = 1/ f = 1/440 =2272μs

在这里插入图片描述
由上图可知,单片机上对应蜂鸣器的I/O口来回取反的时间应为:

t = T/2 = 2272/2 = 1136μs

这个时间t也就是单片机上定时器应有的中断触发时间。一般情况下,单片机奏乐时,其定时器为工作方式1,它以振荡器的十二分频信号为计数脉冲。设振荡器频率为f0,则定时器的予置初值由下式来确定:

	t = 12 *(TALL – THL)/ f0

式中TALL = 2**16 = 65536,THL为定时器待确定的计数初值。因此定时器的高低计数器的初值为:

TH = THL / 256 = ( TALL – t* f0/12) / 256
TL = THL % 256 = ( TALL – t* f0/12) %256

将t=1136μs代入上面两式(注意:计算时应将时间和频率的单位换算一致),即可求出标准音高A在单片机晶振频率f0=12Mhz,定时器在工作方式1下的定时器高低计数器的予置初值为 :

TH440Hz = (655361136 * 12/12) /256 = FBH
TL440Hz = (655361136 * 12/12)%256 = 90H

根据上面的求解方法,我们就可求出其他音调相应的计数器的予置初值。

拍子

音符的节拍我们可以举例来说明。在一张乐谱中,我们经常会看到这样的表达式,如1=C3/4 、1=G4/4…… 等等,这里1=C,1=G表示乐谱的曲调,和我们前面所谈的音调有很大的关联,3/4、4/4就是用来表示节拍的。以为例加以说明,它表示乐谱中以四分音符为节拍,每一小结有三拍。比如:
在这里插入图片描述
其中1 、2 为一拍,3、4、5为一拍,6为一拍共三拍。1 、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。那么一拍到底该唱多长呢?一般说来,如果乐曲没有特殊说明,一拍的时长大约为400—500ms 。我们以一拍的时长为400ms为例,则当以四分音符为节拍时,四分音符的时长就为400ms,八分音符的时长就为200ms,十六分音符的时长就为100ms。

在单片机上控制一个音符唱多长可采用循环延时的方法来实现。首先,我们确定一个基本时长的延时程序,比如说以十六分音符的时长为基本延时时间,那么,对于一个音符,如果它为十六分音符,则只需调用一次延时程序,如果它为八分音符,则只需调用二次延时程序,如果它为四分音符,则只需调用四次延时程序,依次类推。

通过上面关于一个音符音调和节拍的确定方法,我们就可以在单片机上实现演奏音乐了。具体的实现方法为:将乐谱中的每个音符的音调及节拍变换成相应的音调参数和节拍参数,将他们做成数据表格,存放在存储器中,通过程序取出一个音符的相关参数,播放该音符,该音符唱完后,接着取出下一个音符的相关参数……,如此直到播放完毕最后一个音符,根据需要也可循环不停地播放整个乐曲。另外,对于乐曲中的休止符,一般将其音调参数设为FFH,FFH,其节拍参数与其他音符的节拍参数确定方法一致,乐曲结束用节拍参数为00H来表示。

在此我使用了学长修改后的代码,可以实现播放音乐时音符变化时点亮不同LED灯的功能(可能有点鸡肋的功能,毕竟有点伤眼睛),以及支持更长的音乐播放,但少了一个按key2切换歌曲的功能,如果要添加一个切换歌曲的功能的代码,可以参考上一篇,添加一个按键2的I/O接口,在playmusic函数中根据gequ的值来选择不同的歌曲,最后加一个按键2的外部中断响应函数。

代码如下:

/**********************
myMusic 音乐播放
型号:IAP15F2K60S2 主频:12MHz
************************/
#include <STC15F2K60S2.h>
#define uint unsigned int
#define uchar unsigned char

/*---------引脚别名定义---------*/
sbit sbtBeep = P3 ^ 4;   // 蜂鸣器
sbit key1 = P3 ^ 2;      // 按键1
sbit sbtLedSel = P2 ^ 3; // 数码管与 LED 灯切换引脚

/*---------变量定义---------*/
uchar code arrLed[] = {0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff}; // LED 值
uchar ucTimerH, ucTimerL;                                                     // 定义定时器的重装值
bit flag;                                                                     // 标志位,暂停或播放
uchar code arrMusic[] =                                                       // 音乐代码,格式为: 音符, 节拍
    {
        // 音符的十位代表是低中高八度,1代表高八度,2代表中八度,3代表高八度
        // 个位代表简谱的音符,例如0x15代表低八度的S0,0x21代表中八度的DO。
        // 节拍则是代表音长,例如:0x10代表一拍,0x20代表两拍,0x08代表1/2拍
    };
uchar code arrMusicToTimerNum[] =
    {
        // 此数组数据为各个音符在定时器中的重装值,第一列是高位,第二列是低位
        0xf8, 0x8c, // 低八度,低1
        0xf9, 0x5b,
        0xfa, 0x15, // 低3
        0xfa, 0x67,
        0xfb, 0x04, // 低5
        0xfb, 0x90,
        0xfc, 0x0c, // 低7
        0xfc, 0x44, // 中央 C 调
        0xfc, 0xac, // 中2
        0xfd, 0x09,
        0xfd, 0x34, // 中4
        0xfd, 0x82,
        0xfd, 0xc8, // 中6
        0xfe, 0x06,
        0xfe, 0x22, // 高八度,高1
        0xfe, 0x56,
        0xfe, 0x85, // 高3
        0xfe, 0x9a,
        0xfe, 0xc1, // 高5
        0xfe, 0xe4,
        0xff, 0x03, // 高7
        0xff, 0xff};

/*---------延时子函数---------*/
void DelayMs(uint xms)
{
    uint i, j;
    for (i = xms; i > 0; i--)
        for (j = 124; j > 0; j--)
            ;
}

/*---------取址子函数---------*/
// 取出 tem 音符在 arrMusicToTimerNum 数组中的位置值
uchar GetPosition(uchar tem)
{
    uchar ucBase, ucOffset, ucPosition; // 定义曲调、音符和位置
    ucBase = tem / 16;                  // 高4位是曲调值,基址
    ucOffset = tem % 16;                // 低4位是音符,偏移量
    if (ucOffset == 0)                  // 当音符为0时,位置是42
    {
        P0 = 0x00;
        return 42;
    }
    // 点亮对应数量的 LED
    P0 = arrLed[ucOffset];
    if (ucBase == 1) // 当曲调值为1时,即是低八度,基址为0
        ucBase = 0;
    else if (ucBase == 2) // 当曲调值为2时,即是中八度,基址为14
        ucBase = 14;
    else if (ucBase == 3) // 当曲调值为3时,即是高八度,基址为28
        ucBase = 28;
    // 通过基址加上偏移量,即可定位此音符在 arrMusicToTimerNum 数组中的位置
    ucPosition = ucBase + (ucOffset - 1) * 2;
    return ucPosition; // 返回这一个位置值
}

/*---------播放音乐功能函数---------*/
void PlayMusic()
{
    // ucNoteTmp 为音符,ucRhythmTmp 为节拍
    uchar ucNoteTmp, ucRhythmTmp, tem;
    // 这里把 uchar 型改成 uint 型,否则 i 最大为255,只能支持128个音符,甚至放不完《国际歌》的旋律
    uint i = 0;
    while (1)
    {
        if (flag == 1) // 播放状态
        {
            ucNoteTmp = arrMusic[i];
            if (ucNoteTmp == 0x00) // 如果碰到结束符,延时1秒,回到开始再来一遍
            {
                i = 0;
                P0 = 0x00;
                sbtBeep = 0;
                DelayMs(1000);
            }
            else // 其他情况下取音符和节拍
            {
                tem = GetPosition(arrMusic[i]);     // 取出当前音符在 arrMusicToTimerNum 数组中的位置值
                ucTimerH = arrMusicToTimerNum[tem]; // 把音符相应的计时器重装载值赋予 ucTimerH 和 ucTimerL
                ucTimerL = arrMusicToTimerNum[tem + 1];
                i++;

                TH0 = ucTimerH; // 把 ucTimerH 和 ucTimerL 赋予计时器
                TL0 = ucTimerL;
                ucRhythmTmp = arrMusic[i]; // 取得节拍
                i++;

                TR0 = 1;                  // 开定时器1
                if (ucTimerH == ucTimerL) // 休止直接关掉定时器
                    TR0 = 0;
                DelayMs(ucRhythmTmp * 300); // 等待节拍完成, 通过 P3^4 口输出音频
                TR0 = 0;                    // 关定时器1
                sbtBeep = 0;
            }
        }
        else
            while (flag != 1) // 暂停
                ;
    }
}

/*---------初始化子函数---------*/
// 功能是配置 IO 口
void InitSys()
{
    P0M0 = 0xff;
    P0M1 = 0x00;
    P2M0 = 0x08;
    P2M1 = 0x00;
    P3M0 = 0x10;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
    sbtLedSel = 1;
}

/*---------定时器0初始化子函数---------*/
void InitT0()
{
    TMOD = 0x01;
    TH0 = 0xD8;
    TL0 = 0xEF;
    IE = 0x87; // 1000 0111  EA=1,EX0=1,ET0=1,EX1=0;
    IP = 0x02; // 0000 0010  PT0=1;   定时器0优先级高
    TR0 = 0;
    sbtBeep = 0;
}

/*---------主函数---------*/
void main()
{
    InitSys();
    InitT0();
    P0 = 0x00;
    key1 = 1;
    flag = 0;
    PlayMusic();
}

/*---------定时器0中断处理函数---------*/
// 重新装值,并把 sbtBeep 值取反,产生方波
void T0_Process() interrupt 1 // 计时器控制频率
{
    TH0 = ucTimerH;
    TL0 = ucTimerL;
    sbtBeep = ~sbtBeep;
}

/*---------按键1中断处理函数---------*/
// 从其他案例抄过来的
void ex1() interrupt 0
{
    DelayMs(5);
    if (key1 == 0) // 判断 key1 是否按下
    {
        DelayMs(5);
        if (key1 == 0)
        {
            while (!key1)
                ;
            flag = ~flag; // 播放中断位取反,播放或者暂停
        }
    }
}


只需将

uchar code arrMusic[] =                                                       // 音乐代码,格式为: 音符, 节拍
    {
        // 音符的十位代表是低中高八度,1代表高八度,2代表中八度,3代表高八度
        // 个位代表简谱的音符,例如0x15代表低八度的S0,0x21代表中八度的DO。
        // 节拍则是代表音长,例如:0x10代表一拍,0x20代表两拍,0x08代表1/2拍
    };

中填入想要歌曲的音乐代码,然后用keil编译生成hex文件下载到单片机后就可以实现播放歌曲了。

下面我写了一些歌曲的音乐代码,直接贴到上面数组里面即可使用

孤勇者

    0x16,0x08,0x17,0x08,
    0x21,0x08,0x22,0x08,
    0x17,0x08,0x21,0x08,
    0x21,0x10,0x21,0x08,
    0x17,0x08,0x21,0x08,
    0x22,0x08,0x17,0x08,
    0x21,0x08,0x21,0x10,
    0x21,0x08,0x22,0x08,
    0x23,0x08,0x22,0x08,
    0x23,0x08,0x22,0x08,
    0x23,0x10,0x23,0x08,
    0x22,0x08,0x23,0x10,
    0x25,0x10,0x23,0x10,
    0x16,0x08,0x17,0x08,
    0x21,0x08,0x22,0x08,
    0x17,0x08,0x21,0x08,

    0x21,0x10,0x21,0x08,
    0x17,0x08,0x21,0x08,
    0x22,0x08,0x17,0x08,
    0x21,0x08,0x21,0x10,
    0x21,0x08,0x22,0x08,
    0x23,0x08,0x22,0x08,
    0x23,0x08,0x22,0x08,

    0x23,0x10,0x23,0x08,
    0x22,0x08,0x23,0x10,
    0x25,0x10,0x23,0x10,
    0x25,0x10,0x23,0x14,
    0x25,0x08,0x23,0x14,
    0x25,0x08,0x23,0x08,
    0x25,0x08,0x26,0x08,
    0x23,0x08,0x25,0x10,
    0x25,0x08,0x23,0x14,
    0x25,0x08,0x23,0x14,
    0x25,0x08,0x23,0x08,
    0x25,0x08,0x26,0x08,
    0x23,0x08,0x25,0x10,
    0x25,0x08,0x25,0x08,
    0x23,0x08,0x22,0x08,
    0x22,0x10,0x22,0x10,
    0x21,0x08,0x23,0x08,
    0x23,0x08,0x22,0x08,
    0x22,0x10,0x22,0x10,
    0x21,0x08,0x21,0x08,
    0x16,0x20,0x25,0x08,
    0x25,0x08,0x23,0x08,
    0x22,0x08,0x22,0x10,

    0x22,0x10,0x21,0x08,
    0x23,0x08,0x23,0x08,
    0x22,0x08,0x22,0x10,
    0x22,0x10,0x21,0x08,
    0x21,0x08,0x16,0x20,
    0x00

晴天

	0x25,0x08,
    0x25,0x08,
    0x21,0x08,
    0x21,0x10,
    0x22,0x08,
    0x23,0x08,
	
    0x25,0x08,
    0x25,0x08,
    0x21,0x08,
    0x21,0x08,
    0x22,0x04,
    0x23,0x04,
	0x22,0x04,
    0x21,0x04,
    0x15,0x08,
	
	  0x25,0x08,
    0x25,0x08,
    0x21,0x08,
    0x21,0x10,
    0x22,0x08,
    0x23,0x08,

    0x23,0x10,
    0x22,0x04,
    0x23,0x04,
    0x24,0x04,
    0x23,0x04,
    0x22,0x04,
	  0x24,0x04,
    0x23,0x04,
    0x22,0x04,
		0x21,0x08,
		
		0x15,0x08,
    0x21,0x08,
    0x21,0x08,
    0x23,0x08,
    0x24,0x08,
    0x23,0x08,
	  0x22,0x08,
    0x21,0x04,
    0x22,0x04,
		
		0x23,0x08,
    0x23,0x08,
    0x23,0x08,
    0x23,0x08,
    0x22,0x04,
    0x23,0x04,
	  0x22,0x08,
    0x21,0x10,
		
		0x15,0x08,
    0x21,0x08,
    0x22,0x08,
    0x23,0x08,
    0x24,0x08,
    0x23,0x08,
	  0x22,0x08,
    0x21,0x04,
		0x22,0x04,
		
		0x13,0x08,
    0x23,0x08,
    0x23,0x08,
    0x23,0x08,
    0x22,0x04,
    0x23,0x04,
	  0x22,0x08,
    0x21,0x14,
		0x17,0x04,
		
		0x21,0x04,
    0x21,0x04,
    0x21,0x04,
    0x21,0x04,
    0x17,0x08,
    0x21,0x08,
	  0x21,0x04,
		
		0x21,0x04,
    0x21,0x04,
    0x21,0x04,
    0x21,0x04,
    0x17,0x08,
    0x21,0x08,
	  0x21,0x04,
		
		0x21,0x04,
    0x21,0x04,
    0x21,0x04,
    0x21,0x04,
    0x17,0x08,
    0x21,0x08,
	  0x21,0x04,

		0x21,0x04,
    0x21,0x04,
    0x21,0x04,
    0x21,0x04,
		0x25,0x04,
    0x25,0x08,
    0x25,0x04,	
		
		0x25,0x04,
    0x25,0x04,
    0x25,0x04,	
		0x25,0x04,
    0x25,0x08,
    0x25,0x04,		
		0x25,0x04,
    0x25,0x04,
    0x25,0x04,
		0x25,0x04,
    0x25,0x04,
		0x24,0x04,
    0x23,0x04,
    0x23,0x04,
		0x23,0x14,

		0x21,0x04,
    0x21,0x04,
    0x21,0x04,	
		0x21,0x04,
    0x16,0x04,
    0x17,0x04,
		0x21,0x04,
    0x25,0x04,
    0x24,0x04,	
		0x23,0x04,
    0x21,0x04,
    0x21,0x04,	
		0x21,0x10,

    0x21,0x04,
    0x21,0x04,	
		0x21,0x04,
    0x21,0x04,		
    0x23,0x08,
    0x21,0x08,
    0x16,0x04,
    0x17,0x04,
    0x21,0x04,
    0x25,0x04,
    0x24,0x04,
    0x23,0x04,
		0x21,0x04,
    0x22,0x04,
    0x22,0x14,		
		
    0x00, 0x00

夜曲

    0x16,0x04,
    0x17,0x04,
    0x21,0x08,
    0x21,0x04,
    0x21,0x08,
    0x21,0x08,
    0x17,0x08,
    0x23,0x04,
    0x23,0x04,
    0x23,0x10,
    
    0x26,0x08,
    0x26,0x04,
    0x26,0x04,
    0x26,0x04,
    0x25,0x08,
    0x24,0x04,
    0x25,0x08,
    0x21,0x04,
    0x21,0x04,
    0x21,0x10,
    
    0x24,0x08,
    0x24,0x04,
    0x24,0x04,
    0x24,0x08,
    0x25,0x08,
    0x24,0x0c,
    0x24,0x04,
    0x23,0x08,
    0x22,0x08,
    
    0x23,0x08,
    0x22,0x04,
    0x21,0x04,
    0x21,0x08,
    0x17,0x08,
    0x21,0x10,
    0x17,0x10,
    
    0x21,0x0c,
    0x21,0x04,
    0x21,0x08,
    0x21,0x08,
    0x17,0x08,
    0x23,0x04,
    0x23,0x04,
    0x23,0x10,
    
    0x26,0x08,
    0x26,0x04,
    0x26,0x04,
    0x26,0x04,
    0x15,0x08,
    0x24,0x04,
    0x25,0x08,
    0x21,0x04,
    0x21,0x04,
    0x21,0x10,
    
    0x24,0x08,
    0x24,0x04,
    0x24,0x04,
    0x24,0x08,
    0x14,0x08,
    0x23,0x08,
    0x22,0x04,
    0x17,0x04,
    0x17,0x08,
    0x21,0x08,
    0x16,0x20,
    
    0x16,0x10,
    0x17,0x10,
    0x21,0x08,
    0x21,0x04,
    0x21,0x08,
    0x21,0x08,
    0x17,0x08,
    0x23,0x04,
    0x23,0x04,
    0x23,0x10,
    
    0x26,0x08,
    0x26,0x04,
    0x26,0x04,
    0x26,0x04,
    0x25,0x08,
    0x24,0x04,
    0x25,0x08,
    0x21,0x04,
    0x21,0x04,
    0x21,0x10,
    
    0x24,0x08,
    0x24,0x04,
    0x24,0x04,
    0x24,0x08,
    0x25,0x08,
    0x23,0x0c,
    0x21,0x04,
    0x23,0x08,
    0x22,0x08,
    
    0x21,0x08,
    0x21,0x04,
    0x17,0x04,
    0x17,0x08,
    0x21,0x08,
    0x17,0x10,
    0x16,0x10,
    
    0x21,0x0c,
    0x21,0x04,
    0x21,0x08,
    0x21,0x08,
    0x17,0x08,
    0x23,0x04,
    0x23,0x04,
    0x23,0x10,
    
    0x26,0x08,
    0x26,0x04,
    0x26,0x04,
    0x26,0x04,
    0x15,0x08,
    0x24,0x04,
    0x25,0x08,
    0x21,0x04,
    0x21,0x04,
    0x21,0x10,
    
    0x24,0x08,
    0x24,0x04,
    0x24,0x04,
    0x24,0x08,
    0x14,0x08,
    0x23,0x08,
    0x22,0x04,
    0x17,0x04,
    0x17,0x08,
    0x21,0x08,
    0x16,0x20,

光年之外

    0x23,0x08,
    0x23,0x08,
    0x22,0x08,
    0x22,0x08,
    0x21,0x08,
    0x21,0x08,
    0x17,0x08,
    
    0x17,0x08,
    0x21,0x08,
    0x21,0x10,
    
    0x15,0x08,
    0x15,0x08,
    0x15,0x08,
    0x15,0x08,
    0x22,0x08,
    0x23,0x10,
    
    0x15,0x08,
    0x15,0x08,
    0x15,0x08,
    0x15,0x08,
    0x21,0x08,
    0x22,0x18,
    
    0x23,0x08,
    0x23,0x08,
    0x22,0x08,
    0x22,0x08,
    0x21,0x08,
    0x21,0x08,
    0x17,0x08,
    
    0x17,0x08,
    0x21,0x08,
    0x21,0x04,
    0x17,0x04,
    0x16,0x08,
    
    0x15,0x08,
    0x15,0x08,
    0x15,0x08,
    0x15,0x08,
    0x22,0x08,
    0x23,0x10,
    
    0x15,0x08,
    0x15,0x08,
    0x15,0x08,
    0x15,0x08,
    0x21,0x08,
    0x22,0x18,
    
    0x16,0x04,
    0x17,0x04,
    0x16,0x04,
    0x17,0x04,
    0x21,0x04,
    0x17,0x14,
    0x21,0x04,
    0x22,0x04,
    0x23,0x04,
    0x24,0x04,
    0x23,0x08,

    0x16,0x04,
    0x16,0x04,
    0x17,0x04,
    0x16,0x04,
    0x17,0x04,
    0x21,0x04,
    0x17,0x14,
    0x21,0x04,
    0x22,0x04,
    0x23,0x04,
    0x24,0x04,
    0x23,0x08,
    
    0x21,0x04,
    0x22,0x04,
    0x23,0x04,
    0x24,0x04,
    0x23,0x08,
    
    0x21,0x04,
    0x22,0x04,
    0x23,0x04,
    0x24,0x04,
    0x23,0x08,
    0x22,0x08,
    0x21,0x08,
    
    0x21,0x08,
    0x21,0x08,
    0x21,0x08,
    0x22,0x08,
    0x22,0x08,
    0x23,0x08,
    0x23,0x0c,
    0x25,0x04,
    0x25,0x08,
    0x26,0x08,
    0x26,0x18,
    
    0x21,0x08,
    0x22,0x08,
    0x22,0x08,
    0x23,0x08,
    0x23,0x08,
    0x25,0x08,
    0x25,0x0c,
    0x21,0x04,
    0x23,0x08,
    0x22,0x08,
    0x22,0x18,
	
    0x21,0x08,
    0x21,0x08,
    0x21,0x08,
    0x22,0x08,
    0x22,0x08,
    0x23,0x08,
    0x23,0x0c,
    0x25,0x04,
    0x25,0x08,
    0x26,0x08,
    0x26,0x18,  
	
    0x21,0x08,
    0x22,0x08,
    0x22,0x08,
    0x23,0x08,
    0x23,0x08,
    0x25,0x08,
    0x25,0x0c,
    0x21,0x04,
    0x23,0x08,
    0x22,0x08,
    0x22,0x18,
	
    0x24,0x08,
    0x23,0x08,
    0x22,0x08,
    0x21,0x08,
    0x21,0x04,
    0x25,0x04,
    0x25,0x08,
    0x25,0x08,
    0x25,0x08,
    0x21,0x0c,
    0x21,0x04, 
    0x21,0x08,
    0x16,0x10,
	
    0x24,0x08,
    0x23,0x08,
    0x22,0x08,
    0x21,0x08,
    0x21,0x04,
    0x25,0x04,
    0x25,0x08,
    0x25,0x08,
    0x25,0x08,
    0x21,0x0c,
    0x21,0x04, 
    0x21,0x08,
    0x17,0x08, 
    0x22,0x18,      

    0x24,0x08,
    0x23,0x08,
    0x22,0x04,
    0x21,0x04,
    0x16,0x08, 
    0x21,0x04,
    0x25,0x04,
    0x25,0x08,
    0x25,0x08,
    0x25,0x08,
    0x21,0x0c,
    0x21,0x04, 
    0x21,0x08,
    0x16,0x10, 
	
    0x24,0x08,
    0x23,0x08,
    0x22,0x04,
    0x21,0x04,
    0x16,0x08, 
    0x21,0x04,
    0x25,0x04,
    0x25,0x08,
    0x25,0x08,
    0x25,0x08,
    0x21,0x0c,
    0x21,0x04, 
    0x21,0x08,
    0x17,0x08,
    0x22,0x18,   

see you again

    0x25,0x08,
    0x32,0x08,
    0x31,0x08,
    0x23,0x08,
    0x23,0x08,
    0x31,0x04,
    0x32,0x04,
    0x33,0x04,
    0x32,0x04,
    0x31,0x04,
    0x32,0x04,
    
    0x25,0x08,
    0x32,0x08,
    0x31,0x08,
    0x25,0x08,
    0x25,0x08,
    0x31,0x04,
    0x32,0x04,
    0x33,0x04,
    0x32,0x04,
    0x31,0x04,
    0x32,0x04,
    
    0x25,0x08,
    0x32,0x08,
    0x31,0x08,
    0x25,0x08,
    0x25,0x08,
    0x31,0x04,
    0x32,0x04,
    0x33,0x04,
    0x32,0x04,
    0x31,0x04,
    0x32,0x04,
    
    0x25,0x08,
    0x32,0x08,
    0x31,0x08,
    0x25,0x08,
    0x25,0x08,
    
    0x11,0x08,
    0x13,0x08,
    0x15,0x08,
    0x16,0x08,
    0x16,0x08,
    0x16,0x08,
    0x15,0x08,
    0x15,0x04,
    0x16,0x04,
	
    0x11,0x04,
    0x12,0x08,
    0x12,0x08,
    0x11,0x08,
    0x13,0x08,
    0x13,0x10, 
	
    0x13,0x04,
    0x15,0x04,
    0x16,0x08,
    0x17,0x08,
    0x16,0x08,
    0x15,0x08,
    0x13,0x08,
    0x12,0x08,
    0x12,0x08, 
    0x11,0x08, 

    0x12,0x08,
    0x12,0x08,
    0x13,0x08,
    0x11,0x08, 
    0x11,0x08,
	
    0x13,0x04,
    0x13,0x04,
    0x15,0x04,
    0x16,0x08,
    0x16,0x08,
    0x15,0x08,
    0x15,0x08,
    0x15,0x04,
    0x16,0x10,
	
    0x11,0x04,
    0x12,0x08,
    0x12,0x08,
    0x11,0x08,
    0x13,0x08,
    0x12,0x10,
	
    0x13,0x08,
    0x15,0x08,
    0x26,0x08,
    0x21,0x08,
    0x22,0x08,
    0x23,0x08,
    0x22,0x08,
    0x21,0x08,
    0x16,0x08, 
    0x21,0x08,
    
    0x22,0x08,
    0x22,0x04,
    0x21,0x08, 
    0x21,0x10,
    
    0x16,0x08, 
    0x21,0x08,   
    0x22,0x08,
    0x22,0x04,
    0x21,0x08, 
    0x21,0x10,

0x00,0
	 

丑八怪

    0x25,0x06,
    0x26,0x06,
    0x26,0x06,
    0x25,0x06,
    0x26,0x06,
    0x26,0x0c,
    0x21,0x06,

    0x22,0x06,
    0x23,0x06,
    0x23,0x06,
    0x23,0x14,    

	  0x25,0x06,
    0x25,0x06,
    0x26,0x06,
    0x26,0x06,
    0x25,0x06,
    0x31,0x06,
    0x26,0x0c,
    0x21,0x06,

    0x22,0x06,
    0x23,0x06,
    0x25,0x06,
    0x23,0x14,
	
	  0x25,0x06,
    0x25,0x06,
    0x26,0x06,
    0x26,0x06,
    0x25,0x06,
    0x26,0x06,
    0x26,0x0c,
    0x21,0x06,
	
	  0x22,0x06,
    0x23,0x06,
    0x23,0x06,
    0x23,0x06,
    0x23,0x06,
    0x25,0x1d,
	
    0x25,0x0c,
    0x21,0x06,
    0x22,0x06,
    0x22,0x18,
    
    0x25,0x06,
    0x26,0x06,
    0x26,0x06,
    0x25,0x06,
    0x26,0x06,
    0x26,0x0c,
    0x21,0x06,    

    0x22,0x06,
    0x23,0x06,
    0x23,0x06,
    0x23,0x0c,

    0x25,0x06,    
    0x25,0x06,
    0x26,0x06,
    0x26,0x06,
    0x25,0x06,
    0x31,0x06,
    0x26,0x0c,
    0x21,0x06,

    0x22,0x06,
    0x23,0x06,
    0x25,0x06,
    0x23,0x0c,
    
    0x25,0x06,    
    0x25,0x06,
    0x26,0x06,
    0x26,0x06,
    0x25,0x06,
    0x36,0x06,
    0x26,0x0c,
    0x21,0x06,
    
    0x22,0x06,
    0x23,0x06,
    0x23,0x06,
    0x33,0x06,
    0x23,0x06,
    0x25,0x1d,
    
    0x25,0x06,
    0x24,0x06,
    0x24,0x06,
    0x33,0x06,
    0x24,0x06,
    0x23,0x06,
    0x24,0x10,
    
    0x25,0x06,
    0x24,0x06,
    0x23,0x06,
    0x34,0x06,
    0x23,0x06,
    0x22,0x06,
    0x21,0x06,
    
    0x23,0x0c,
    0x23,0x0c,
    0x33,0x0c,
    0x24,0x06,
    0x23,0x06,
    0x23,0x18,
    
    0x00,0

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 23:07:47  更:2022-07-04 23:08:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:23:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码