#include <string.h>
#include "44b.h"
#include "44blib.h"
#include "def.h"
#include "typDef.h"
#include "lcdlib.h"
#include "glib.h"
#define N 400 //设置输出显示的采样点数
extern void KB_Start(void); //键盘扫描程序,在kb函数库中
int key; //设置变量key用于存储键值
int high,low; //用于存储卡线的纵坐标值
void Main(void)
{
int i,j,k,m,n,p; //设置变量i用于循环计数,j,k用于暂存卡线坐标,m用于调整波形放缩比例,n用于调整波形上下移幅度,p用于改变采样点位置,以实现波形的左右移
int a[N],b[N]; //a数组用于存放原始波形,b数组用于存放由控制信号处理过的波形
ChangePllValue(PLL_M,PLL_P,PLL_S);
Port_Init();
Uart_Init(0,115200);
Uart_Select(0);
Lcd_Init(256);
Glib_Init(256);
KB_Start();
p=0;
m=4;
n=40;
key=0;
high=190;
low=50; //设置各个变量的初值
while(1) //不断的循环,实现波形的长期显示
{
if(key==0) //0键功能
{
Glib_ClearScr(255); //刷液晶屏,用于显示新的信息
Glib_Line(0,120,320,120,0); //画中轴
windows(); //调用子程序1,画网格
}
for(i=0;i<N;i++) //进行采样
{
a[i]=ReadAdc(0); //采样AD信号,存入a数组
Delay(1);
if(key!=1&&key!=2&&key!=3&&key!=4&&key!=5&&key!=6&&key!=7&&key!=8&&key!=9&&key!=10&&key!=11&&key!=12&&key!=15) //检查是按键0
{
b[i]=ReadAdc(0); //若键0按下,采样AD信号,存入b数组
Delay(1);
}
}
for(i=0;i<N;i++) //若有其他键按下,检查按键
{if(key==1||key==2||key==3||key==4||key==5||key==6||key==7||key==8||key==9||key==12)
{
Glib_Line(0,120,320,120,0); //画中轴
Glib_Line(i,b[i]/m+n,i+1,b[i+1]/m+n,192);//显示波形
}
else if(key == 0)
Glib_Line(i,a[i]/4+40,i+1,a[i+1]/4+40,192);
}
if(key==15) //设置一个虚拟键值,用于画中轴
Glib_Line(0,120,320,120,0); //画中轴
if(key==2) //显示卡尺
{ windows2(); //画横线
Glib_Line(0,high,320,high,128);//画高卡线
Glib_Line(0,low,320,low,128);//画低卡线
}
if(key==3) //转换卡尺
{ j=low;
k=high;
high=j;
low=k; //卡尺的各个线互换
key=2;
}
if(key==4) //卡尺向上移
{
Glib_Line(0,high,320,high,255);
high=high+5; //高值加5
Glib_Line(0,high,320,high,128);
key=2;
}
if(key==5) //卡尺向下移
{
Glib_Line(0,high,320,high,255);
high=high-5; //高值减5
Glib_Line(0,high,320,high,128);
key=2;
}
if(key==6) //波形上移
{
for(i=0;i<N;i++)
{
Glib_Line(i,b[i]/m+n,i+1,b[i+1]/m+n,255); //删除当前设置波形
}
n=n+5; //上移加5
for(i=0;i<N;i++)
{ Glib_Line(i,b[i]/m+n,i+1,b[i+1]/m+n,192); //显示新波形
key=1; //跳出
}
}
if(key==7) //波形下移,原理同上
{
for(i=0;i<N;i++)
{
Glib_Line(i,b[i]/m+n,i+1,b[i+1]/m+n,255);
}
n=n-5;
for(i=0;i<N;i++)
{Glib_Line(i,b[i]/m+n,i+1,b[i+1]/m+n,192);
key=1;
}
}
if(key==8) //波形缩小
{for(i=0;i<N;i++)
{
Glib_Line(i,b[i]/m+n,i+1,b[i+1]/m+n,255);
}
m=m+1; //波形缩小比例加1
for(i=0;i<N;i++)
{
Glib_Line(i,b[i]/m+n,i+1,b[i+1]/m+n,192);
key=1;
}
}
if(key==9) //波形放大,原理同上
{
for(i=0;i<N;i++)
{
Glib_Line(i,b[i]/m+n,i+1,b[i+1]/m+n,255);
}
m=m-1;
for(i=0;i<N;i++)
{
Glib_Line(i,b[i]/m+n,i+1,b[i+1]/m+n,192);
Key=1
}
}
if(key==10) //波形右移
{
for(i=0;i<N;i++)
{
Glib_Line(i,b[i+p]/m+n,i+1,b[i+1+p]/m+n,255);
}
p=p+1; //改变采样点
for(i=0;i<N;i++)
{
Glib_Line(i,b[i+p]/m+n,i+1,b[i+1+p]/m+n,192);
}
key=15;
}
if(key==11) //波形左移,原理同上
{
for(i=0;i<N;i++)
{
Glib_Line(i,b[i+p]/m+n,i+1,b[i+1+p]/m+n,255);
}
p=p-1;
for(i=0;i<N;i++)
{
Glib_Line(i,b[i+p]/m+n,i+1,b[i+1+p]/m+n,192);
}
key=15;
}
if(key==12) //卡尺值显示
{
if(low>high)
Uart_Printf("\nhigh=%3d,low=%3d",low,high);
else
Uart_Printf("\nhigh=%3d,low=%3d",high,low);
key=2;
}
}
}
windows() //子程序1画网格
{
Lcd_Init(256);
Glib_Init(256);
Glib_Line(0,40,320,40,50);
Glib_Line(0,80,320,80,50);
Glib_Line(0,120,320,120,50);
Glib_Line(0,160,320,160,50);
Glib_Line(0,200,320,200,50);
Glib_Line(40,0,40,240,50);
Glib_Line(80,0,80,240,50);
Glib_Line(120,0,120,240,50);
Glib_Line(160,0,160,240,50);
Glib_Line(200,0,200,240,50);
Glib_Line(240,0,240,240,50);
Glib_Line(280,0,280,240,50);
}
windows2() //子程序2画网格的横线
{
Lcd_Init(256);
Glib_Init(256);
Glib_Line(0,40,320,40,50);
Glib_Line(0,80,320,80,50);
Glib_Line(0,120,320,120,50);
Glib_Line(0,160,320,160,50);
Glib_Line(0,200,320,200,50);
}