📄 复件 demo2.c
字号:
else i=8;
strcpy(p, str_3[id]);
p = &M_D.list[i-3];
sprintf(p,"%u",x);
if (x <= 9)
{
M_D.list[i] = M_D.list[i-3];
M_D.list[i-1] = 0x2e;
M_D.list[i-2] = 0x30;
M_D.list[i-3] = 0x30;
goto Disp_1;
}
if (x <= 99)
{
M_D.list[i] = M_D.list[i-2];
M_D.list[i-1] = 0x2e;
M_D.list[i-2] = M_D.list[i-3];
M_D.list[i-3] = 0x30;
goto Disp_1;
}
else
{
M_D.list[i] = M_D.list[i-1];
M_D.list[i-1] = 0x2e;
}
Disp_1:
p = &M_D.list[i+1];
strcpy(p, str_3[id1]);
M_D.list[i+4] = 0xff;
p = M_D.list;
if (open) CW_PR(o_x, o_y, p);
}
/***************************************/
void Disp_msg(uint o_x, uchar o_y, uchar n)
{ uchar *p;
p = &Msg[n][0];
TXT_S(o_x, o_y, 1, p);
DOT_s(o_x*8-4, o_y-4, o_x*8+66, o_y+19, 1);
}
/***************MAX192********************/
void Max192(uchar i,uchar o_x,uchar o_y)
{ uchar j,k;
//uchar *p;
k=i;
for (j=0;j<=3;j++)
{ AD=k;
io_clock=0;
data_in=0;
io_cs=0;
AD<<=4;
AD|=0x8e;
for (i=0;i<8;i++){data_in=AD_7;_nop_();_nop_();_nop_();
io_clock=1;_nop_();_nop_();_nop_();
io_clock=0;_nop_();_nop_();_nop_();
AD<<=1;}
_nop_();_nop_();io_cs=1;//
AD=0;
for (i=0;i<=32;i++){;};
io_cs=0;_nop_();_nop_();_nop_();
io_clock=1;_nop_();_nop_();
io_clock=0;_nop_();_nop_();_nop_();
AD_1=data_out;
_nop_();io_clock=1;_nop_();_nop_();
io_clock=0;_nop_();_nop_();
AD_0=data_out;_nop_();
Adend=0;
for (i=0;i<8;i++) {Adend<<=1;
io_clock=1;_nop_();_nop_();_nop_();
io_clock=0;_nop_();_nop_();_nop_();
Adend_0=data_out;}
_nop_();_nop_();io_cs=1;
Adend_8=AD_0;Adend_9=AD_1;
if ((o_x!=0)&&(o_y!=0)) Adend=Adend-AD_Value;
M_D.A_data[j]=Adend;
}
Adend=(M_D.A_data[0]+M_D.A_data[1]+M_D.A_data[2]+M_D.A_data[3])/4;
if (Adend>900) Adend=0;
AD=0;AD_0=Adend_8;AD_1=Adend_9;
data_in=1;io_clock=1;
if ((o_x==0)&&(o_y==0)) return;
Display(o_x,o_y,2,4,Adend,1);
}
/**************************************/
void disp_3(uchar O_X, uchar O_Y, uchar h_ox, uchar l_oy, uchar *p)
{ uchar i = 0,j = 0;
i = O_X; j = O_Y;
DOT_s(100, 62, 222, 216, 0);
while (*p != 0xff)
{
if (*p == 0xfe) {j = j + l_oy; *p++; i = O_X; continue;}
CCW2_PR(i, j, *p);
i = i+h_ox;
*p++;
}
//i = O_X - 2; j = O_Y + (menu*l_oy); CCW2_PR(i, j, 15);
//i = O_X; j = (O_Y / 8) + (menu*(l_oy / 8)); TXT_S(i, j, 0, p=TXT_1);
}
//**************菜单选择******************/
uchar choose(uchar O_X,uchar O_Y,uchar h_ox,uchar l_oy,uchar *p)
{
uchar i = 0, j = 0, n = 1;
//ZD();
//bit ok = 0;
i = O_X; j = O_Y;
//O_X = 100; O_Y = 70; k = 222;
disp_3(O_X, O_Y, h_ox, l_oy, p);
i = O_X - 2; j = O_Y + (menu * l_oy);
CCW2_PR(i, j, 15);
i = O_X; j = (O_Y / 8) + (menu*(l_oy / 8));
TXT_S(i, j, 0, p=TXT_1);
di:
do
{
read_time(1,1,1);
/*if (RS_input)
{
RS_input=0;
switch (RS_buf[0])
{
case 1: return(1);
case 2: return(2);
case 3: return(3);
case 4: return(4);
default: break;
}
}*/
i = RXD_c();
} while (!(i==1 || i==2 || i==3 || i==6 ));
switch(i)
{
case 1:
{
i = O_X - 2; j = O_Y + (menu * l_oy);
CCW2_PR(i, j, 23);
i = O_X; j = (O_Y / 8) + (menu*(l_oy / 8));
TXT_S(i, j, 0, p=TXT_2);
if(menu == 0) menu = 5;
else menu--;
i = O_X; j = (O_Y / 8) +( menu*(l_oy / 8));
TXT_S(i, j, 0, p=TXT_1);
i = O_X - 2; j = O_Y + (menu * l_oy);
CCW2_PR(i, j, 15);
} break;
case 2:
{
i = O_X - 2; j = O_Y + (menu * l_oy);
CCW2_PR(i, j, 23);
i = O_X; j = (O_Y / 8) + (menu*(l_oy / 8));
TXT_S(i, j, 0, p=TXT_2);
if(menu == 5) menu = 0;
else menu++;
i = O_X; j = (O_Y / 8) + (menu*(l_oy / 8));
TXT_S(i, j, 0, p=TXT_1);
i = O_X - 2; j =O_Y + (menu * l_oy);
CCW2_PR(i, j, 15);
} break;
case 3: return(menu + 1); break;
case 6:
{
TXD_c(14); TXD_c(2);
do
{
i = RXD_c();
} while (i == 6);
TXD_c(13);TXD_c(3);
} break;
default: break;
}
goto di;
}
/**********************/
/* 西文子程序函数 */
/**********************/
void CW_PR(uint O_X, uint O_Y, uchar *p)
{
uchar i;
uint j;
i = PARA;
j = i*O_Y + O_X;
wcadd1 = 0x46; /* CSRW 代码 */
wdadd1 = j % 256; /* 设置光标地址CSR */
wdadd1= j / 256;
wcadd1 = 0x4c; /* CSRDIR 代码 */
wcadd1 = 0x42; /* MWRITE 代码 */
while (*p != 0xff)
{
wdadd1=*p++; /* 写入数据 */
}
}
void CW_PR1(uint O_X, uint O_Y, uchar p)
{
uchar i;
uint j;
i = PARA;
j = i*O_Y + O_X;
wcadd1 = 0x46; /* CSRW 代码 */
wdadd1 = j % 256; /* 设置光标地址CSR */
wdadd1 = j / 256;
wcadd1 = 0x4c; /* CSRDIR 代码 */
wcadd1 = 0x42; /* MWRITE 代码 */
wdadd1 = p; /* 写入数据 */
}
/************************/
/* 初始化子程序函数 */
/************************/
void INT_1()
{ uchar i;
uchar code *p;
wcadd1=0x40; /* SYSTEM SET代码 */
for (i=0; i<8; i++)
{
wdadd1 = SYSTAB[i]; /* 写入参数 */
}
wcadd1=0x44; /* SCROLL代码 */
for(i=0; i<10; i++)
{
wdadd1 = SCRTAB[i]; // 写入参数
}
wcadd1 = 0x5a; // HDOT SCR 代码
wdadd1 = 0x00; // 设置参数P1
wcadd1 = 0x5b; // OVLAY 代码
wdadd1 = 0x01; // 设置参数:显示一,三区为文本属性
CLEAR(); // 调清屏子程序
wcadd1 = 0x59; // 显示状态设置
wdadd1 = 0x54; // 设置参数:显示一~四区开显示
wcadd1 = 0x5d; // 设光标形状
wdadd1 = 0x05;
wdadd1 = 0x87; // 块状
Io8155 = 0x0e; // C为0x02入,0x0e出
Io8155_c = 0x3f;
p = 0xfd00;
i = *p;
if (i == 0xff)
{
i = 0x31;
AD_Value = i;
save_data(p, i);
}
else AD_Value = i;
}
/*************************/
/* 清屏子程序函数 */
/*************************/
void CLEAR()
{ uint i, j;
wcadd1 = 0x4c; /* CSRDIR 代码 */
wcadd1 = 0x46; /* CSRW 代码 */
wdadd1 = 0x00; /* 设置参数光标指针低8位 */
wdadd1 = 0x00; /* 设置参数光标指针高8位 */
wcadd1 = 0x42; /* MWRITE 代码 */
for(j=0; j<560; j++) /*清64K的显示存储器*/
{
for(i=0; i<40; i++) /*写入一行*/
{
wdadd1 = 0x00; /* 写入数据 */
}
}
}
/************************/
/* CGRAM子程序函数 */
/************************/
void CGRAM()
{ uchar i,j;
wcadd1 = 0x5c; /* CGRAMADR 代码 */
wdadd1 = 0x00; /* 设置SAG=0x7000 */
wdadd1 = 0x70;
wcadd1 = 0x46; /* CSRW 代码 */
wdadd1 = 0x00; /* 设置CSR=0x7400(字符代码=80H) */
wdadd1 = 0x74;
wcadd1 = 0x4c; /* CSRDIR 代码 */
wcadd1 = 0x42; /* MWRITE 代码 */
for(j=0; j<=2; j++)
{
for(i=0; i<32; i++)
{
wdadd1 = CGTAB1[j][i]; /* 写入字模数据 */
}
}
}
/***************************/
/* 写汉字子程序(文本)函数 */
/***************************/
void TXT_S(uchar O_X, uchar O_Y, bit c, uchar *disp)
{
while ((*disp!=0xff) && (*disp!=0xfe))
{
if (c) CCW2_PR(O_X, O_Y, *disp);
else CCW1_PR(O_X, O_Y, *disp);
O_X += 2;
*disp ++;
}
}
/******/
/*画框*/
/******/
void DOT_s(uint o_x1, uint o_y1, uint o_x2, uint o_y2, bit c)
{ uint i;
i = o_x1;
while (i != o_x2) { W_DOT(i, o_y1); i++;}
i = o_y1;
while (i != o_y2) { W_DOT(o_x2, i); i++;}
i = o_x2;
while (i != o_x1) { W_DOT(i, o_y2); i--;}
i = o_y2;
while (i != o_y1) { W_DOT(o_x1,i ); i--;}
if (c) return;
i = o_x2 - 1; o_y2++; o_x1--;
while (i != o_x1) { W_DOT(i, o_y2); i--;}
i = o_y2;
while (i != o_y1) { W_DOT(o_x1, i); i--;}
i = o_x2 - 2; o_y2++; o_x1--;
while (i != o_x1) { W_DOT(i, o_y2); i--;}
i = o_y2; o_y1++;
while (i != o_y1) { W_DOT(o_x1, i); i--;}
}
/**********************/
/*文本方式显示单个汉字*/
/**********************/
void CCW1_PR(uchar O_X,uchar O_Y,uchar code_l)
{ uint i,j;
i = PARA;
j=i*O_Y + O_X;
wcadd1 = 0x4f; /* CSRDIR 代码(下移) */
wcadd1 = 0x46; /* CSRW 代码 */
wdadd1 = j%256; /* 设置光标地址 */
wdadd1 = j / 256;
wcadd1 =0x42; /* MWRITE 代码 */
wdadd1 = code_l; /* 写入汉字代码 */
wdadd1 = code_l + 1; /* 写入汉字代码 */
j++;
wcadd1 = 0x46; /* CSRW 代码 */
wdadd1 = j%256; /* 设置光标地址 */
wdadd1 = j / 256;
wcadd1 = 0x42; /* MWRITE 代码 */
wdadd1 = code_l + 2; /* 写入汉字代码 */
wdadd1 = code_l + 3; /* 写入汉字代码 */
}
/***************************/
/* 写汉字子程序(图形)函数 */
/***************************/
void CCW2_PR(uchar O_X,uchar O_Y,uchar code_l)
{ uchar count1;
uint i,j,a = 0;
i = PARA;
j = i*O_Y + O_X + 0x3000; /* 显示一区所控制的显示屏行数 如为320240屏k=j*O_Y+O_X+0x04ce*/
wcadd1 =0x4f; /* CSRDIR 代码(下移) */
for(i=0; i<2; i++)
{
wcadd1 = 0x46; /* CSRW 代码 */
wdadd1 = j % 256; /* 设置光标地址CSR */
wdadd1 = j / 256;
wcadd1 = 0x42; /* MWRITE 代码 */
for(count1=i*16; count1<16*(i+1); count1++)
{
wdadd1=CGTAB[code_l][count1]; /* 写入数据 */
}
j = j + 1;
}
}
/********************************/
/* 写汉字子程序(图形)函数 24*24 */
/*********************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -