找回密码
 立即注册
查看: 42|回复: 1

AI8051U擎天柱播放《生日快乐歌》同时打开P2=LED[a],灯光随音乐跳动

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:175
  • 最近打卡:2025-06-28 07:19:36
已绑定手机

115

主题

392

回帖

549

积分

高级会员

积分
549
发表于 2025-6-20 07:52:46 | 显示全部楼层 |阅读模式
/*************  功能说明    **************

本例程基于AI8051U为主控芯片的实验箱进行编写测试.

使用Keil C251编译器,Memory Model推荐设置XSmall模式,默认定义变量在edata,单时钟存取访问速度快。

edata建议保留1K给堆栈使用,空间不够时可将大数组、不常用变量加xdata关键字定义到xdata空间。

下载时, 选择时钟 24MHZ (用户可自行修改频率).

******************************************/


#include "AI8051U.h"
#include "stdio.h"
#include "intrins.h"

// 定义 GPIO_P5_0 宏
//#define GPIO_P5_0 (*(volatile unsigned char *)0x1234)
#define GPIO_P5 (*(volatile unsigned char *)0x00C8)
sbit GPIO_P5_0 = GPIO_P5^0;

//#define  GPIO_P5_0 P50

typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;

u8 code LED[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

#define MAIN_Fosc       24000000UL
#define Timer0_Reload   (65536UL - (MAIN_Fosc / 1000))  // Timer 0 中断频率, 1000次/秒

// 定义延时函数
void delay_ms(unsigned int ms) {
        unsigned int i;
        do{
//          i=MAIN_Fosc/96000L;                //STC89/90_12T
//          i=MAIN_Fosc/48000L;                //STC89/90_6T
//          i=MAIN_Fosc/14000;                //STC11、STC12
//          i=MAIN_Fosc/13000;                //STC15  14T per loop
//            i=MAIN_Fosc/10000;                //STC8 10T per loop
              i=MAIN_Fosc/6030;                 //STC32 6T per loop
                while(--i);
        }while(--ms);

}

// 生日快乐歌音符序列
u8 code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,
        212,212,106,126,159,169,190,119,119,126,159,142,159,0};
u8 code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24,
        9,3,12,12,12,12,12,9,3,12,12,12,24,0};

//控制音频、节拍函数
void PlayMusic()
{
        u16 i=0,j,k;
        u8 a=0;
        while(SONG_LONG[ i]!=0||SONG_TONE[ i]!=0)
        {   
                for(j=0;j<SONG_LONG[ i]*40;j++)  //播放各个音符,SONG_LONG 为拍子长度
                {
                        GPIO_P5_0=~GPIO_P5_0;
                        for(k=0;k<SONG_TONE[ i]*7;k++);//SONG_TONE 延时表决定了每个音符的频率

                }
                P2=LED[a];
                 a++;
                if(a==8)
                      {a=0;}                       
                delay_ms(10);
                i++;
        }
}

void main() {

    WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度

    P0M1 = 0x00;   P0M0 = 0xff;   //设置为推挽输出
    P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
    P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口      
          P5M0 = 0x01; P5M1 = 0x00; // 设置P5.0为推挽输出
          GPIO_P5_0 = 0;
    P40 = 0;                //LED Power On

    while(1) {
                                PlayMusic(); //播放生日快乐
        delay_ms(3000); // 歌曲播放完后停顿2秒
    }
}


C语言.rar (111.53 KB, 下载次数: 0)

回复

使用道具 举报 送花

3

主题

534

回帖

-221

积分

等待验证会员

积分
-221
发表于 2025-6-20 07:53:00 | 显示全部楼层
基于AI8051U实验箱的测试与实现

在本实验中,我们使用了AI8051UU的实验箱来实现多个功能模块,包括时钟控制、输入输出以及数据处理等。为了满足实验需求,AI8051UU被配置为时钟控制模块,同时支持通过Keil C251编译器进行编程。以下是实验中AI8051UU的主要功能说明和配置参数:

实验箱功能说明
AI8051UU实验箱支持多种功能模块的实现,包括:
1. 时钟控制模块:通过AI8051UU的时钟控制模块,可以实现AI8051UU的时钟频率控制和时钟信号的输出。
2. 输入输出模块:通过AI8051UU的输入输出模块,可以实现AI8051UU的中断处理和数据流控制。
3. 数据处理模块:AI8051UU支持数据的存储、读取和处理,包括大数存储和快速访问。

硬件配置
为了实现实验需求,AI8051UU被配置为以下硬件参数:
1. 编译器:使用Keil C251编译器进行编程,默认采用XSmall内存模型,变量定义在$data空间。
2. 数据类型:
数据类型定义为unsigned char,即8位无符号整数。
大数组和不常用变量建议定义在xdata空间,以提高内存访问速度。
3. 时钟频率:实验中使用时钟频率为MAINFOSC = 24000000UL(即24MHz),用户可根据实验需求自行调整频率。

使用示例代码
在实验箱中,我们可以使用以下代码来实现AI8051UU的功能:
  1. c
  2. // 定义时钟控制宏
  3. define MAINFOSC       24000000UL  // 主循环的时钟频率
  4. define Timer0Reload   (65536UL - (MAINFOSC / 1000))  // 延时2秒
  5. // 定义时钟信号
  6. void setupTimer0() {
  7.     Timer0Reload();
  8. }
  9. // 定义中断处理函数
  10. void delayms(unsigned int m) {
  11.     // 应用延时函数
  12. }
复制代码
以上代码为实验箱中AI8051UU的核心配置参数,具体功能可以根据实验需求进行调整。

注意事项
1. 频率设置:AI8051UU的时钟频率为24MHz,实验中建议根据实验需求调整频率。
2. 数据类型:在实验箱中,所有变量默认定义在$data空间,建议扩展数据空间以进一步提高内存访问速度。
3. 延时函数:AI8051UU支持快速的时钟中断处理,延时函数的实现可以根据实验需求进行调整。

通过上述配置和使用示例代码,AI8051UU能够实现多种功能模块的实现,为实验提供有力支持。

以上为AI8051UU的详细实验箱配置和功能说明。希望对您有所帮助!

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-28 23:50 , Processed in 0.183383 second(s), 51 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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