📄 shipsysfunc.c
字号:
void show_data(double print,uchar hang,uchar lie,uchar wei);//第i行第j列开始显示,显示wei个数,格式为科学计数法或小数
void show_bfs(double print,uchar hang,uchar lie,uchar wei);//第i行第j列开始显示,显示wei个数,格式为百分数(0~1)
void write_data(uint datas,uchar i,uchar j);
void write_char (uchar word_data[16],uchar hang,uchar lie ) //对LCD进行字符写入
{//hang 1-4 ,lie1-16
uchar i;
uchar lie1;
if(hang<=4&&lie<=16)
{
if(lie<=8)
for(i=0;i<16;i++)
{
if(i%2==0)
{
_nop_();
setlstartx(strat_xaddr+2*hang-2);//设置行1
setlstarty(strat_yaddr+8*lie-8+i/2);//设置列
lcdlwrite(word_data[i]);
}
else
{
_nop_();
setlstartx(strat_xaddr+2*hang-1);//设置行1
setlstarty(strat_yaddr+8*lie-8+i/2);//设置列
lcdlwrite(word_data[i]);
}
_nop_();
}
else
{
lie1=lie-8;
for(i=0;i<16;i++)
{
if(i%2==0)
{
_nop_();
setrstartx(strat_xaddr+2*hang-2);//设置行1
setrstarty(strat_yaddr+8*lie1-8+i/2);//设置列
lcdrwrite(word_data[i]);
}
else
{
_nop_();
setrstartx(strat_xaddr+2*hang-1);//设置行1
setrstarty(strat_yaddr+8*lie1-8+i/2);//设置列
lcdrwrite(word_data[i]);
}
_nop_();
}
}
}
else
_nop_();
}
/* 对LCD进行汉字字符串写入*/
void write_string(uchar word_data2[],uchar hang,uchar lie,uchar word_len)
{
uchar i,j,lie1;
uchar index;
uchar buffer[16];
index=(hang-1)*16 +(lie-1);
for (i=0;i<word_len;i++)//最多显示64个字符
{
for(j=0;j<16;j++)
buffer[j]= word_data2[i*16+j];
if((index+i)<64)//不超出显示范围
{
if(i+lie>16&&i+lie<=32)
{
lie1=i+lie-16;
write_hanzi(buffer,hang+1,lie1);
}
else if(i+lie>32&&i+lie<=48)
{
lie1=i+lie-32;
write_hanzi(buffer,hang+2,lie1);
}
else if(i+lie>48&&i+lie<=64)
{
lie1=i+lie-48;
write_hanzi(buffer,hang+3,lie1);
}
else
{
lie1=i+lie;
write_hanzi(buffer,hang,lie1) ;
}
}
else
break;
}
}
/* 对LCD进行汉字字符写入*/
void write_hanzi(uchar word_datas1[32], uchar hang,uchar lie )
{
uchar i;
uchar lie1;
if(hang<=4&&lie<=8)
{
if(lie<=4)
for(i=0;i<32;i++)
{
if(i%2==0)
{
_nop_();
setlstartx(strat_xaddr+2*hang-2);//设置行1
setlstarty(strat_yaddr+16*lie-16+i/2);//设置列
lcdlwrite(word_datas1[i]);
}
else
{
_nop_();
setlstartx(strat_xaddr+2*hang-1);//设置行1
setlstarty(strat_yaddr+16*lie-16+i/2);//设置列
lcdlwrite(word_datas1[i]);
}
_nop_();
}
else
{
lie1=lie-4;
for(i=0;i<32;i++)
{
if(i%2==0)
{
_nop_();
setrstartx(strat_xaddr+2*hang-2);//设置行1
setrstarty(strat_yaddr+16*lie1-16+i/2);//设置列
lcdrwrite(word_datas1[i]);
}
else
{
_nop_();
setrstartx(strat_xaddr+2*hang-1);//设置行1
setrstarty(strat_yaddr+16*lie1-16+i/2);//设置列
lcdrwrite(word_datas1[i]);
}
_nop_();
}
}
}
else
_nop_();
}
/*对LCD进行汉字字符串写入*/
void write_chinese(uchar word_datas2[],uchar hang,uchar lie,uchar word_len)
{
uchar i,j,lie1;
uchar index;
uchar buffer[32];
index=(hang-1)*8 +(lie-1); //第一个汉字的 index(qian mian kong chu de ge shu)
for (i=0;i<word_len;i++)//最多显示32个汉字
{
for(j=0;j<32;j++)//每个汉字有32个数据
{
buffer[j]= word_datas2[i*32+j];
}
if((index+i)<=32)//不超出显示范围
{
if(i+lie>8&&i+lie<=16)
{
lie1=i+lie-8;
write_hanzi(buffer,hang+1,lie1);
}
else if(i+lie>16&&i+lie<=24)
{
lie1=i+lie-16;
write_hanzi(buffer,hang+2,lie1);
}
else if(i+lie>24&&i+lie<=32)
{
lie1=i+lie-24;
write_hanzi(buffer,hang+3,lie1);
}
else
{
lie1=i + lie;
write_hanzi(buffer,hang,lie1) ;
}
}
else
break;
}
}
void write_datas(uint datas,uchar i,uchar j)//第i行第j列开始显示;注:data的值0~9之间
{
if(datas<10)
{
switch(datas)
{
case 0:
write_char(shuzi0,i,j);
break;
case 1:
write_char(shuzi1,i,j);
break;
case 2:
write_char(shuzi2,i,j);
break;
case 3:
write_char(shuzi3,i,j);
break;
case 4:
write_char(shuzi4,i,j);
break;
case 5:
write_char(shuzi5,i,j);
break;
case 6:
write_char(shuzi6,i,j);
break;
case 7:
write_char(shuzi7,i,j);
break;
case 8:
write_char(shuzi8,i,j);
break;
case 9:
write_char(shuzi9,i,j);
break;
}
}
else
_nop_();
}
void show_data(double print,uchar hang,uchar lie,uchar wei)
{
long printz;
bit biaozhi;
uint m=0;
uint counter=0;
biaozhi=0;
if(print>=10000||print<=0.0001)//科学计数法
{ if(print>=10)
{
biaozhi=1;
for(;;)
{
print=print/10;
counter++;
if(print<10)
break;
else
_nop_();
}
}
else if(print<1&&print>0)
{
for(;;)
{
print=print*10;
counter++;
if(print>=1)
break;
else
_nop_();
}
}
else if(print>=1&&print<10)
biaozhi=1;
else
_nop_();
for(m=0;m<=wei;m++)
{
if(m==1)
_nop_();
else
{
printz=(long)(print);
printz=printz%10;
write_data(printz,hang,lie+m);
print=print*10;
}
}
write_string(dian,hang,lie+1);
write_string(space,hang,lie+wei+1);
write_string(exp,hang,lie+wei+2);
if(biaozhi==0)
write_string(fuhao,hang,lie+wei+3);
else
write_string(space,hang,lie+wei+3);
write_data(counter,hang,lie+wei+4);
}
else//小数表示
{
if(print>=10)
{
for(;;)
{
print=print/10;
counter++;
if(print<10)
break;
else
_nop_();
}
}
for(m=0;m<=wei;m++)
{
if(m==counter+1&&m!=wei)
write_string(dian,hang,lie+counter+1);
else
{
printz=(long)(print);
printz=printz%10;
write_data(printz,hang,lie+m);
print=print*10;
}
}
}
}
void show1(double print,uchar hang,uchar lie,uchar wei)//百分数
{
long printz;
bit biaozhi;
uint m=0;
uint counter=0;
biaozhi=0;
if(print<1&&print>0)
{
print=print*100;
if(print>=10)
{
biaozhi=1;
print=print/10;
}
for(m=0;m<=wei;m++)
{
if(m==1&&biaozhi==0)
_nop_();
else if(m==2&&biaozhi==1)
_nop_();
else
{
printz=(long)(print);
printz=printz%10;
write_datas(printz,hang,lie+m);
print=print*10;
}
}
if(biaozhi==0)
write_char(dian,hang,lie+1);
else
write_char(dian,hang,lie+2);
write_char(baifenhao,hang,lie+wei+1);
}
else
_nop_();
}
/*void write_data(uint datas,uchar i,uchar j)//第i行第j列开始显示;注:data的值0~9之间
{
if(datas<10)
{
switch(datas)
{
case 0:
write_string(shuzi0,i,j);
break;
case 1:
write_string(shuzi1,i,j);
break;
case 2:
write_string(shuzi2,i,j);
break;
case 3:
write_string(shuzi3,i,j);
break;
case 4:
write_string(shuzi4,i,j);
break;
case 5:
write_string(shuzi5,i,j);
break;
case 6:
write_string(shuzi6,i,j);
break;
case 7:
write_string(shuzi7,i,j);
break;
case 8:
write_string(shuzi8,i,j);
break;
case 9:
write_string(shuzi9,i,j);
break;
}
}
else
_nop_();
}
*/
//数值的液晶显示
/*void show_data(double print,uchar hang,uchar lie,uchar wei)
{
long printz;
bit biaozhi;
uint m=0;
uint counter=0;
biaozhi=0;
if(print>=10000||print<=0.0001)//科学计数法
{ if(print>=10)
{
biaozhi=1;
for(;;)
{
print=print/10;
counter++;
if(print<10)
break;
else
_nop_();
}
}
else if(print<1&&print>0)
{
for(;;)
{
print=print*10;
counter++;
if(print>=1)
break;
else
_nop_();
}
}
else if(print>=1&&print<10)
biaozhi=1;
else
_nop_();
for(m=0;m<=wei;m++)
{
if(m==1)
_nop_();
else
{
printz=(long)(print);
printz=printz%10;
write_data(printz,hang,lie+m);
print=print*10;
}
}
write_string(dian,hang,lie+1);
write_string(space,hang,lie+wei+1);
write_string(exp,hang,lie+wei+2);
if(biaozhi==0)
write_string(fuhao,hang,lie+wei+3);
else
write_string(space,hang,lie+wei+3);
write_data(counter,hang,lie+wei+4);
}
else//小数表示
{
if(print>=10)
{
for(;;)
{
print=print/10;
counter++;
if(print<10)
break;
else
_nop_();
}
}
for(m=0;m<=wei;m++)
{
if(m==counter+1&&m!=wei)
write_string(dian,hang,lie+counter+1);
else
{
printz=(long)(print);
printz=printz%10;
write_data(printz,hang,lie+m);
print=print*10;
}
}
}
}
*/
/*void show_bfs(double print,uchar hang,uchar lie,uchar wei)//百分数(0~1)
{
long printz;
bit biaozhi;
uint m=0;
uint counter=0;
biaozhi=0;
if(print<1&&print>0)
{
print=print*100;
if(print>=10)
{
biaozhi=1;
print=print/10;
}
for(m=0;m<=wei;m++)
{
if(m==1&&biaozhi==0)
_nop_();
else if(m==2&&biaozhi==1)
_nop_();
else
{
printz=(long)(print);
printz=printz%10;
write_data(printz,hang,lie+m);
print=print*10;
}
}
if(biaozhi==0)
write_string(dian,hang,lie+1);
else
write_string(dian,hang,lie+2);
write_string(baifenhao,hang,lie+wei+1);
}
else
_nop_();
}
*/
//数值的液晶显示
void show_data(double print,uchar hang,uchar lie,uchar wei,bit key_dot)
{
long printz;
bit biaozhi;
uint m=0;
uint counter=0;
biaozhi=0;
if(print>=1000||print<=0.001)//科学计数法
{ if(print>=10)
{
biaozhi=1;
for(;;)
{
print=print/10;
counter++;
if(print<10)
break;
else
_nop_();
}
}
else if(print<1&&print>0)
{
for(;;)
{
print=print*10;
counter++;
if(print>=1)
break;
else
_nop_();
}
}
else if(print>=1&&print<10)
biaozhi=1;
else
_nop_();
for(m=0;m<=wei;m++)
{
if(m==1)
_nop_();
else
{
printz=(long)(print);
printz=printz%10;
write_data(printz,hang,lie+m,key_dot);
print=print*10;
}
}
if(key_dot==0)
{
write_string(dian,hang,lie+1);
write_string(space,hang,lie+wei+1);
write_string(exp,hang,lie+wei+2);
if(biaozhi==0)
write_string(fuhao,hang,lie+wei+3);
else
write_string(space,hang,lie+wei+3);
}
else
{
write_string2(dian2,hang,lie+1);
write_string2(space2,hang,lie+wei+1);
write_string2(exp2,hang,lie+wei+2);
if(biaozhi==0)
write_string2(fuhao2,hang,lie+wei+3);
else
write_string2(space2,hang,lie+wei+3);
}
write_data(counter,hang,lie+wei+4,key_dot);
}
else//小数表示
{
if(print>=10)
{
for(;;)
{
print=print/10;
counter++;
if(print<10)
break;
else
_nop_();
}
}
for(m=0;m<wei;m++)
{
if(m==counter+1&&m!=wei-1)
{
if(key_dot==0)
write_string(dian,hang,lie+counter+1);
else
write_string2(dian2,hang,lie+counter+1);
}
else if(m==counter+1&&m==wei-1)
_nop_();
else
{
printz=(long)(print);
printz=printz%10;
write_data(printz,hang,lie+m,key_dot);
print=print*10;
}
}
}
}
uint read_ad(void)
{//1549
uchar i;
uint ad_rec=0x0000;
ad_cs=0;
delay(10);
for(i=0;i<10;i++)
{
ad_clk=0;
delay(2);
if(ad_in==1)
ad_rec++;
else
_nop_();
if(i<9)
ad_rec=ad_rec<<1;
delay(2);
ad_clk=1;
}
ad_clk=0;
ad_cs=1;
return ad_rec;
}
void da_write(uint da_data)
{//5618
uchar i;
//uint DA_DATA = da_data << 4; //将数据有效位移至高10位存储。
uint DA_DATA = da_data+49152;
da_cs = 0;
for(i=0;i<=15;i++)
{
da_clk = 0;
if((da_data & 0x8000) == 0x8000)
{
da_out = 1;
}
else
{
da_out = 0;
}
da_clk = 1;
da_data = da_data << 1;
}
da_clk = 0;
da_cs = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -