?? main.c
字號(hào):
#include "SPCE061A.H"
#include "char_lib.h"
#include "note_lib.h"
//#include "pic.h"
#include "organ.h"
#include "song.h"
#include "s480.h"
//全局變量
unsigned int mode=0; //模式
// mode=0 模式選擇
// mode=1 錄音
// mode=2 編輯
// mode=3 播放
int page=0; //頁
int colume=0; //列
int n=0; //已輸入的音符數(shù)
// n從1開始,n<=96,n=96時(shí)為滿屏
int song[96];
int k=-1;
/********主程序********/
int main (void)
{
*P_SystemClock=0x0013;
*P_IOB_Dir=0xffff;
*P_IOB_Attrib=0xffff;
*P_IOB_Data=0x00ff;
*P_IOA_Dir=0xff00;
*P_IOA_Attrib=0xff00;
*P_IOA_Data=0x00ff;
lcd_initial();
Key_Init();
Initial_INT();
// display_pic(welcome);
//*P_SystemClock=0x0012;
delay_nms(500);
Clear_S();
display_mode_0();
speak(KEY_3);
while(1)
{
unsigned int key_code=0;
unsigned int key_delay=0;
int key_num=0;
unsigned char *key_note=null;
switch(mode)
{
//*******************************************************************//
case 0:
while(1)
{
*P_Watchdog_Clear=0x0001;
do{key_code=Key_Get();*P_Watchdog_Clear=0x0001;}
while(!key_code);
switch(key_code)
{
case KEY_7: mode=1;Clear_S();display_mode_1();speak(KEY_7);break;
case KEY_B: mode=2;Clear_S();display_mode_2();speak(KEY_B);break;
case KEY_F: mode=3;Clear_S();display_mode_3();speak(KEY_F);break;
default:break;
}
if(key_code==KEY_7||key_code==KEY_B||key_code==KEY_F)
{
key_code=0;break;
}
else key_code=0;
}
break;
//*********************************************************************************//
case 1:
while(1)
{
*P_Watchdog_Clear=0x0001;
do{key_code=Key_Get();*P_Watchdog_Clear=0x0001;}
while(!key_code);
switch(key_code)
{
case KEY_3: mode=0;Clear_S();display_mode_0();break;
case KEY_7:break;
case KEY_B:break;
case KEY_F:break;
default:
key_delay=code_to_delay(key_code);
key_note=code_to_note(key_code);
display_add(key_note);
sound(key_delay);
break;
}
if(key_code==KEY_3)
{
key_code=0;break;
}
else key_code=0;
}
break;
//********************************************************************//
case 2:
while(1)
{
*P_Watchdog_Clear=0x0001;
do{key_code=Key_Get();*P_Watchdog_Clear=0x0001;}
while(!key_code);
switch(key_code)
{
case KEY_3: mode=0;Clear_S();display_mode_0();break;
case KEY_7:display_del();del_note();break;
case KEY_B: store_end();mode=3;Clear_S();display_mode_3();break;
// case KEY_F:break;
default:
key_delay=code_to_delay(key_code);
key_note=code_to_note(key_code);
key_num=code_to_num(key_code);
store_note(key_num);
display_add(key_note);
sound(key_delay);
break;
}
if(key_code==KEY_3||key_code==KEY_B)
{
key_code=0;break;
}
else
key_code=0;
}
break;
//********************************************************************//
case 3:
while(1)
{
*P_Watchdog_Clear=0x0001;
do{key_code=Key_Get();*P_Watchdog_Clear=0x0001;}
while(!key_code);
switch(key_code)
{
case KEY_0:sing(song0);break;
case KEY_1:sing(song1);break;
case KEY_2:sing(song2);break;
case KEY_4:sing(song3);break;
case KEY_5:sing(song4);break;
case KEY_3: mode=0;Clear_S();display_mode_0();break;
case KEY_7:break;
case KEY_B:break;
case KEY_F:break;
case KEY_E:sing(song);break;
default:
break;
}
if(key_code==KEY_3)
{
key_code=0;break;
}
else key_code=0;
}
break;
//******************************************//
}
*P_Watchdog_Clear=0x0001;
}
return 0;
}
/*************************************************************
型號(hào): OCM12864-8
編寫: hyc
控制IC: ST7565p
E-mail: hyc_sea@mail.sdu.edu.cn
***************************************************************/
///////////////////////////////////////////////
// 9 A---------------VDD
// 8 K----------------GND
// 7 VSS--------------GND
// 6 VDD--------------VDD
// 5 CDA--------------IOB4
// 4 SCK--------------IOB3
// 3 A0 --------------IOB2
// 2 /RES-------------IOB1
// 1 /CS--------------IOB0
/////////////////////////////////////////////////
/***************************************************/
/*125us的延時(shí)*/
void delay_nus(int n)//125us
{
while(n--);
*P_Watchdog_Clear=0x0001;
}
/*毫秒級(jí)延時(shí)*/
void delay_nms(int n)//
{
int i;
for(i=0;i<n;i++)
delay_nus(78);
}
/*寫命令到寄存器*/
void send_cmd(unsigned char cmd)
{
unsigned char i;
unsigned char tmp;
LCD_A0_L; //指令通道
LCD_SCK_H; //時(shí)鐘高,變數(shù)據(jù)
LCD_CS_L; //片使能
delay_nus(5);
for(i=0;i<8;i++)
{
tmp=cmd&0x0080;
if(tmp)
LCD_CDA_H;
else
LCD_CDA_L;
LCD_SCK_L; //時(shí)鐘低,送數(shù)據(jù)
__asm("NOP");
__asm("NOP");
LCD_SCK_H; //上升沿,讀數(shù)據(jù)
__asm("NOP");
__asm("NOP");
cmd<<=1;
}
LCD_CS_H; //片禁能
delay_nus(5);
}
/*寫數(shù)據(jù)到DDRAM*/
void send_dat(unsigned char dat)
{
unsigned char i;
unsigned char tmp;
LCD_A0_H; //數(shù)據(jù)通道
LCD_SCK_H; //時(shí)鐘高,變數(shù)據(jù)
LCD_CS_L; //片使能
delay_nus(5);
for(i=0;i<8;i++)
{
tmp=dat&0x0080;
if(tmp) LCD_CDA_H;
else LCD_CDA_L;
LCD_SCK_L; //時(shí)鐘低,送數(shù)據(jù)
__asm("NOP");
__asm("NOP");
__asm("NOP");
__asm("NOP");
LCD_SCK_H; //時(shí)鐘高,變數(shù)據(jù)
__asm("NOP");
__asm("NOP");
__asm("NOP");
__asm("NOP");
dat<<=1;
}
LCD_CS_H; //片禁能
delay_nus(5);
}
/*寫頁地址*/
void set_page_address(unsigned char dat)
{
send_cmd(0xb0|dat);
}
/*寫列地址*/
void set_colume_address(unsigned char dat)
{
unsigned char tmp;
tmp=dat>>4;
tmp&=0x00ff;
send_cmd(0x10|tmp); //送列地址高三位
tmp=0x0f&dat;
send_cmd(tmp); //送列地址低四位
}
/*清屏*/
void Clear_S()
{
unsigned char i,j;
for(i=0;i<8;i++)
{
set_page_address(i);
set_colume_address(0x00);
for(j=0;j<0x84;j++)
{
send_dat(0x00);
}
}
}
/*顯示漢字*/
void display_cha(unsigned char *cha,int page,int colume)
{
int j;
set_page_address(page);
set_colume_address(colume);
for(j=0;j<16;j++)
{
send_dat(*(cha+j));
}
set_page_address(page+1);
set_colume_address(colume);
for(j=0;j<16;j++)
{
send_dat(*(cha+16+j));
}
}
/*顯示音符*/
void display_note(unsigned char *note,int page,int colume)
{
int j;
set_page_address(page);
set_colume_address(colume);
for(j=0;j<8;j++)
{
send_dat(*(note+j));
}
}
/*顯示一副圖像*/
void display_pic(unsigned char *pic)
{
int i,j;
set_page_address(1);
set_colume_address(0);
for(i=1;i<7;i++)
{
for(j=0;j<128;j++)
{
send_dat(*(pic+128*(i-1)+j));
}
set_page_address(i+1);
set_colume_address(0);
}
}
/*顯示模式選擇界面*/
void display_mode_0(void)
{
send_cmd(0xa6);
display_cha(qing,0,0);
display_cha(xuan,0,16);
display_cha(ze,0,32);
display_cha(gong,0,48);
display_cha(zuo,0,64);
display_cha(mo,0,80);
display_cha(shi,0,96);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -