香河英茂工作室 发表于 2025-6-19 13:47:01

大佬给的 生日快乐 歌代码 适合擎天柱AI8051U未避免找不到,发个帖子

#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;

//#defineGPIO_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;                //STC1514T 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 延时表决定了每个音符的频率

                }
                P0=LED;
               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秒
    }
}




烧录可奏乐,
音调有些跑,

接下来,
我要把擎天柱AI8051U,
做的像擎天柱,

加一块ST7735 SPI的,
80*160屏显示擎天柱,

的照片,
能装几幅就几幅,
描绘擎天柱和威震天打架,
的视频,

可是我还不会做,
不知大佬是否有兴趣,
我组装个机器人,
给大家展示,
把玩,

也许会带动STC玩具革命,
页: [1]
查看完整版本: 大佬给的 生日快乐 歌代码 适合擎天柱AI8051U未避免找不到,发个帖子