|
发表于 2007-10-17 08:44:44
|
显示全部楼层
回162楼:就是将AD转换得到的值根据大小显示在屏上,也就是说最小值0点亮最下面的一个点,最大值255(AD转换左对齐取高字节)点亮最上面的一个点,屏幕纵向一共64个点,每4个值共用一个点。
这是计算点的位置并显示的程序 写得比较乱,主要篇幅都放在划两点之间的连线上了
void wave_print(void)//输出显示波形
{
unsigned char i,j,k,kk,l,m,mm;
j=255-adcd[0]; //adcd[100]为转换得到的100个值
k=j>>5; //计算页地址
l=(j>>2)%8;
m=(1<<l); //计算点的位置
for(i=1;i<=100;i++)
{
j=255-adcd[i-1];
kk=j>>5; //计算页地址
l=(j>>2)%8;
mm=(1<<l); //计算点的位置
lcd_print(0,i,0x01); //清屏
lcd_print(1,i,0x00); //lcd_print(x,y,z),x为行地址y为列地址z为值
lcd_print(2,i,0x00);
lcd_print(3,i,0x00);
lcd_print(4,i,0x00);
lcd_print(5,i,0x00);
lcd_print(6,i,0x00);
lcd_print(7,i,0x80);
if(k==kk) //画两点间的连线
{
k=kk;
if(m==mm)
{
m=mm;
lcd_print(k,i,m);
}
else if(m>mm)
{
m-=mm;
lcd_print(k,i,m);
}
else
{
m=mm-m;
m=m<<1;
lcd_print(k,i,m);
}
m=mm;
}
else if(k>kk)
{
lcd_print(k,i,0xff+m);
lcd_print(kk,i,-mm);
switch(k-kk)
{
case(7):
lcd_print(kk+6,i,0xff);
case(6):
lcd_print(kk+5,i,0xff);
case(5):
lcd_print(kk+4,i,0xff);
case(4):
lcd_print(kk+3,i,0xff);
case(3):
lcd_print(kk+2,i,0xff);
case(2):
lcd_print(kk+1,i,0xff);
case(1):
break;
}
k=kk;
m=mm;
}
else
{
lcd_print(kk,i,0xff+mm+mm);
lcd_print(k,i,0-m-m);
switch(kk-k)
{
case(7):
lcd_print(k+6,i,0xff);
case(6):
lcd_print(k+5,i,0xff);
case(5):
lcd_print(k+4,i,0xff);
case(4):
lcd_print(k+3,i,0xff);
case(3):
lcd_print(k+2,i,0xff);
case(2):
lcd_print(k+1,i,0xff);
case(1):
break;
}
k=kk;
m=mm;
}
}
_delay_ms(100);
} |
|