第一步:定义全局变量
- 包括歌曲和音符数组。
- 定义控制LED灯和按键的GPIO地址(这里你需要提供准确的硬件位置信息)。
- 定义用于ADC旋钮调节音量的变量。
char song0[] = {
2, 3, 4, 3, 2, 3, 2, 3, 2, 4, 2, 1, 4, 3, 2};
char song1[] = {
1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1};
char song2[] = {
4, 4, 5, 5, 6, 6, 7, 7, 6, 6, 5, 5};
char song3[] = {
7, 6, 5, 4, 3, 2, 1};
char yf[] = {
0, 191, 172, 159, 144, 135, 120, 107};
char song_index = 0;
char play_pos = 0;
#define GPIO_LED1 *(volatile long*)0x11400000
#define GPIO_LED2 *(volatile long*)0x11400004
#define GPIO_LED3 *(volatile long*)0x11400008
#define GPIO_LED4 *(volatile long*)0x1140000C
#define BUTTON_PIN *(volatile long*)0x11000020
#define ADCCON *(volatile long*)0x126C0000
#define ADCDAT *(volatile long*)0x126C000C
#define ADCMUX *(volatile long*)0x126C001C
第二步:UART 串口初始化
- 初始化 UART 用于调试输出。
- 实现串口发送字符和字符串的功能。
#define GPA1CON *(volatile long*)0x11400020
#define ULCON2 *(volatile long*)0x13820000
#define UCON2 *(volatile long*)0x13820004
#define UTRSTAT2 *(volatile long*)0x13820010
#define UTXH2 *(volatile long*)0x13820020
#define UBRDIV2 *(volatile long*)0x13820028
#define UFRACVAL2 *(volatile long*)0x1382002C
void uart_init(void) {
GPA1CON = GPA1CON & ~0xF;
GPA1CON = GPA1CON | (1 << 1);
GPA1CON = GPA1CON & ~(0xF << 4);
GPA1CON = GPA1CON | (1 << 5);
ULCON2 = 0x03;
UCON2 = 0x05;
UBRDIV2 = 53;
UFRACVAL2 = 4;
}
void putc(char ch) {
while (!(UTRSTAT2 & (1 << 1)));
UTXH2 = ch;
}
void puts(char *s) {
int i = 0;
while (s[i]) {
putc(s[i])