?? main.c
字號:
display_cha(colon,0,112);
display_cha(num1,2,0);
display_cha(tan,2,16);
display_cha(zou,2,32);
display_cha(num2,4,0);
display_cha(bian,4,16);
display_cha(ji,4,32);
display_cha(num3,6,0);
display_cha(ge,6,16);
display_cha(qu,6,32);
}
void display_mode_1(void)
{
send_cmd(0xa6);
display_cha(num1,0,0);
display_cha(tan,0,16);
display_cha(zou,0,32);
display_cha(mo,0,48);
display_cha(shi,0,64);
display_cha(colon,0,80);
page=1;
colume=128;
}
void display_mode_2(void)
{
send_cmd(0xa6);
display_cha(num2,0,0);
display_cha(bian,0,16);
display_cha(ji,0,32);
display_cha(mo,0,48);
display_cha(shi,0,64);
display_cha(colon,0,80);
page=1;
colume=128;
}
void display_mode_3(void)
{
send_cmd(0xa6);
display_cha(num3,0,0);
display_cha(ge,0,16);
display_cha(qu,0,32);
display_cha(mo,0,48);
display_cha(shi,0,64);
display_cha(colon,0,80);
page=1;
colume=128;
}
/*初始化*/
void lcd_initial(void)
{
LCD_RES_L;
delay_nus(5);
LCD_RES_H;
delay_nus(5);
send_cmd(0xA2); //LCD bias setting: 1/9
send_cmd(0xA0); //ADC selection: ram-seg normal
send_cmd(0xC8); //Common output mode selection: reverse
// send_cmd(0xDC); //??????????????????
// send_cmd(0xC8);//?????????????????
send_cmd(0x25); //resistor
send_cmd(0x81); //Electonic Volume
send_cmd(0x14);
send_cmd(0x2C); //voltage booster
send_cmd(0x2E); //voltage regulator
send_cmd(0x2F); //voltage follower
send_cmd(0xAF); //LCD display on
send_cmd(0xE0); //Column address increment w+1
send_cmd(0x40); //start line address
Clear_S();
}
/**************屏幕上添加一個音符********************************/
void display_add(unsigned char *note)
{
if(colume==128)
{
colume=0;
page++;
if(page==8)
{
Clear_S();
display_mode_1();
display_add(note);
return;
}
}
display_note(note,page,colume);
colume+=8;
}
/**************屏幕上刪除一個音符********************************/
void display_del()
{
colume-=8;
if(colume==-8)colume=0;
display_note(null,page,colume);
if(colume==0&&page!=2)
{
colume=128;
page--;
}
}
/*--------------------------------------------------------------------------*/
// 函數名稱:void sound();
// 函數功能:控制DA轉換發聲。
// 入口參數:無
// 出口參數:無
/*-------------------------------------------------------------------------------*/
void sound(unsigned int key_delay)
{
int i,j,m;
long int t;
if(key_delay!=0)
{
switch(key_delay)
{
case 110:LEDL5_ON;break;
case 98: LEDL6_ON;break;
case 87: LEDL7_ON;break;
case 82: LED1_ON;break;
case 73: LED2_ON;break;
case 64: LED3_ON;break;
case 61: LED4_ON;break;
case 54: LED5_ON;break;
case 48: LED6_ON;break;
case 42: LED7_ON;break;
case 40: LEDH1_ON;break;
default: break;
}
t=(int)20000/key_delay;
j=0;
for(i=0;i<t;i++) //一次循環 cycles
{
*P_DAC_Ctrl=0x0000;
*P_DAC1=j;
*P_DAC2=j;
for(m = 0;m<key_delay;m++);
if(j==0x0000)
j=0x8000;
else j=0x0000;
*P_Watchdog_Clear = 0x0001;
}
LED_OFF;
// *P_DAC1=0x0000;
// *P_DAC2=0x0000;
}
else
{
delay_nms(500);
}
*P_Watchdog_Clear = 0x0001; // 清看門狗
}
/*--------------------------------------------------------------------------*/
// 函數名稱:unsigned int code_to_delay(unsigned int key_code)
// 函數功能:將鍵盤掃描碼轉換成發音的延時。
// 入口參數:key_code-----鍵盤掃描碼
// 出口參數:key_delay----延時
/*-------------------------------------------------------------------------------*/
unsigned int code_to_delay(unsigned int key_code)
{
unsigned int key_delay=0;
switch(key_code)
{
case KEY_0: key_delay = 110;break;
case KEY_1: key_delay = 98;break;
case KEY_2: key_delay = 87;break;
case KEY_4: key_delay = 82;break;
case KEY_5: key_delay = 73;break;
case KEY_6: key_delay = 64;break;
case KEY_8: key_delay = 61;break;
case KEY_9: key_delay = 54;break;
case KEY_A: key_delay = 48;break;
case KEY_C: key_delay = 42;break;
case KEY_D: key_delay = 40;break;
case KEY_E: key_delay = 0;break;
default: key_delay = 0;break;
}
return key_delay;
}
/*--------------------------------------------------------------------------*/
// 函數名稱:unsigned char code_to_note(unsigned int key_code)
// 函數功能:將鍵盤掃描碼轉換成音符字模。
// 入口參數:key_code-----鍵盤掃描碼
// 出口參數:key_note----音符字模的首地址
/*-------------------------------------------------------------------------------*/
unsigned char *code_to_note(unsigned int key_code)
{
unsigned char *key_note=null;
switch(key_code)
{
case KEY_0: key_note=lsew;break;
case KEY_1: key_note =lla;break;
case KEY_2: key_note = ltea;break;
case KEY_4: key_note = doe;break;
case KEY_5: key_note = ray;break;
case KEY_6: key_note = me;break;
case KEY_8: key_note = far;break;
case KEY_9: key_note = sew;break;
case KEY_A: key_note = la;break;
case KEY_C: key_note = tea;break;
case KEY_D: key_note = hdoe;break;
case KEY_E: key_note = zero;break;
default: key_note = null;break;
}
return key_note;
}
/***********************音符轉成整數,以便存儲********************************/
// doe-tea 用1-7
// low_5,low_6,low_7用-5,-6,-7
// high_1用8,休止符用0
int code_to_num(unsigned int key_code)
{
int note_num=0;
switch(key_code)
{
case KEY_0: note_num=-5;break;
case KEY_1: note_num=-6;break;
case KEY_2: note_num=-7;break;
case KEY_4: note_num=1;break;
case KEY_5: note_num=2;break;
case KEY_6: note_num=3;break;
case KEY_8: note_num=4;break;
case KEY_9: note_num=5;break;
case KEY_A: note_num=6;break;
case KEY_C: note_num=7;break;
case KEY_D: note_num=8;break;
case KEY_E: note_num=0;break;
default: break;
}
return note_num;
}
/***********************存儲一個音符*******************************/
void store_note(int num)
{
int *p;
p=song;
if(n<95)
{
*(p+n)=num;
n++;
}
}
/***********************刪除一個音符*******************************/
void del_note()
{
n--;
if(n==-1)
n=0;
}
/***********************添加歌曲結束標志*******************************/
void store_end()
{
int *p;
p=song;
*(p+n)=100;
}
/***********************播放歌曲********************************************/
void sing(unsigned int *song)
{
unsigned int key_code=0;
unsigned int *p;
unsigned int delay;
key_code=Key_Get();
p=song;
while(*p!=100&&key_code==Key_Get())
{
switch(*p)
{
case -5:delay=110;break;
case -6:delay=98;break;
case -7:delay=87;break;
case 1:delay=82;break;
case 2:delay=73;break;
case 3:delay=64;break;
case 4:delay=61;break;
case 5:delay=54;break;
case 6:delay=48;break;
case 7:delay=42;break;
case 8:delay=40;break;
case 0:delay=0;break;
default:break;
}
p++;
sound(delay);
}
}
//===============================================================================================
// 語法格式: void speak(unsigned int key_code)
// 實現功能:
// 參數:
// 返回值:
//===============================================================================================
//unsigned int KeyDataChange(unsigned int Key_Data);
//void Initial_INT(void);
//unsigned int g_Data[11] = {0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f};
//0, 1, 2, 3, 4, 5, 6, 7, 8, 9
void speak(unsigned int key_code)
{
// KeyFlag = 0;
SACM_S480_Initial(Auto); //初始化為自動方式播放
*P_Watchdog_Clear = 0x0001; // 清看門狗
SACM_S480_Volume(15); //設置為最大播放音量
switch(key_code)
{
case KEY_3: SACM_S480_Play(0,DAC1+DAC2,Ramp_UpDn_On);break; //播放語音資源s0
case KEY_7: SACM_S480_Play(1,DAC1+DAC2,Ramp_UpDn_On);break; //播放語音資源s1
case KEY_B: SACM_S480_Play(2,DAC1+DAC2,Ramp_UpDn_On);break; //播放語音資源s2
case KEY_F: SACM_S480_Play(3,DAC1+DAC2,Ramp_UpDn_On);break; //播放語音資源s3
default: break;
}
while(SACM_S480_Status()&0x01)
{
*P_Watchdog_Clear = 0x0001;
SACM_S480_ServiceLoop(); // 獲取語音數據并將其填入解碼隊列
}
*P_SystemClock=0x0012;
*P_Watchdog_Clear = 0x0001; // 清看門狗
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -