📄 可视听诊器设计.c
字号:
O_X=O_X/8;
k=O_X+0x0bf0-0x10*O_Y;
dat1=k%256;
dat2=k/256;
com=0x24;
PR1();
j=0x07-j;
com=j|0xf8; /* 位操作 */
PR12();
}
void DRAW(void)
{ uchar i,j=0;
unsigned int O_Y1;
uchar max=0;
for(i=0;i<5120;i++)
{if (RAM[i]>max) max=RAM[i];
}
average=max/2;
for(i=10;i>=5110;i++)
{a=0;
for(j=0;j==10;j++)
{ if(RAM[i+j]>=average)
a=1;
if(RAM[i-j]>=average)
a=1;}
if(a==0) RAM[i]=0;
}
CLEAR();
O_Y1=RAM[ram_wr]/bei_data;
for(i=0;i<128;i++)
{ O_X=i;
O_Y=RAM[ram_wr+lcd_step*i]/bei_data;
while(abs(O_Y-O_Y1)>8)
{ if(O_Y>O_Y1)
{O_Y=O_Y1+1;
O_Y1=O_Y;
W_DOT();}
else if(O_Y1>O_Y)
{O_Y=O_Y1-1;
O_Y1=O_Y;
W_DOT();}
}
O_Y1=O_Y;
W_DOT();
}
}
/****************************/
/* 写指令和写数据函数 */
/****************************/
PR1() /* 双字节参数指令写入入口 */
{ ST01();
cd=0; //数据通道
P0=0xff; //清一下电平
P0=dat1; /* 取第一参数单元数据 */
wr=0;
wr=1;
PR11();
}
PR11() /* 单字节参数指令写入入口 */
{ST01();
cd=0;
P0=0xff;
P0=dat2; /* 取第二参数单元数据 */
wr=0;
wr=1;
PR12();
}
PR12() /* 无参数指令代码写入入口 */
{ ST01();
cd=1; //指令通道
P0=0xff;
P0=com; /* 写入指令代码 */
wr=0;
wr=1;
}
/*******************************************/
/*读取lcd状态字 */
/******************************************/
uchar readstate(void)
{ uchar lcd_state;
P0=0xff;
cd=1;
rd=0;
lcd_state=P0&0xff; // 读取引脚A物理电平
rd=1; // /RD=1
return lcd_state;
}
/************************************************/
/* 判状态位S1,S0 函数(读写指令和读写数据状态) */
/************************************************/
void ST01(void)
{ while((readstate()&0x03)!=3) ; }
/************************************/
/* 判状态位S3函数(数据自动写状态) */
/************************************/
void ST3(void)
{ while((readstate()&0x08)!=8) ;}
/**************************/
/* ad 子程序 */
/**************************/
void DELAY(uchar x)
{ unsigned int i;
for(i=0;i<x;i++);
}
void adcck(void)
{ adcclk=1; DELAY(2);
adcclk=0; DELAY(2);
}
uchar readadc(void) /*获ad数据的函数 */
{uchar ch,i;
ch=0;
adccs=0; adcck(); ch=0;
for (;adcdo==1;) adcck();
for (i=0; i<8; i++)
{ adcck();
ch=(ch<<1)|adcdo;
}
adccs=1;
return(ch);
}
void adc(void)
{ adc_date=readadc();
}
/*****************************/
/* 显示开机画面 */
/*****************************/
display1()
{ code_1=0x05; /* 汉字写入显示波形回车确认*/
O_X=0x03;
O_Y=0x00;
CCW2_PR();
code_1=0x06;
O_X=0x05;
O_Y=0x00;
CCW2_PR();
code_1=0x07;
O_X=0x07;
O_Y=0x00;
CCW2_PR();
code_1=0x08;
O_X=0x09;
O_Y=0x00;
CCW2_PR();
code_1=0x10;
O_X=0x03;
O_Y=0x10;
CCW2_PR();
code_1=0x11;
O_X=0x05;
O_Y=0x10;
CCW2_PR();
code_1=0x0E;
O_X=0x07;
O_Y=0x10;
CCW2_PR();
code_1=0x0F;
O_X=0x09;
O_Y=0x10;
CCW2_PR();
}
/*****************************/
/* 显示选择图像画面 */
/*****************************/
display2()
{ code_1=0x00; /* 汉字写入:一采集*/
O_X=0x00;
O_Y=0x00;
CCW2_PR();
code_1=0x1a;
O_X=0x03;
O_Y=0x00;
CCW2_PR();
code_1=0x1b;
O_X=0x07;
O_Y=0x00;
CCW2_PR();
code_1=0x01; /* 汉字写入:二显示*/
O_X=0x00;
O_Y=0x10;
CCW2_PR();
code_1=0x05;
O_X=0x03;
O_Y=0x10;
CCW2_PR();
code_1=0x06;
O_X=0x07;
O_Y=0x10;
CCW2_PR();
code_1=0x02; /* 汉字写入:三通讯*/
O_X=0x00;
O_Y=0x20;
CCW2_PR();
code_1=0x0c;
O_X=0x03;
O_Y=0x20;
CCW2_PR();
code_1=0x0d;
O_X=0x07;
O_Y=0x20;
CCW2_PR();
code_1=0x21; /* 汉字写入:四退出*/
O_X=0x00;
O_Y=0x30;
CCW2_PR();
code_1=0x1f;
O_X=0x03;
O_Y=0x30;
CCW2_PR();
code_1=0x20;
O_X=0x07;
O_Y=0x30;
CCW2_PR();
com=0x9f; // 显示状态设置,1001ABCD,本处为闪烁,显示,文本显示,图形显示
PR12();
com=0xa7; //光标形状,10100ABC,形状为8点(列)*ABC行
PR12();
dat1=0x00; // 光标地址水平位置
dat2=0x01; // 光标地址垂直位置
com=0x21;
PR1();
}
/*****************************/
/* 显示光标 纵向移*/
/****************************/
display4()
{ com=0x9f; /* 显示状态设置 */
PR12();
com=0xa7;
PR12(); //光标形状8*7
dat1=0x00;
com=0x21; // 光标地址设置
PR1(); //注意这里的dat2可能以包含在主调程序中
}
/*****************************/
/* 显示采集中画面 */
/*****************************/
display5()
{ CLEAR();
CCW2_PR();
code_1=0x1a; /* 汉字写入:采*/
O_X=0x03;
O_Y=0x10;
CCW2_PR();
code_1=0x1b; /* 汉字写入:集*/
O_X=0x07;
O_Y=0x10;
CCW2_PR();
code_1=0x03; /*实际有残留的“讯”字,所以写空以消除*/
O_X=0x07;
O_Y=0x20;
CCW2_PR();
code_1=0x03; /*实际有残留的“讯”字,所以写空以消除*/
O_X=0x07;
O_Y=0x30;
CCW2_PR();
com=0x9f; // 显示状态设置,1001ABCD,本处为闪烁,显示,文本显示,图形显示
PR12();
com=0xa7; //光标形状,10100ABC,形状为8点(列)*ABC行
PR12();
dat1=0x09; // 光标地址水平位置
dat2=0x11; // 光标地址垂直位置
com=0x21;
PR1();
}
/*****************************/
/* 显示通讯中画面 */
/*****************************/
display6()
{ CLEAR();
CCW2_PR();
code_1=0x0c; /* 汉字写入:通*/
O_X=0x03;
O_Y=0x10;
CCW2_PR();
code_1=0x0d; /* 汉字写入:讯*/
O_X=0x07;
O_Y=0x10;
CCW2_PR();
code_1=0x03; /*实际有残留的“讯”字,所以写空以消除*/
O_X=0x07;
O_Y=0x20;
CCW2_PR();
code_1=0x03; /*实际有残留的“讯”字,所以写空以消除*/
O_X=0x07;
O_Y=0x30;
CCW2_PR();
com=0x9f; // 显示状态设置,1001ABCD,闪烁,显示,文本显示,图形显示
PR12();
com=0xa7; //光标形状,10100ABC,形状为8点(列)*ABC行
PR12();
dat1=0x09; // 光标地址水平位置
dat2=0x11; // 光标地址垂直位置
com=0x21;
PR1();
}/*****************************/
/*键扫描程序*/
/*****************************/
void delay(void)
{ unsigned char i;
for(i=200;i>0;i--){}
}
//扫描键值
unsigned char scankey(void)
{ unsigned char key,key1,keypush;
P1=0xFF; //清一下P1口
if ((P1&0x3F)!=0x3F) //有键按下
{ delay();
if ((P1&0x3F)!=0x3F)
{ keypush=P1&0x3F;
do
{ key1=P1&0x3F;
}while(key1!=0x3F);
key=keypush;
}
else return 0;
}
else return 0;
return(key);
}
void scan(void)
{ keyvalue=scankey();
}
/********************************/
/*通讯子程序*/
/********************************/
tongxun()
{uchar i;
CLEAR();
display6(); //显示通讯画面
TCON=0x05;
TMOD=0x20;
PCON=0;
TH1=0xE6;
TL1=0xE6;
TR1=1;
SCON=0X50;
for(i=0;i<5120,TI=1;i++)
{ ACC=RAM[i];
SBUF=ACC;
TI=0;
}
}
exit()
{CLEAR();
display10();
do //等待S6确定
{scan();
}while (keyvalue!=0x1f);
}
display10()
{ code_1=0x1c; /* 汉字写入谢谢使用*/
O_X=0x03;
O_Y=0x10;
CCW2_PR();
code_1=0x1c;
O_X=0x05;
O_Y=0x10;
CCW2_PR();
code_1=0x1d;
O_X=0x07;
O_Y=0x10;
CCW2_PR();
code_1=0x1e;
O_X=0x09;
O_Y=0x10;
CCW2_PR();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -