📄 ctl_muen_240128.c
字号:
#include <AT89X51.H>
#include <intrins.h>
#include <math.h>
extern unsigned char read_from(void);
extern void write_2_code(unsigned char a,unsigned char b,unsigned char c);
extern void write_1_code(unsigned char a,unsigned char c);
extern void write_code(unsigned char c);
extern void write_to(unsigned char a);
extern void lcm_start(void);
extern void cls_lcm(void);
extern void delay(unsigned int a);
enum KEY{key_start,key_up,key_down,key_left,key_right};
struct MENU{
unsigned char ID;
unsigned char class_id;
unsigned char up_id;
unsigned char down_id;
unsigned char chinese_id[2];
unsigned char x1,y1,x2,y2;
};
code struct MENU menu_lis[10]={
0,0,255,1,2,3,1,2,3,2,
1,1,0,2,8,9,1,24,3,24,
2,1,0,255,8,9,1,44,3,44,
3,1,0,2,8,9,1,65,3,65,
4,2,1,255,8,9,7,23,9,23,
5,2,1,3,8,9,7,45,9,45,
6,2,1,255,8,9,7,67,9,67,
7,3,2,255,8,9,14,45,16,45,
8,0,255,1,4,5,7,2,9,2,
9,1,0,255,6,7,7,24,9,24
};
unsigned char count_time=0,id=0,key=0,up_down_key=0;
unsigned char code tab_ascii[][16]={0,0
};
unsigned char code tab_chinese[][32]={
0x00,0x80,0x3E,0x90,0x02,0xA0,0x12,0x48,0x0C,0x50,0x08,0x20,0x1F,0xF0,0x20,0x2E,
0xCF,0xF4,0x08,0x20,0x08,0x20,0x0F,0xE0,0x04,0x40,0x02,0x88,0x7F,0xFC,0x00,0x00,
/**--0--*以上为"登"的点阵*/
0x00,0x10,0x3F,0xF8,0x00,0x10,0x00,0x10,0x1F,0xF0,0x00,0x10,0x00,0x14,0xFF,0xFE,
0x01,0x08,0x11,0x10,0x09,0xA0,0x05,0x40,0x09,0x20,0x11,0x1E,0x65,0x04,0x02,0x00,
/**--1--*以上为"录"的点阵*/
0x10,0x40,0x10,0x20,0x13,0xFE,0x12,0x02,0xFC,0x54,0x10,0x88,0x15,0x04,0x18,0x00,
0x30,0x08,0xD3,0xFC,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x24,0x57,0xFE,0x20,0x00,
/**--2--*以上为"控"的点阵*/
0x04,0x04,0x24,0x04,0x25,0x04,0x3F,0xA4,0x24,0x24,0x44,0xA4,0xFF,0xE4,0x04,0x24,
0x3F,0xA4,0x24,0xA4,0x24,0xA4,0x24,0x84,0x26,0x84,0x25,0x04,0x04,0x14,0x04,0x08,
/**--3--*以上为"制"的点阵*/
0x08,0x00,0x0A,0x7C,0xFF,0x48,0x08,0x50,0x7E,0x58,0x08,0x44,0xFF,0x64,0x08,0x58,
0x11,0x50,0x3F,0xF0,0xD1,0x10,0x11,0x10,0x11,0x10,0x11,0x50,0x11,0x20,0x01,0x00,
/**--4--*以上为"帮"的点阵*/
0x02,0x20,0x3F,0x20,0x22,0x20,0x22,0x24,0x23,0xFE,0x3E,0x24,0x22,0x24,0x22,0x24,
0x3E,0x24,0x22,0x24,0x22,0x44,0x22,0x44,0x2F,0x44,0xF0,0x84,0x41,0x28,0x02,0x10,
/**--5--*以上为"助"的点阵*/
0x10,0x10,0x08,0x18,0x04,0x20,0x04,0x48,0x7F,0xFC,0x01,0x00,0x01,0x00,0x01,0x04,
0xFF,0xFE,0x01,0x00,0x02,0x80,0x02,0x80,0x04,0x40,0x08,0x30,0x30,0x0E,0xC0,0x04,
/**--6--*以上为"关"的点阵*/
0x00,0x10,0x3F,0xF8,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,
/**--7--*以上为"于"的点阵*/
0x04,0x40,0x04,0x44,0xFF,0xFE,0x04,0x40,0x00,0x38,0x3F,0xC0,0x12,0x10,0x09,0x20,
0x01,0x04,0xFF,0xFE,0x03,0x80,0x05,0x40,0x09,0x30,0x11,0x0E,0x61,0x04,0x01,0x00,
/**--8--*以上为"菜"的点阵*/
0x10,0x10,0x08,0x20,0x04,0x48,0x3F,0xFC,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,
0x21,0x08,0x3F,0xF8,0x21,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,
/**--9--*以上为"单"的点阵*/
};
void delay_1ms(unsigned int dd)
{unsigned char ii;
while(dd--)for(ii=0;ii<125;ii++);
}
void ascii_show(unsigned char x,unsigned char y,bit show_mode,unsigned char ascii)
{
unsigned char i ;
unsigned int startaddr ;
startaddr=(y)*30+x ;
for(i=0;i<16;i++)
{
write_2_code((unsigned char)(startaddr),(unsigned char)(startaddr>>8),0x24);
if(show_mode)
write_1_code(tab_ascii[ascii][i],0xc4);
else write_1_code(~tab_ascii[ascii][i],0xc4);
startaddr=startaddr+30 ;
}
}
void chinese_show(unsigned char x,unsigned char y,bit show_mode,unsigned int hzcode)
{
unsigned char i ;
unsigned int startaddr ;
startaddr=(y)*30+x ;
for(i=0;i<16;i++)
{
write_2_code((unsigned char)(startaddr),(unsigned char)(startaddr>>8),0x24);
if(show_mode)
{ write_1_code(tab_chinese[hzcode][i*2],0xc0);
write_1_code(tab_chinese[hzcode][i*2+1],0xc4);
}
else
{write_1_code(~tab_chinese[hzcode][i*2],0xc0);
write_1_code(~tab_chinese[hzcode][i*2+1],0xc4);
}
startaddr=startaddr+30 ;
}
}
void show_pixel(unsigned int x,unsigned int y,bit mode)
{
unsigned int startaddr=0 ;
unsigned char dat ;
startaddr=y*30+x/8 ;
dat=0xf0+7-x%8 ;
if(mode)dat=dat|0x08 ;
write_2_code((unsigned char)(startaddr),(unsigned char)(startaddr>>8),0x24);
write_code(dat);
}
void show_line(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,bit mode)
{
unsigned char x,y ;
double k,b ;
if(abs(y1-y2)<=abs(x1-x2))
{
k=(float)(y2-y1)/(float)(x2-x1);
b=y1-k*x1 ;
if(x1<=x2)
{
for(x=x1;x<=x2;x++)
{
y=k*x+b ;
show_pixel(x,y,mode);
}
}
else
{
for(x=x2;x<=x1;x++)
{
y=k*x+b ;
show_pixel(x,y,mode);
}
}
}
else
{
k=(float)(x2-x1)/(float)(y2-y1);
b=x1-k*y1 ;
if(y1<=y2)
{
for(y=y1;y<=y2;y++)
{
x=k*y+b ;
show_pixel(x,y,mode);
}
}
else
{
for(y=y2;y<=y1;y++)
{
x=k*y+b ;
show_pixel(x,y,mode);
}
}
}
}
void circle(unsigned char x0,unsigned char y0,unsigned char Rx, bit s)
{
unsigned int xx,rr,xt,yt,rs,row,col;
yt=Rx;
rr=Rx*Rx+1; //补偿 1 修正方形
rs=(yt+(yt>>1))>>1; //(*0.75)分开1/8圆弧来画
for (xt=0;xt<=rs;xt++)
{
xx=xt*xt;
while ((yt*yt)>(rr-xx))yt--;
row=x0+xt; //第一象限
col=y0-yt;
show_pixel(row,col,s);
row=x0-xt; //第二象限
show_pixel(row,col,s);
col=y0+yt; //第三象限
show_pixel(row,col,s);
row=x0+xt; //第四象限
show_pixel(row,col,s);
/***************45度镜象画另一半***************/
row=x0+yt; //第一象限
col=y0-xt;
show_pixel(row,col,s);
row=x0-yt; //第二象限
show_pixel(row,col,s);
col=y0+xt; //第三象限
show_pixel(row,col,s);
row=x0+yt; //第四象限
show_pixel(row,col,s);
}
}
//--------to draw the square in the lcm--------------//
void draw_fill_Square(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,bit mode)
{
unsigned char ii,jj;
for(ii=y1;ii<abs(y2);ii++)
{
for(jj=x1;jj<abs(x2);jj++)
show_pixel(jj,ii,mode);
}
}
//----------the function is -----------//
void draw_empty_Square(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,bit mode)
{
show_line(x1,y1,x2,y1,mode);
show_line(x2,y1,x2,y2,mode);
show_line(x1,y2,x2,y2,mode);
show_line(x1,y1,x1,y2,mode);
}
//-----------draw the ascii anti----//
void ASCII_Anti(unsigned char x,unsigned char y)
{
unsigned char temp;
unsigned int startaddr;
unsigned char ii;
startaddr=y*30+x;
for(ii=0;ii<16;ii++)
{
write_2_code((unsigned char)(startaddr),(unsigned char)(startaddr>>8),0x24);
write_code(0xc5);
temp=read_from();
temp=~temp;
write_1_code(temp,0xc0);
startaddr+=30;
}
}
//---------the function is chang the chinese to anti----------//
void chinese_anti(unsigned char x,unsigned char y)
{
ASCII_Anti(x,y);
ASCII_Anti(x+1,y);
}
void login(void)
{
unsigned char ii;
unsigned char x1;
delay(100);
delay(100);
lcm_start();
cls_lcm();
draw_empty_Square(40,10,200,30,1);
draw_empty_Square(45,30,195,100,1);
draw_empty_Square(53,60,187,75,1);
chinese_show(11,12,1,0);
chinese_show(17,12,1,1);
x1=56;
for(ii=0;ii<10;ii++)
{
delay(200);delay(200);delay(200);
draw_fill_Square(x1,63,x1+11,73,1);
x1+=13;
delay(200);delay(200);delay(200);
}
delay_1ms(500);
cls_lcm();
//-------show the start menu----------//
draw_empty_Square(1,0,239,20,1);
chinese_show(1,2,1,2);
chinese_show(3,2,1,3);
chinese_show(7,2,1,4);
chinese_show(9,2,1,5);
}
//-----------text the function--------------------//
void text(void)
{
TMOD=0X01;
TH0=0X3C;
TL0=0XB0;
EA=1;
ET0=1;
id=0;
login();
TR0=1;
while(1)
{
switch(key)
{
case key_right:
switch(id)
{
case 0:
case 2:
id=8;
//---del id=0
chinese_show(1,2,1,2);
chinese_show(3,2,1,3);
draw_fill_Square(0,22,52,104,0);
//---biuld id=8
chinese_show(7,2,0,4);
chinese_show(9,2,0,5);
draw_empty_Square(52,22,102,42,1);
//-------creat the menu list
chinese_show(menu_lis[9].x1,menu_lis[9].y1,1,menu_lis[9].chinese_id[0]);
chinese_show(menu_lis[9].x2,menu_lis[9].y2,1,menu_lis[9].chinese_id[1]);
break;
case 8:
//----del id=8
chinese_show(7,2,1,4);
chinese_show(9,2,1,5);
draw_fill_Square(52,22,104,44,0);
//----built id =0
chinese_show(1,2,0,2);
chinese_show(3,2,0,3);
draw_empty_Square(0,22,50,102,1);
//----ceat the chinese
chinese_show(menu_lis[1].x1,menu_lis[1].y1,1,menu_lis[1].chinese_id[0]);
chinese_show(menu_lis[1].x2,menu_lis[1].y2,1,menu_lis[1].chinese_id[1]);
chinese_show(menu_lis[2].x1,menu_lis[2].y1,1,menu_lis[2].chinese_id[0]);
chinese_show(menu_lis[2].x2,menu_lis[2].y2,1,menu_lis[2].chinese_id[1]);
chinese_show(menu_lis[3].x1,menu_lis[3].y1,1,menu_lis[3].chinese_id[0]);
chinese_show(menu_lis[3].x2,menu_lis[3].y2,1,menu_lis[3].chinese_id[1]);
id=1;
break;
case 1:
id=5;
draw_empty_Square(52,22,102,63,1);
//--- id =1
chinese_show(menu_lis[1].x1,menu_lis[1].y1,1,menu_lis[1].chinese_id[0]);
chinese_show(menu_lis[1].x2,menu_lis[1].y2,1,menu_lis[1].chinese_id[1]);
//-------- id =4
chinese_show(menu_lis[4].x1,menu_lis[4].y1,0,menu_lis[4].chinese_id[0]);
chinese_show(menu_lis[4].x2,menu_lis[4].y2,0,menu_lis[4].chinese_id[1]);
chinese_show(menu_lis[5].x1,menu_lis[5].y1,1,menu_lis[5].chinese_id[0]);
chinese_show(menu_lis[5].x2,menu_lis[5].y2,1,menu_lis[5].chinese_id[1]);
break;
case 5:
id=3;
draw_empty_Square(104,42,155,63,1);
//--- id =5
chinese_show(menu_lis[5].x1,menu_lis[5].y1,1,menu_lis[5].chinese_id[0]);
chinese_show(menu_lis[5].x2,menu_lis[5].y2,1,menu_lis[5].chinese_id[1]);
//-------- id =7
chinese_show(menu_lis[7].x1,menu_lis[7].y1,0,menu_lis[7].chinese_id[0]);
chinese_show(menu_lis[7].x2,menu_lis[7].y2,0,menu_lis[7].chinese_id[1]);
break;
case 3:
id=0;
draw_empty_Square(52,65,102,85,1);
//--- id =5
chinese_show(menu_lis[3].x1,menu_lis[3].y1,1,menu_lis[3].chinese_id[0]);
chinese_show(menu_lis[3].x2,menu_lis[3].y2,1,menu_lis[3].chinese_id[1]);
//-------- id =7
chinese_show(menu_lis[6].x1,menu_lis[6].y1,0,menu_lis[6].chinese_id[0]);
chinese_show(menu_lis[6].x2,menu_lis[6].y2,0,menu_lis[6].chinese_id[1]);
break;
default :break;
}
break;
case key_left:
switch(id)
{
case 0:
case 2:
break;
case 8:
break;
case 4:
case 5:
break;
case 7:
break;
default :break;
}
break;
case key_up:
switch(id)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 5:
break;
default :break;}
break;
case key_down:
switch(id)
{
case 0:
break;
case 1:
break;
case 2:
break;
case 4:
break;
case 8:
break;
default:break;
}
break;
/*case 0:
chinese_show(7,2,1,4);
chinese_show(9,2,1,5);
draw_empty_Square(52,22,102,42,0);
chinese_anti(1,2);
chinese_anti(3,2);
draw_empty_Square(0,22,50,102,1);
break;
case 1:
chinese_show(1,2,1,2);
chinese_show(3,2,1,3);
draw_empty_Square(0,22,50,102,0);
chinese_anti(7,2);
chinese_anti(9,2);
draw_empty_Square(52,22,102,42,1);
break;
*/
default :break;
}
}
}
void t0(void) interrupt 1 using 2
{
count_time++;
if(count_time==15)
{
count_time=0;
key++;
if(key>10)key=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -