?? lcd.c
字號:
#include "spce061.h"
#include "global.h"
#include "LCD.h"
/////////////////lcd control/////////////////
#define lcd_busy 0x2000
#define setb_req 0x4000
#define reset 0x7fff
uint re;
const uint number[][14]=
{
0x00,0x1C,0x36,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x36,0x1C,0x00,//0
0x00,0x0C,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x00,//1
0x00,0x3E,0x63,0x63,0x03,0x03,0x06,0x0C,0x18,0x30,0x60,0x60,0x7F,0x00,//2
0x00,0x3E,0x63,0x63,0x03,0x03,0x3E,0x03,0x03,0x03,0x63,0x63,0x3E,0x00,//3
0x00,0x06,0x06,0x0E,0x1E,0x16,0x26,0x26,0x66,0x7F,0x06,0x06,0x06,0x00,//4
0x00,0x7F,0x60,0x60,0x60,0x7E,0x63,0x03,0x03,0x03,0x63,0x63,0x3E,0x00,//5
0x00,0x3E,0x63,0x63,0x60,0x60,0x7E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00,//6
0x00,0x7F,0x03,0x06,0x06,0x0C,0x0C,0x0C,0x18,0x18,0x18,0x18,0x18,0x00,//7
0x00,0x3E,0x63,0x63,0x63,0x63,0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00,//8
0x00,0x3E,0x63,0x63,0x63,0x63,0x63,0x3F,0x03,0x03,0x63,0x63,0x3E,0x00, //9
0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00, //:
};
void write_data(uint date) //write a date
{
uint i;
PABUF=PABUF&(~setb_req);
date&=0xff;
while(PA&lcd_busy);//接lcd的req腳
PABUF&=0xff00;
PABUF|=date;
PABUF|=setb_req;
i=PA&lcd_busy;
if(i==lcd_busy)
i=0;
else
i=1;
while(i)
{
i=PA&lcd_busy;
if(i==lcd_busy)
i=0;
else
i=1;
}
PABUF&=(~setb_req);
}
void clrscreen()
{
write_data(0xf4);
}
void displayscreen(uint *p,uint type)
{
uint i=0x00;
uint j=0xffff;
draw_pic(p,type);
for(;i<=0x48;i++)
{
write_data(0xf5);
while(j--);
j=0xffff;
}
}
void draw_pic(uint *pp,uint type)
{
uint i;
uint j;
uint buf;
uint *p_buf;
uint k=0xffff;
uint *p=pp;
if(type==0)
{
for(j=0x8;j<0x48;j++)
{
for(i=0x2;i<0x12;i++)
{
write_data(0xf3);
write_data(i);
write_data(j);
buf=*p++;
if(re)
buf=~buf;
write_data(buf);
}
clrWatchDog();
}
}
else if(type==1)
{
p_buf=p;
for(j=8;j<0x48;j+=3)
{
for(i=0x02;i<0x12;i++)
{
write_data(0xf3);
write_data(i);
write_data(j);
buf=*p++;
if(re)
buf=~buf;
write_data(buf);
}
clrWatchDog();
p+=32;
}
while(k--);
k=0xffff;
p=p_buf+16;
for(j=0x01;j<0x40;j+=3)
{
for(i=0x04;i<0x14;i++)
{
write_data(0xf3);
write_data(i);
write_data(j);
buf=*p++;
if(re)
buf=~buf;
write_data(buf);
}
clrWatchDog();
p+=32;
}
while(k--);
k=0xffff;
p=p_buf+32;
for(j=0x02;j<0x40;j+=3)
{
for(i=0x04;i<0x14;i++)
{
write_data(0xf3);
write_data(i);
write_data(j);
buf=*p++;
if(re)
buf=~buf;
write_data(buf);
}
clrWatchDog();
p+=32;
}
}
}
void initLCD()
{
uint i=1000;
PB&=reset;
while(i--);
PB|=~(reset);
clrscreen();
}
void dispnumber(uint xaddr,uint yaddr,uint date)
{
uint z1;
uint i;
uint *p=number[date];
xaddr+=4;
yaddr*=16+1;
z1=yaddr+14;
for(;yaddr<z1;yaddr++)
{
write_data(0xf3);
write_data(xaddr);
write_data(yaddr);
i=*p;
if(re)
i=~i;
p++;
write_data(i);
}
}
void dispwavetype(uint xaddr,uint yaddr,uint wavetype)
{
if(wavetype==NONE)
{
write_word(xaddr,yaddr,0xceb4);
write_word(xaddr,yaddr+1,0xd6aa);
write_word(xaddr,yaddr+2,0xb2a8);
}
else if(wavetype==AM)
{
write_word(xaddr,yaddr,0xb5f7);
write_word(xaddr,yaddr+1,0xb7f9);
write_word(xaddr,yaddr+2,0xb2a8);
}
else if(wavetype==FM)
{
write_word(xaddr,yaddr,0xb5f7);
write_word(xaddr,yaddr+1,0xc6b5);
write_word(xaddr,yaddr+2,0xb2a8);
}
else if(wavetype==TM)
{
write_word(xaddr,yaddr,0xb5f7);
write_word(xaddr,yaddr+1,0xd6c6);
write_word(xaddr,yaddr+2,0xb2a8);
}
else if(wavetype==OM)
{
write_word(xaddr,yaddr,0xc6e4);
write_word(xaddr,yaddr+1,0xcbfb);
write_word(xaddr,yaddr+2,0xb2a8);
}
}
void write_word(uint xaddr,uint yaddr,uint date)
{
uint high=date/256-0xa0;
uint low=date%256-0xa0;
xaddr+=2;
yaddr+=1;
write_data(0xf0);
write_data(xaddr);
write_data(yaddr);
write_data(high);
write_data(low);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -