压力传感器仿真程序.docx

上传人:b****3 文档编号:3206664 上传时间:2022-11-20 格式:DOCX 页数:18 大小:16.36KB
下载 相关 举报
压力传感器仿真程序.docx_第1页
第1页 / 共18页
压力传感器仿真程序.docx_第2页
第2页 / 共18页
压力传感器仿真程序.docx_第3页
第3页 / 共18页
压力传感器仿真程序.docx_第4页
第4页 / 共18页
压力传感器仿真程序.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

压力传感器仿真程序.docx

《压力传感器仿真程序.docx》由会员分享,可在线阅读,更多相关《压力传感器仿真程序.docx(18页珍藏版)》请在冰豆网上搜索。

压力传感器仿真程序.docx

压力传感器仿真程序

 

#include<>

 

#include<>

 

#include<>

 

#include<>

 

#defineucharunsignedchar

 

#defineuintunsignedint

 

#defineBUSY0x80kpa"};

 

ucharcodestr1[]={"CheckBYJack"};

 

voiddelay(uint);

 

voidlcd_wait(void);

 

voiddelay_LCM(uint);

 

//LCD延时子程序

 

voidinitLCM(void);

 

//LCD初始化子程序

 

voidlcd_wait(void);

 

//LCD检测忙子程序

 

voidWriteCommandLCM(ucharWCLCM,ucharBusyC);//

 

写指令到ICM子函数

 

voidWriteDataLCM(ucharWDLCM);//

 

写数据到LCM子函数

 

voidDisplayOneChar(ucharX,ucharY,ucharDData);//

 

显示指定坐标的一个字符子函数

 

voidDisplayListChar(ucharX,ucharY,ucharcode*DData);//

 

显示指定坐标的一串字符子函数

 

voiddisplay(void);//

 

系统显示子函数

 

ucharAdc0832(unsignedcharchannel);

 

voidalarm(void);

 

voiddata_pro(void);

 

/**********mainfuncation************/

 

voidmain(void)

 

{

 

delay(500);//系统延时500ms启动

 

//ad_data=0;//采样值储存单元初始化为0

 

initLCM();

 

WriteCommandLCM(0x01,1);//清显示屏

 

DisplayListChar(0,0,str0);

 

DisplayListChar(0,1,str1);

 

while

(1)

 

{

 

ad_data=Adc0832(0);//采样值储存单元初始化为0

 

alarm();

 

data_pro();

 

display();

 

}

 

}

 

/*********延时K*1ms,**********/

 

voiddelay(uintk)

 

{

 

uinti,j;

 

for(i=0;i

 

{

 

for(j=0;j<60;j++)

 

{;}

 

}

 

}

 

/**********写指令到ICM子函数************/

 

voidWriteCommandLCM(ucharWCLCM,ucharBusyC)

 

{

 

if(BusyC)lcd_wait();

 

DATAPORT=WCLCM;

 

LCM_RS=0;//选中指令存放器

 

LCM_RW=0;//写模式

 

LCM_EN=1;

 

_nop_();

 

_nop_();

 

_nop_();

 

LCM_EN=0;

 

}

 

/**********写数据到LCM子函数************/

 

voidWriteDataLCM(ucharWDLCM)

 

{

 

lcd_wait();//检测忙信号

 

DATAPORT=WDLCM;

 

LCM_RS=1;//选中数据存放器

 

LCM_RW=0;//写模式

 

LCM_EN=1;

 

_nop_();

 

_nop_();

 

_nop_();

 

LCM_EN=0;

 

}

 

/***********lcm内部等候函数*************/

 

voidlcd_wait(void)

 

{

 

DATAPORT=0xff;//读LCD前若单片机输出低电平,而读出LCD为高电平,则冲

 

突,Proteus仿真会有显示逻辑黄色

 

LCM_EN=1;

 

LCM_RS=0;

 

LCM_RW=1;

 

_nop_();

 

_nop_();

 

_nop_();

 

while(DATAPORT&BUSY)

 

{LCM_EN=0;_nop_();_nop_();

LCM_EN=1;

 

_nop_();

 

_nop_();

 

}

 

LCM_EN=0;

 

}

 

/**********LCM初始化子函数***********/

 

voidinitLCM()

 

{

 

DATAPORT=0;

 

delay(15);

 

WriteCommandLCM(0x38,0);//三次显示模式设置,不检测忙信号

 

delay(5);

 

WriteCommandLCM(0x38,0);

 

delay(5);

 

WriteCommandLCM(0x38,0);

 

delay(5);

 

WriteCommandLCM(0x38,1);//8bit数据传递,2行显示,5*7字型,检测忙信号

 

WriteCommandLCM(0x08,1);//封闭显示,检测忙信号

 

WriteCommandLCM(0x01,1);//清屏,检测忙信号

 

WriteCommandLCM(0x06,1);//显示光标右移设置,检测忙信号

 

WriteCommandLCM(0x0c,1);//显示屏翻开,光标不显示,不闪耀,检测忙信号

 

}

 

/****显示指定坐标的一个字符子函数****/

 

voidDisplayOneChar(ucharX,ucharY,ucharDData)

 

{

 

Y&=1;

 

X&=15;

 

if(Y)X|=0x40;//若y为1(显示第二行),地点码+0X40

 

X|=0x80;//指令码为地点码+0X80

 

WriteCommandLCM(X,0);

 

WriteDataLCM(DData);

 

}

 

/*******显示指定坐标的一串字符子函数*****/

 

voidDisplayListChar(ucharX,ucharY,ucharcode*DData)

 

{

 

ucharListLength=0;

 

Y&=0x01;

 

X&=0x0f;

 

while(X<16)

 

{

 

DisplayOneChar(X,Y,DData[ListLength]);

 

ListLength++;

 

X++;

 

}

 

}

 

/*****************系统显示子函数*****************/

 

voiddisplay(void)

 

{

 

WriteCommandLCM(0x0c,1);//显示屏翻开,光标不显示,不闪耀,

 

检测忙信号

 

DisplayListChar(0,0,str0);

 

DisplayListChar(0,1,str1);

 

DisplayOneChar(7,0,press_bai+0x30);

 

DisplayOneChar(8,0,press_shi+0x30);

 

DisplayOneChar(9,0,press_ge+0x30);

 

DisplayOneChar(11,0,press_dot+0x30);

 

delay(1000);//稳固显示

 

}

 

/************

 

读ADC0832函数

 

************/

 

//收集并返回

 

ucharAdc0832(unsignedcharchannel)

 

//AD

 

变换,返回结果

{

 

uchari=0;

 

ucharj;

 

uintdat=0;

 

ucharndat=0;

 

if(channel==0)channel=2;

 

if(channel==1)channel=3;

 

ADDI=1;

 

_nop_();

 

_nop_();

 

ADCS=0;//拉低CS端

 

_nop_();

 

_nop_();

 

ADCLK=1;//拉高CLK端

 

_nop_();

 

_nop_();

 

ADCLK=0;//拉低CLK端,形成降落沿1

 

_nop_();

 

_nop_();

 

ADCLK=1;//拉高CLK端

 

ADDI=channel&0x1;

 

_nop_();

 

_nop_();

 

ADCLK=0;//拉低CLK端,形成降落沿2

 

_nop_();

 

_nop_();

 

ADCLK=1;//拉高CLK端

 

ADDI=(channel>>1)&0x1;

 

_nop_();

 

_nop_();

 

ADCLK=0;//拉低CLK端,形成降落沿3

 

ADDI=1;//控制命令结束

 

_nop_();

 

_nop_();

 

dat=0;

 

for(i=0;i<8;i++)

 

{

 

dat|=ADDO;//收数据

 

ADCLK=1;

 

_nop_();

 

_nop_();

 

ADCLK=0;//形成一次时钟脉冲

 

_nop_();

 

_nop_();

 

dat<<=1;

 

if(i==7)dat|=ADDO;

 

}

 

for(i=0;i<8;i++)

 

{

 

j=0;

 

j=j|ADDO;//收数据

 

ADCLK=1;

 

_nop_();

 

_nop_();

 

ADCLK=0;//形成一次时钟脉冲

 

_nop_();

 

_nop_();

 

j=j<<7;

 

ndat=ndat|j;

 

if(i<7)ndat>>=1;

 

}

 

ADCS=1;//拉低CS端

 

ADCLK=0;//拉低CLK端

 

ADDO=1;//拉高数据端,回到初始状态

 

dat<<=8;

 

dat|=ndat;

 

return(dat);//returnadk

 

}

 

voiddata_pro(void)

 

{

 

unsignedinttemp;

 

floatpress;

 

if(14

 

之间时,按照线性变换

 

{

 

intvary=ad_d

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1