#include <reg52.h>
#include <intrins.h>
#include "lcd1602.h"
#define uchar unsigned char
#define uint unsigned int
#define L1 262
#define L2 286
#define L3 311
#define L4 349
#define L5 392
#define L6 440
#define L7 494
#define Z1 523
#define Z2 587
#define Z3 659
#define Z4 698
#define Z5 784
#define Z6 880
#define Z7 987
#define H1 1046
#define H2 1174
#define H3 1318
#define H4 1396
#define H5 1567
#define H6 1760
#define H7 1975
sbit sound = P1 ^ 6;
unsigned int C;
unsigned char u, t;
unsigned char velocity = 60;
unsigned char press_key = 0;
unsigned char open_flag = 0;
unsigned char music_crr = 0;
unsigned char code name0[]="1 TianKongZC ";
unsigned char code name1[]="2 LiangZhiLaoHu ";
unsigned char code name2[]="3 MoLiHua ";
unsigned char code name3[]="4 XiaoXingXing ";
unsigned char *song_name[]={name0,name1,name2,name3};
unsigned int code music0[]=
{ Z6,Z7,H1,Z7,H1,H3,Z7,Z3,Z3, Z6,Z5,Z6,H1,Z5,Z3,Z3, Z4,Z3,Z4,H1,
Z3,H1,H1,H1,Z7,Z4,Z4,Z7,Z7,Z6,Z7, H1,Z7,H1,H3,Z7,Z3,Z3, Z6,Z5,Z6,H1,
Z5, Z3,Z4,H1,Z7,H1,H2,H2,H2,H1,H1,Z6,Z7,Z5,Z6,H1,H2, H3,H2,H3,H5,
H2,Z5,Z5, H1,Z7,H1,H3,H3, Z6,H1,Z7,H2,H1,Z5,Z5, H4,H3,H2,H1,
H3, Z3,H3, H6,H5,H5, H3,H2,H1,H1,H2,H1,H2,H5,H3,H3,
H6,H5, H3,H2,H1,H1,H2,H1,H2,Z7,Z6,Z6,Z7, Z6,0xff};
unsigned char code music0_JP[ ]=
{ 4,4, 12,4,8,8, 20,4,4, 12,4,8,8, 20,4,4, 12,4,4,12,
20,4,4,4, 12,4,8,8, 20,4,4, 12,4,8,8, 20,4,4, 12,4,8,8,
32, 4, 8,4,6,8, 4,4,4,16, 8,4,6,8, 24,4,4, 12,4,8,8,
24,4,4, 4,4,8,8, 32, 4,8,8,6, 12,4,16, 8,8,8,8,
30, 20,8, 16,8,8, 4,4,16,8, 8,4,4,8, 20,8,
16,16, 4,20,8, 8,4,4,8, 20,4,4, 32};
unsigned int code music1[]=
{ Z1,Z2,Z3,Z1,Z1,Z2,Z3,Z1,Z3,Z4,Z5,Z3,Z4,Z5,Z5,Z6,Z5,Z4,
Z3,Z1,Z5,Z6,Z5,Z4,Z3,Z1,Z2,L5,Z1,Z2,L5,Z1,0xff};
unsigned char code music1_JP[ ]=
{ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,4,4,4,4,8,8,4,4,4,4,8,8,8,8,16,8,8,8,1};
unsigned int code music2[]=
{ Z3,Z3,Z5,Z6,H1,H1,Z6,
Z5,Z5,Z6,Z5,
Z3,Z3,Z5,Z6,H1,H1,Z6,
Z5,Z5,Z6,Z5,
Z5,Z5,Z5,Z3,Z5,
Z6,Z6,Z5,
Z3,Z2,Z3,Z5,Z3,Z2,
Z1,Z1,Z2,Z1,0xff};
unsigned char code music2_JP[ ]=
{ 16,8,8,8,8,8,8,
16,8,8,32,
16,8,8,8,8,8,8,
16,8,8,32,
16,16,16,8,8,
16,16,32,
16,8,8,16,8,8,
16,8,8,32,1};
unsigned int code music3[]=
{ H3,H3,H3,H2,H1,H2,H5,H5,H1,H1,H1,H1,Z6,
Z7,H3,H3,Z5,Z6,H6,H5,H4,H3,H2,H1,H1,
Z6,H1,H2,H5,H5,H2,H1,H2,H2,Z1,H3,H3,
H3,H2,H1,H2,H5,H5,H1,H1,H1,H1,Z6,Z7,
H3,H3,Z5,Z6,H6,H5,H4,
H3,H2,H1,H1,Z6,H1,H2,H5,H5,Z5,H2,H1,
0xff};
unsigned char code music3_JP[ ]=
{ 8,2,2,2,2,4,4,8, 8,2,2,2,2,
4,4,4,4,8,4,2,2,4,2,2,8,
2,2,2,2,2,2,2,2,8,8,8,2,2,2,2,4,4,8,8,2,2,2,2,4,4,4,4,8,4,2,2,
8,2,2,4,2,2,2,2,2,2,4,12
};
void delay(uint z)
{
uint x;
while (z--)
{
for (x = 125; x > 0; x--)
;
}
}
void delay1()
{
uint i, j;
for (i = 0; i < velocity; i++)
for (j = 0; j < 125; j++)
;
}
void init_timer(void)
{
EA = 1;
ET1 = 1;
TMOD &= 0x0f;
TMOD |= 0x00;
TR1 = 1;
}
#define GPIO_KEY P3
unsigned char ScanKey( void )
{
char a = 0;
unsigned char map[]={3,7,11,15,2,6,10,14,1,5,9,13,0,4,8,12};
unsigned char KeyValue = 0xff;
GPIO_KEY = 0x0f;
if ( GPIO_KEY != 0x0f )
{
delay( 5 );
if ( GPIO_KEY != 0x0f )
{
GPIO_KEY = 0X0F;
switch ( GPIO_KEY )
{
case (0X07):
KeyValue = 0;
break;
case (0X0b):
KeyValue = 1;
break;
case (0X0d):
KeyValue = 2;
break;
case (0X0e):
KeyValue = 3;
break;
}
GPIO_KEY = 0XF0;
switch ( GPIO_KEY )
{
case (0X70):
KeyValue = KeyValue;
break;
case (0Xb0):
KeyValue = KeyValue + 4;
break;
case (0Xd0):
KeyValue = KeyValue + 8;
break;
case (0Xe0):
KeyValue = KeyValue + 12;
break;
}
while ( (a < 100) && (GPIO_KEY != 0xf0) )
{
delay( 10 );
a++;
}
KeyValue=map[KeyValue]+1;
}
}
return KeyValue;
}
void delay_key(void)
{
if (press_key == 1)
{
press_key = 0;
if (open_flag == 0)
{
open_flag = 1;
} else
{
open_flag = 0;
}
}
if (press_key == 2)
{
press_key = 0;
if (music_crr > 0)
{
music_crr = (music_crr - 1) % 4;
} else
{
music_crr = 3;
}
LCD_write_str(0,0,song_name[music_crr]);
}
if (press_key == 3)
{
press_key = 0;
music_crr = (music_crr + 1) % 4;
LCD_write_str(0,0,song_name[music_crr]);
}
if (press_key == 4)
{
press_key = 0;
velocity = velocity - 5;
}
if (press_key == 5)
{
press_key = 0;
velocity = velocity + 5;
}
}
void main()
{
LCD_init();
init_timer();
TR1 = 0;
sound = 1;
open_flag = 0;
LCD_write_str(0,0,song_name[music_crr]);
while (1)
{
press_key = ScanKey();
delay_key();
if (music_crr == 0 && open_flag == 1)
{
u = 0;
while (music0[u] != 0xff)
{
press_key = ScanKey();
delay_key();
if (music_crr != 0)
{
init_timer();
TR1 = 0;
sound = 1;
break;
}
if (open_flag == 0)
{
while (open_flag == 0)
{
press_key = ScanKey();
delay_key();
}
}
C = 460830 / music0[u];
TH1 = (8192 - C) / 32;
TL1 = (8192 - C) % 32;
TR1 = 1;
for (t = 0; t < music0_JP[u]; t++)
delay1();
TR1 = 0;
u++;
}
init_timer();
TR1 = 0;
sound = 1;
}
if (music_crr == 1 && open_flag == 1)
{
u = 0;
while (music1[u] != 0xff)
{
press_key = ScanKey();
delay_key();
if (music_crr != 1)
{
init_timer();
TR1 = 0;
sound = 1;
break;
}
if (open_flag == 0)
{
while (open_flag == 0)
{
press_key = ScanKey();
delay_key();
}
}
C = 460830 / music1[u];
TH1 = (8192 - C) / 32;
TL1 = (8192 - C) % 32;
TR1 = 1;
for (t = 0; t < music1_JP[u]; t++)
delay1();
TR1 = 0;
u++;
}
init_timer();
TR1 = 0;
sound = 1;
}
if (music_crr == 2 && open_flag == 1)
{
u = 0;
while (music2[u] != 0xff)
{
press_key = ScanKey();
delay_key();
if (music_crr != 2)
{
init_timer();
TR1 = 0;
sound = 1;
break;
}
if (open_flag == 0)
{
while (open_flag == 0)
{
press_key = ScanKey();
delay_key();
}
}
C = 460830 / music2[u];
TH1 = (8192 - C) / 32;
TL1 = (8192 - C) % 32;
TR1 = 1;
for (t = 0; t < music2_JP[u] / 2; t++)
delay1();
TR1 = 0;
u++;
}
init_timer();
TR1 = 0;
sound = 1;
}
if (music_crr == 3 && open_flag == 1)
{
u = 0;
while (music2[u] != 0xff)
{
press_key = ScanKey();
delay_key();
if (music_crr != 3)
{
init_timer();
TR1 = 0;
sound = 1;
break;
}
if (open_flag == 0)
{
while (open_flag == 0)
{
press_key = ScanKey();
delay_key();
}
}
C = 460830 / music3[u];
TH1 = (8192 - C) / 32;
TL1 = (8192 - C) % 32;
TR1 = 1;
for (t = 0; t < music3_JP[u] ; t++)
delay1();
TR1 = 0;
u++;
}
init_timer();
TR1 = 0;
sound = 1;
}
}
}
void Time1(void)
interrupt 3
{
sound=!sound;
TH1=(8192-C)/32;
TL1=(8192-C)%32;
}
#include <reg52.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
sbit lcd_rs=P2^4;
sbit lcd_rw=P2^5;
sbit lcd_en=P2^6;
#define DataPort P0
#define RS_CLR lcd_rs=0
#define RS_SET lcd_rs=1
#define RW_CLR lcd_rw=0
#define EN_CLR lcd_en=0
#define EN_SET lcd_en=1
void delay_lcd_ms(unsigned int a) {
unsigned int i, j;
for (i = a; i > 0; i--)
for (j = 100; j > 0; j--)
;
}
void LCD_write_com(unsigned char com)
{
RS_CLR;
RW_CLR;
EN_SET;
DataPort = com;
delay_lcd_ms(5);
EN_CLR;
}
void LCD_write_data(unsigned char dataa)
{
RS_SET;
RW_CLR;
EN_SET;
DataPort = dataa;
delay_lcd_ms(5);
EN_CLR;
}
void LCD_write_char(unsigned char x,unsigned char y,unsigned char dataa)
{
if (y == 0)
{
LCD_write_com(0x80 + x);
}
else
{
LCD_write_com(0xC0 + x);
}
LCD_write_data( dataa);
}
void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s)
{
if (y == 0)
{
LCD_write_com(0x80 + x);
}
else
{
LCD_write_com(0xC0 + x);
}
while (*s)
{
LCD_write_data( *s);
s ++;
}
}
void LCD_init(void)
{
LCD_write_com(0x38);
delay_lcd_ms(5);
LCD_write_com(0x38);
delay_lcd_ms(5);
LCD_write_com(0x38);
delay_lcd_ms(5);
LCD_write_com(0x38);
delay_lcd_ms(5);
LCD_write_com(0x08);
delay_lcd_ms(5);
LCD_write_com(0x01);
delay_lcd_ms(5);
LCD_write_com(0x06);
delay_lcd_ms(5);
LCD_write_com(0x0C);
delay_lcd_ms(5);
}