📄 lcd.c
字号:
*a=0x0f;
write_command();
}
else if (help1_down==1)
{
SetDAdress(AC3+7);
*a=0x0f;
write_command();
}
}
}
asm (" NOP ");
asm (" NOP ");
if(key_a==0x00 && (menuhelp==1 || menuhelp==2 || menuhelp==3) && help1_down==0)
{
menuhelp=0;
Initial_menu0();
}
else if(key_a==0x00 && (menuhelp==4 || menuhelp==5 || menuhelp==6) && help1_down==0)
{
menuhelp=0;
Initial_menu1();
}
if(key_a==0x00 && help1_down==1)
{
switch(menuhelp)
{
case 1 : help1=1;
help1_down=0;
Experience1();
asm(" NOP ");
asm(" NOP ");
asm(" NOP ");
break;
case 2 : help1=1;
help1_down=0;
Experience2();
asm(" NOP ");
asm(" NOP ");
asm(" NOP ");
break;
case 3 : help1=1;
help1_down=0;
Experience3();
asm(" NOP ");
asm(" NOP ");
asm(" NOP ");
break;
case 4 : help1=1;
help1_down=0;
//Experience4();
asm(" NOP ");
asm(" NOP ");
asm(" NOP ");
break;
case 5 : help1=1;
help1_down=0;
//Experience5();
asm(" NOP ");
asm(" NOP ");
asm(" NOP ");
break;
case 6 : help1=1;
help1_down=0;
///Experience6();
asm(" NOP ");
asm(" NOP ");
asm(" NOP ");
break;
}
}
}
}
void gdram_intial(unsigned char *DPTR0)
{
gdram_cur_x=0;
gdram_cur_y=0;
temp=gdram_cur_x;
setup_expand_mode();
for(j=0;j<32;j++)
{
for(i=0;i<8;i++)
{
R0=*DPTR0;
DPTR0++;
R1=*DPTR0;
DPTR0++;
gdram_write_word(R0,R1);
gdram_cur_x++;
}
gdram_cur_x=temp;
gdram_cur_y++;
}
gdram_cur_x=8;
gdram_cur_y=0;
temp=gdram_cur_x;
for(j=0;j<32;j++)
{
for(i=0;i<8;i++)
{
R0=*DPTR0;
DPTR0++;
R1=*DPTR0;
DPTR0++;
gdram_write_word(R0,R1);
gdram_cur_x++;
}
gdram_cur_x=temp;
gdram_cur_y++;
}
*a=0x36;
write_command();
}
//设定垂直或水平地址
void set_gdram_addr(unsigned int addr)
{
*a=addr|0x80;
write_command();
}
//绘图函数
void gdram_draw(void)
{
gdram_cur_x=0;
gdram_cur_y=0;
gdram_disp();
}
//画图函数
void gdram_disp(void)
{
for(n=0;n<128;n++)
{
gdram_cur_y=DataAd50[n];
gdram_cur_x=n/16;
l=n%16;
if(l<8)
{
Databack[DataAd50[n]+1][n/8]=Databack[DataAd50[n]+1][n/8]|Binary[l];
Databack[DataAd50[n]][n/8]=Binary[l]|Databack[DataAd50[n]][n/8];
}
else if(l>=8 && l<16)
{
l=l-8;
Databack[DataAd50[n]+1][(n/16)*2+1]=Databack[DataAd50[n]+1][(n/16)*2+1]|Binary[l];
Databack[DataAd50[n]][(n/16)*2+1]=Databack[DataAd50[n]][(n/16)*2+1]|Binary[l];
}
}
DPTR=&Databack[0][0];
gdram_intial(DPTR);
}
//向液晶发送数据
void gdram_write_word(unsigned int fir_word,int unsigned sec_word)
{
set_gdram_addr(gdram_cur_y);
set_gdram_addr(gdram_cur_x);
*data=fir_word;
write_data();
*data=sec_word;
write_data();
}
//设定扩展模式
void setup_expand_mode(void)
{
*a=0x34;
write_command();
}
//中断子函数
interrupt void timer()
{
int *DataAd50_1=(int *)0x110;
READAD50();
for(i=0;i<32;i++)
{
for(j=0;j<16;j++)
{
Databack[i][j]=0x0;
}
}
for(k=0;k<128;k++)
{
DataAd50[k]=(1.0*(*DataAd50_1)/64.0)/32+16.00;
DataAd50_1++;
}
init_lcm();
ddram_clear();
//DPTR=&clear[0][0];
//gdram_intial(DPTR);
gdram_draw();
}
/*void display_led(void)
{
for(k=0;k<5;k++)
{
port8001=0xaa;
long_delay();
port8001=0x55;
long_delay();
}
for (k=0;k<5;k++)
{
port8001=0xff;
long_delay();
port8001=0x00;
long_delay();
}
}*/
void send_byte( unsigned char out_byte) //发送8位的控制指令
{
unsigned char i;
send_0();
for(i=0;i<8;i++)
{
if(out_byte&0x80)
{
send_1();
}
else
{
send_2();
}
out_byte=out_byte*2;
}
}
void write7279(unsigned int cmd,unsigned int dta)//向7279写控制指令及数据
{
unsigned char i;
unsigned int cmddata;
dta=(dta&0x00ff);
cmddata=((cmd<<8)|dta);
send_0();
for (i=0;i<16;i++)
{
if(cmddata&0x8000)
{
send_1();
}
else
{
send_2();
}
cmddata=cmddata*2;
}
send_end();
}
void long_delay(void) //长延时
{
unsigned char i,j;
for (i=0;i<0xff;i++)
{
for(j=0;j<0xeff;j++)
{}
}
}
void short_delay(void) //短延时
{
unsigned char i,j;
for(i=0;i<0x10;i++)
{ for(j=0;j<0x5ff;j++)
{}
}
}
interrupt void key_int() //按键中断服务子程序
{
asm(" SSBX INTM");
asm(" STM #0xFFFF, IFR ");
INT3_ISR();
key_b=*(unsigned char *)0x16;
if(key_b==0xff)
{
;
}
else
{
key_a=key_b;
write7279(DECODE1,key_a);
}
asm(" STM #0x104, IMR ");
asm(" RSBX INTM");
}
void Initial_menu(unsigned char *DPTR1)
{
//Turn off Display
*a=0x08;
write_command();
//Clear Ddram
*a=0x01;
write_command();
//Turn on Display
*a=0x0f;
write_command();
for(i=0;i<32;i++)
{
R2=*DPTR1;
DPTR1++;
R3=*DPTR1;
DPTR1++;
SetDCdata(R2,R3);
}
}
void Initial_menu0(void)
{
page=0;
down_key=0;
DPTR=&Menu0[0][0];
Initial_menu(DPTR);
//set address
SetDAdress(AC0);
*a=0x0f;
write_command();
}
void Initial_menu1(void)
{
//Turn off Display
*a=0x08;
write_command();
//Clear Ddram
*a=0x01;
write_command();
//Turn on Display
*a=0x0f;
write_command();
SetDAdress(AC1+2);
SetDCdata(0xd5,0xfd);
SetDCdata(0xd4,0xda);
SetDCdata(0xd7,0xd4);
SetDCdata(0xbc,0xec);
/*SetDAdress(AC2+2);
SetDCdata(0xd4,0xcb);
SetDCdata(0xd0,0xd0);
SetDCdata(0xd6,0xd0);*/
SetDAdress(AC2);
*a=0x0c;
write_command();
}
void Menuhelp1(void)
{
switch_key=5;
down_key=5;
help1_down=0;
DPTR=&Menu_help1[0][0];
Initial_menu(DPTR);
//set address
SetDAdress(AC3);
*a=0x0f;
write_command();
}
void Menuhelp2(void)
{
switch_key=5;
down_key=5;
help1_down=0;
DPTR=&Menu_help2[0][0];
Initial_menu(DPTR);
//set address
SetDAdress(AC3);
*a=0x0f;
write_command();
}
void Menuhelp3(void)
{
switch_key=5;
help1_down=0;
down_key=5;
DPTR=&Menu_help3[0][0];
Initial_menu(DPTR);
//set address
SetDAdress(AC3);
*a=0x0f;
write_command();
}
void Menuhelp4(void)
{
switch_key=5;
help1_down=0;
down_key=5;
DPTR=&Menu_help4[0][0];
Initial_menu(DPTR);
//set address
SetDAdress(AC3);
*a=0x0f;
write_command();
}
void Menuhelp5(void)
{
switch_key=5;
help1_down=0;
down_key=5;
DPTR=&Menu_help5[0][0];
Initial_menu(DPTR);
//set address
SetDAdress(AC3);
*a=0x0f;
write_command();
}
void Menuhelp6(void)
{
switch_key=5;
help1_down=0;
down_key=5;
DPTR=&Menu_help6[0][0];
Initial_menu(DPTR);
//set address
SetDAdress(AC3);
*a=0x0f;
write_command();
}
void SetDAdress(unsigned int Daddr)
{
*a=Daddr;
write_command();
}
void SetDCdata(unsigned int Ddata0,unsigned int Ddata1)
{
*data=Ddata0;
write_data();
// short_delay();
*data=Ddata1;
// short_delay();
write_data();
}
void Experience1(void)
{
key_a=0x22;
while (help1)
{
if(key_a==0x00)
{
help1=0;
}
else
{
port=port8000;
port8001=port;
SetDAdress(AC3);
*a=0x0f;
write_command();
}
}
}
void Experience2(void)
{
key_a=0x22;
OpenMcBSP();
Int();
while(help1)
{
if(key_a==0x00)
{
help1=0;
}
}
asm(" STM 0104h,IMR ");
asm(" RSBX INTM");
init_lcm();
ddram_clear();
}
void Experience3(void)
{
key_a=0x22;
while(help1)
{
if(key_a==0x00)
{
help1=0;
}
else
{
port8001=0x0a;
short_delay();
port8001=0x06;
short_delay();
port8001=0x05;
short_delay();
port8001=0x09;
short_delay();
}
}
port8001=0x00;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -