📄 menu.c
字号:
#include "menu.h"
uchar code MONSCREEN[] ={' ',' ',' ','M','O','N',' ','N','U','M','B','E','R',':',' '};
uchar code VIDEOMODEL[]={' ',' ',' ','V','I','D','E','O',' ','T','Y','P','E',':',' '};
uchar code SELECTNTSC[]={'N','T','S','C'};
uchar code SELECTPAL[] ={'P','A','L',' '};
void delay(unsigned char time)
{
unsigned char i,j;
for(i=0;i<255;i++)
{
for(j=0;j<time;j++);
}
}
void Send_1byte(uchar byte_data1)
{
uchar j;
CLK=(bit)1;
EA=0;
CS=0;
for(j=0;j<8;j++)
{
SDATA =(bit)(byte_data1 & 0x80) ;
CLK=(bit)0;
byte_data1<<=1;
CLK=(bit)1;
}
CS=1;
EA=1;
}
void FunSend16Bit(uint sddata)
{
uchar i,s_char1,s_char2;
s_char1=(sddata/256);
s_char2=(sddata%256);
CLK=(bit)1;
EA=0;
CS=0;
for(i=0;i<8;i++)
{
SDATA =(bit)(s_char1 & 0x80) ;
CLK=(bit)0;
s_char1<<=1;
CLK=(bit)1;
}
for(i=0;i<8;i++)
{
SDATA =(bit)(s_char2 & 0x80) ;
CLK=(bit)0;
s_char2<<=1;
CLK=(bit)1;
}
CS=1;
EA=1;
}
uchar get_char()
{
char ch;
ch=Rxbuf[readRxcnt];
readRxcnt++;
if(readRxcnt>=inlen)
readRxcnt=0;
EA=0;
if(readRxcnt==writeRxcnt)
bRxEmpty=0;
EA=1;
return ch;
}
void FunDispData(unsigned char disp_data,bit b_flash)
{
if(b_flash)
{FunSend16Bit(0xc200|character_list[disp_data]);}
else
{FunSend16Bit(0xc000|character_list[disp_data]);}
}
void FunInitInter6464A(void)
{
unsigned char temp;
FunSend16Bit(EXIT_TEST); /*退出测试模式*/
Send_1byte(CLR_RAM); /*清空6464A的显示RAM*/
delay(10);
temp=PAL;
if(temp)
{Send_1byte(VIDIOMODE_PAL);} /*视频模式选择PAL/NTSC PAL-N PAL-M SCAREAM */
else
{Send_1byte(VIDIOMODE_NTSC);}
//Send_1byte(VIDIOMODE_PAL); /*视频模式选择PAL/NTSC PAL-N PAL-M SCAREAM */
Send_1byte(INTEROSC_OPEN); /*内部模式,晶振打开*/
Send_1byte(OSC4X_OPEN); /*四倍晶振打开CLOSE*/
Send_1byte(INTERBLUESCREEN);
Send_1byte(CHARBLACKFRAME);
FunSend16Bit(CTRL_LIGHT);
Send_1byte(DISP_CTRLOPEN);
if(temp)
{FunSend16Bit(COOR_POSIZION); }
else
{FunSend16Bit(NTSC_POSIZION); }
// FunSend16Bit(WRITE_POSITION);
/*
for(i=0;i<15;i++)
{
FunSend16Bit((0xc000|character_list[MONSCREEN[i]]));
}
FunSend16Bit(0xc000);
FunSend16Bit(0xc000);
FunSend16Bit(0xc000|((1/10)&0xff));
FunSend16Bit(0xc000|(1%10));
for(i=0;i<5;i++)
{
FunSend16Bit((0xc010));
}
for(i=0;i<15;i++)
{
FunSend16Bit((0xc000|character_list[VIDEOMODEL[i]]));
}
for(i=0;i<4;i++)
{
FunSend16Bit((0xc200|character_list[SELECTPAL[i]]));
}
*/
}
void FunInitExt6464A(void)
{
unsigned char temp;
FunSend16Bit(EXIT_TEST);
Send_1byte(CLR_RAM);
// Send_1byte(VIDIOMODE_PAL);
temp=PAL;
if((temp))
Send_1byte(VIDIOMODE_PAL); /*视频模式选择PAL/NTSC PAL-N PAL-M SCAREAM */
else
{Send_1byte(VIDIOMODE_NTSC);}
Send_1byte(EXTOSC_OPEN);
Send_1byte(DISP_CTRLOPEN);
Send_1byte(CHARBLACKFRAMEEXT);
//FunSend16Bit(COOR_POSIZION);
if(temp)
{FunSend16Bit(COOR_POSIZION); }
else
{FunSend16Bit(NTSC_POSIZION); }
}
void cpu_init(void)
{
SCON=0x50; /*22.1184MHz,baud=19.2k*/
//PCON=0x80; /*SMOD=1*/
TMOD=0x21;
TH1=0xfd;
TL1=0xfd;
TR1=1;ET1=0;ES=1;
}
void FunSetPosition(unsigned char cPositionx,unsigned char cPositiony)
{
unsigned int cPosition;
cPosition=cPositionx<<5 | cPositiony | 0x8800;
FunSend16Bit(cPosition);
}
void init(void)
{
unsigned char i,j;
for(i=0;i<0xff;i++)
{for(j=0;j<0xff;)j++;}
WDI();
readTxcnt=0;
writeTxcnt=0;
readRxcnt=0;
writeRxcnt=0;
bTxEmpty=0; //0:empty 1:unempty
bRxEmpty=0;
c_status=0;
bInMenu=0;
CS_NORMAL();
// FunInitInter6464A();//2004.7.28 add
//CS_MENU();
cpu_init();
}
void FunProcessRec(void)
{
unsigned char temp;
bit b_blink;
switch(c_status)
{
case 0:
temp=get_char();
rec_row=temp & 0xf;
temp=temp & 0xf0;
if(temp==0x90){c_status=1;}
break;
case 1:
temp=get_char();
rec_col=temp& 0x1f;
temp=temp & 0xe0;
if(temp==0xa0){c_status=2;if(bInMenu==0){bInMenu=1;CS_MENU();FunInitInter6464A();}}
else{c_status=0;}
break;
case 2:
temp=get_char();
if(temp==0x84){FunInitExt6464A();c_status=0;CS_NORMAL();bInMenu=0;}
else if(temp==0x85){FunSetPosition(0,0);c_status=3;b_blink=0;}//display command
else if(temp==0x87){c_status=4;b_blink=1;}//flash command
else if(temp==0x86){c_status=4;b_blink=0;}//unflash command
else{c_status=0;}
break;
case 3:
temp=get_char();
//put_char(temp);
if(temp==0x84){c_status=0;}
else
{
FunDispData(temp,b_blink);
}
break;
case 4:
temp=get_char();
FunSetPosition(rec_row,rec_col);
FunDispData(temp,b_blink);
c_status=0;
break;
default :
c_status=0;
break;
}
}
void main()
{
// unsigned char i,j;
EA=0;
init();
EA=1;
//FunInitInter6464A();
WDI();
/*
for(i=0;i<12;i++)
{
for(j=0;j<24;j++)
FunDispData('A',0);
WDI();
}*/
while(1)
{
if(bRxEmpty)
{
FunProcessRec();
}
WDI();
}
}
void serial_interrupt() interrupt 4
{
if(TI)
{
TI=0;
if(writeTxcnt!=readTxcnt)
{
SBUF=Txbuf[readTxcnt];
readTxcnt++;
if(readTxcnt==olen)
readTxcnt=0;
bTxEmpty=1;
}else{bTxEmpty=0;}
}
if(RI)
{
RI=0;
Rxbuf[writeRxcnt]=SBUF;
writeRxcnt++;
if(writeRxcnt==inlen)
writeRxcnt=0;
// if(readRxcnt==writeRxcnt){put_char(0x55);bRxFull=1;}
bRxEmpty=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -