我已經(jīng)研究的一個(gè)星期了,沒轍了,所以求助于各位大蝦了,謝謝了!
#include"lcd12864.h"
void LCD_busy()
{
bit busy;
LCD_E = 0;
LCD_RS = 0;
LCD_RW = 1;
do{
LCD_Busy = 1;
LCD_E = 1;
_nop_();
busy = LCD_Busy;
LCD_E = 0;
}while(busy);
}
void LCD_WriteCode(unsigned char cmd)
{
LCD_busy();
LCD_E = 0;
LCD_RS = 0;
LCD_RW = 0;
LCD_Data = cmd;
LCD_E = 1;
_nop_();
LCD_E = 0;
}
void LCD_GoToXY(unsigned char x,unsigned char y)
{
y = y%4;//y取值為0、1、2、3
x = x%8;//x取值為0~7
switch(y){
case 0:
x |= 0x80;
break;
case 1:
x |= 0x90;
break;
case 2:
x |= 0x88;
break;
case 3:
x |= 0x98;
break;
}
LCD_WriteCode(x);
}
void LCD_WriteData(unsigned char dat)
{
LCD_busy();
LCD_RS = 1;
LCD_RW = 0;
LCD_Data = dat;
LCD_E = 1;
_nop_();
LCD_E = 0;
}
void LCD_Init()
{
LCD_RST = 1;
LCD_PSB = 1;//并口通訊
LCD_E = 0;
LCD_WriteCode(0x08);//關(guān)顯示 ,關(guān)光標(biāo)顯示
LCD_Clear();//清屏
LCD_WriteCode(0x30);//顯示模式設(shè)定為基本功能模式
LCD_WriteCode(0x06);//讀或?qū)懸粋(gè)字符后,地址加1,整屏不移動(dòng)
LCD_WriteCode(0x0c);//開顯示
LCD_BG = 0;//開啟背光
}
void LCD_Clear()
{
LCD_WriteCode(0x01);
}
void LCD_ShowString(unsigned char x,unsigned char y,unsigned char *str){
LCD_GoToXY(x,y);
while(*str){
LCD_WriteData(*str);
str++;
delay1(3000);
}
}
void LCD_ShowImg(unsigned char dat[]){//顯示自定義圖形
unsigned char i,j;
for(i=0; i<32; i++){//寫上半部分屏
LCD_WriteCode(0x34);//打開擴(kuò)展功能模式
LCD_WriteCode(0x80|i);//行地址
LCD_WriteCode(0x80);//列地址
LCD_WriteCode(0x30);//關(guān)閉擴(kuò)展功能,回到基本功能模式
for(j=0; j<16; j++){//寫入圖像數(shù)據(jù)
LCD_WriteData(*dat);
dat++;
}
}
for(i=0; i<32; i++){//寫下半部分屏
LCD_WriteCode(0x34);//打開擴(kuò)展功能模式
LCD_WriteCode(0x80|i);//行地址
LCD_WriteCode(0x88);//列地址
LCD_WriteCode(0x30);//關(guān)閉擴(kuò)展功能,回到基本功能模式
for(j=0; j<16; j++){//寫入圖像數(shù)據(jù)
LCD_WriteData(*dat);
dat++;
}
}
//LCD_WriteCode(0x36);//打開擴(kuò)展功能,開啟顯示
//LCD_WriteCode(0x30);//關(guān)閉擴(kuò)展功能,回到基本功能模式
}
void LCD_Flash(){//顯示內(nèi)容閃爍
unsigned char i;
for(i=0; i<3; i++){
delay1(40000);
LCD_WriteCode(0x08);//顯示關(guān)
delay1(30000);
LCD_WriteCode(0x0C);//顯示開
}
}
void delay1(unsigned int n){
for(; n>0; n--);
}
LCD文件;
/* 名稱:播放音樂
說明:程序運(yùn)行時(shí)播放生日快樂歌, 未使用定時(shí)器中斷,所有頻率完全用延時(shí)實(shí)現(xiàn)
*/
#include"lcd12864.h"
#define uchar unsigned char
#define uint unsigned int
sfr P4 = 0xE8;//??P4????
sbit P4_4 = P4^4;//??P4.4????
sbit BEEP=P4^4;
//生日快樂歌的音符頻率表,不同頻率由不同的延時(shí)來決定
uchar 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};
//生日快樂歌節(jié)拍表,節(jié)拍決定每個(gè)音符的演奏長短
uchar 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};
//延時(shí)
code unsigned char IMG[]={//128*64??????
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X70,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X70,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X00,0X00,0X00,0X04,0X00,
0X00,0X00,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X06,0X03,0X00,0X00,0X00,0X1C,0X00,
0X00,0X00,0X80,0X00,0X00,0X00,0X00,0XC0,0X00,0X1E,0X03,0X00,0X00,0X00,0X1C,0X00,
0X00,0X01,0X7E,0X00,0X00,0X1E,0X01,0XC0,0X00,0X3E,0X03,0X00,0X00,0X10,0X18,0X00,
0X00,0X03,0XFF,0X00,0X00,0X7E,0X01,0XC0,0X00,0X60,0X03,0X00,0X00,0X10,0X18,0X00,
0X00,0X07,0X07,0X00,0X00,0X7E,0X01,0X80,0X00,0X80,0X03,0X00,0X00,0X10,0X1F,0X00,
0X00,0X0C,0X06,0X00,0X00,0XEC,0X03,0X80,0X01,0X00,0X03,0X00,0X00,0X10,0X3F,0X00,
0X00,0X18,0X0C,0X00,0X00,0X18,0X07,0XB8,0X00,0X00,0X73,0X00,0X00,0X3C,0X7E,0X00,
0X00,0X03,0X18,0X00,0X00,0X20,0X3F,0XFC,0X00,0X18,0XF3,0X00,0X01,0XF8,0XFC,0X00,
0X00,0X07,0X78,0X00,0X00,0X04,0X7F,0XBC,0X00,0X3C,0X43,0X00,0X03,0XF0,0X78,0X00,
0X00,0X07,0XF8,0X00,0X00,0X3E,0X7F,0X1C,0X08,0X38,0X43,0X00,0X03,0X90,0X18,0X00,
0X00,0X0D,0XF0,0X00,0X00,0XFE,0X0E,0X18,0X08,0XF8,0X71,0X00,0X00,0X10,0X10,0X00,
0X00,0X08,0XC0,0X00,0X07,0XFC,0X0C,0X18,0X09,0XF0,0XF1,0X00,0X00,0X10,0X32,0X00,
0X00,0X18,0X00,0X00,0X0F,0XF8,0X1C,0X18,0X1F,0XF0,0X61,0X00,0X00,0X18,0X7F,0X00,
0X00,0X10,0X00,0X00,0X0F,0X72,0X18,0X18,0X1F,0XE0,0X61,0XF0,0X01,0X18,0XFF,0X00,
0X00,0X20,0X3F,0X00,0X00,0XE7,0X38,0X10,0X1F,0XD8,0XC7,0XE0,0X01,0X11,0XF3,0X00,
0X00,0X20,0XFF,0X80,0X00,0XCF,0X30,0X20,0X09,0XF9,0X3F,0X80,0X02,0X11,0X83,0X00,
0X00,0X4F,0XFF,0X80,0X03,0X9E,0X61,0XC0,0X03,0XF3,0XFF,0X80,0X06,0X13,0X86,0X00,
0X00,0X9B,0XF3,0X80,0X07,0XF0,0X63,0XC0,0X03,0XC7,0XF3,0X80,0X0C,0X13,0XEC,0X00,
0X01,0X9A,0X03,0X00,0X07,0XE0,0XC3,0X00,0X06,0XC7,0X83,0X80,0X0C,0X11,0XFC,0X00,
0X03,0X0C,0X06,0X00,0X07,0X01,0X80,0X00,0X04,0XC0,0X03,0X00,0X1C,0X20,0XFF,0XF0,
0X06,0X0E,0X7E,0X00,0X00,0X01,0X00,0X00,0X08,0X40,0X03,0X00,0X03,0X21,0XDF,0XFC,
0X0C,0X06,0XFE,0X00,0X00,0X03,0X00,0X00,0X00,0X40,0X03,0X00,0X03,0XDE,0X00,0X70,
0X08,0X02,0X7C,0X00,0X00,0X06,0X00,0X00,0X00,0X00,0X02,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X08,0X00,0X00,0X00,0X00,0X02,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X02,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X10,0X24,0X00,0X12,0X01,0X00,0X00,0X02,0X0E,0X1C,0X38,0X70,0X23,0XE3,0X8F,0X80,
0X10,0X24,0X00,0X12,0X01,0X00,0X00,0X06,0X11,0X22,0X44,0X88,0X60,0X44,0X41,0X00,
0X16,0X7E,0XB1,0X24,0X71,0X61,0XC5,0X8A,0X11,0X20,0X40,0X08,0X60,0X40,0X41,0X00,
0X19,0X24,0XC8,0X24,0X89,0X92,0X26,0X42,0X11,0X2C,0X58,0X08,0XA0,0X80,0X42,0X00,
0X11,0X24,0X88,0X24,0X81,0X12,0X24,0X42,0X11,0X32,0X64,0X10,0XA0,0X81,0X82,0X00,
0X11,0X24,0X88,0X24,0X71,0X12,0X24,0X42,0X11,0X22,0X44,0X11,0X20,0X80,0X42,0X00,
0X11,0X24,0X88,0X24,0X09,0X12,0X24,0X42,0X11,0X22,0X44,0X21,0XF1,0X00,0X44,0X00,
0X11,0X24,0XC8,0X48,0X89,0X12,0X26,0X42,0X11,0X22,0X44,0X40,0X21,0X04,0X44,0X00,
0X11,0X36,0XB1,0X48,0X71,0X11,0XC5,0X82,0X0E,0X1C,0X38,0XF8,0X21,0X03,0X84,0X00,
0X00,0X00,0X80,0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X80,0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X10,0X00,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X10,0X00,0X08,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X39,0XC3,0X8B,0X0E,0X1C,0X06,0X1C,0X59,0X80,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X12,0X24,0X4C,0X91,0X22,0X09,0X22,0X66,0X40,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X10,0X24,0X48,0X81,0X22,0X08,0X22,0X44,0X40,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X11,0XE4,0X48,0X8F,0X22,0X08,0X22,0X44,0X40,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X12,0X24,0X48,0X91,0X22,0X08,0X22,0X44,0X40,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X12,0X64,0X4C,0X93,0X22,0X09,0X22,0X44,0X40,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X99,0XA3,0X8B,0X0D,0X1C,0X46,0X1C,0X44,0X40,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
};
code unsigned char top[] = "^_^ 家電維修 ^_^ ";
code unsigned char li0[] = " 二手回收";
code unsigned char li1[] = " 專業(yè)服務(wù)";
code unsigned char bottom[] = "TEL:404058326";
void DelayMS(uint x)
{
uchar t;
while(x--) for(t=0;t<120;t++);
}
//播放函數(shù)
void PlayMusic()
{
uint i=0,j,k;
while(SONG_LONG[i]!=0||SONG_TONE[i]!=0)
{ //播放各個(gè)音符,SONG_LONG 為拍子長度
for(j=0;j<SONG_LONG[i]*20;j++)
{
BEEP=~BEEP;
//SONG_TONE 延時(shí)表決定了每個(gè)音符的頻率
for(k=0;k<SONG_TONE[i]/3;k++);
}
DelayMS(10);
i++;
}
}
void timer0()
{
TMOD=0X01;
TH0=0XB8;
TL0=0X00;
TR0=1;
}
void t0() interrupt 1
{
EA=1;
ET0=1;//IE=0x82 //CPU???,CT0???
LCD_Init();
while(1)
{
LCD_Clear();
LCD_ShowImg(IMG);
delay1(65535);
LCD_Flash();
LCD_Clear();
LCD_ShowString(0,0,top);
delay1(10000);
LCD_ShowString(0,1,li0);
delay1(10000);
LCD_ShowString(0,2,li1);
delay1(10000);
LCD_ShowString(0,3,bottom);
LCD_Flash();
delay1(65535);
}
}
void main()
{
void timer0();
BEEP=0;
while(1)
{
PlayMusic(); //播放生日快樂
DelayMS(500); //播放完后暫停一段時(shí)間
}
TMOD=0X01;
TH0=0XB8;
TL0=0X00;
TR0=1;
EA=1;
ET0=1;//IE=0x82 //CPU???,CT0???
}
音樂文件;
目前只有音樂播放功能,LCD12864無法使用,請(qǐng)各位大神賜教1
|