uint32 speed(void)
{
uint32 Time;
uint32 SpeedValue;
PINSEL0 = 0x00050005;
PINSEL1 = 0x14000000;
IO0DIR = 0x02000000;
IO1DIR = 0x003f0000;
// 硬件输入输出接口初始化
T0TC = 0;
//定时器设置为0
T0PR = 0;
//时钟不分频
while((IOPIN&0x00000004) != 0); //等待p0.4低电平脉冲信号
T0TCR = 0x01;
//启动定时器0
while((IOPIN&0x00000004) == 0)
while((IOPIN&0x00000004) != 0);
//等待p0.4下一个低电平脉冲信号
T0TCR = 0x00;
Time = T0TC;
Time = Time/FPclk;
//记录脉冲宽度
SpeedValue = 1/Time*60;
//计算速度每分钟多少转
return SpeedValue;
}
显示部分子程序及解释如下:
/*-显示器初始化-*/
void init_LCD (void)
{
IO1CLR = rst;//rst=0;
delay(50);
IO1SET = rst;//rst=1;
IO1SET = cs1;//cs1=1;
IO1SET = cs2;//cs2=1;
wr_lcd (comm,disp_off); //#define comm 0 关显示
//#define disp_off 0x3e
wr_lcd (comm,disp_on);
//#define disp_on 0x3f 开显示
}
/*-写数据或命令到LCD-*/
void wr_lcd (uint8dat_comm, uint8 content)
{
chk_busy ();
if(dat_comm){ IO1SET = di; }
else{ IO1CLR = di; } //di=dat_comm;
IO1CLR = rw;//rw=0;
IO0DIR = IO0DIR | IO16_23;
// 设置P0.0-P0.7为GPIO输出模式
data_ora=( ( data_ora & !(IO16_23) ) | content<<16 );
IO1SET = e;//e=1;
IO1CLR = e;//e=0;
IO0DIR=IO0DIR & !(IO16_23);// 设置P0.16-P0.23为GPIO输入模式
}
/*-读LCD数据-*/
uint8 rd_lcd (void)
{
uint8 rddata;
chk_busy ();
IO1SET = di;//di=1;
IO1SET = rw;//rw=1;
IO1SET = e;//e=1;
rddata= data_ora>>16;
IO1CLR = e;//e=0;
return rddata;
}
/*-写点阵-*/
void lat_disp (uint8 data1,uint8 data2)
{
uint8 i,j;
IO1SET = cs1;//cs1=1; //两屏同时写数据
IO1SET = cs2;
//cs2=1;
wr_lcd (comm,disp_on);
for(j=0;j<8;j++) //共8页
{
wr_lcd (comm,disp_x+j);
wr_lcd (comm,disp_z);
wr_lcd (comm,disp_y);
for(i=0;i<32;i++)
{
wr_lcd (dat,data1);
wr_lcd (dat,data2); //每页64个数
}
}
}
/*---指定位置(x,y)显示row_xl行(每行row_yl个)汉字(大小8xl*yl)---*/
void chn_disp (uint8 x,uint8 y,uint8 xl,uint8 yl,uint8 row_xl,uint8 row_yl,const uint8 *chn)
{
uint8 i,j,k,l,a;
//row_xl:显示row_xl行
wr_lcd (comm,disp_on);
//每行row_yl个汉字
for(l=0;l
//xl:页大小,一页八个点
{
//yl: 列大小,一列一个点
for(k=0;k
//x,y:起始位置
{
for(j=0;j
{
wr_lcd (comm,disp_x+x+l *xl+j);
wr_lcd (comm,disp_z);
wr_lcd (comm,disp_y+y+k*yl);
a=l*xl*yl*row_yl+k*xl*yl+j*yl; //a:数组chn[]中第a个字符
for(i=0;i
wr_lcd (dat,chn[a+i]);
}
}
}
}
结语
本系统以目前广泛应用的LPC2134 ARM为控制处理核心,以感应高压线圈和低压线圈作为ARM的输入信号,用OCM12864的点阵作为仪器的显示,使该装置可以有效完成对汽车发动机的的精确测量。它可以将发动机动态运行的各种参数和故障检测诊断出来,然后通过维修、调整以达到修复发动机的目的。