压力传感器程序Word文档格式.docx

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

压力传感器程序Word文档格式.docx

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

压力传感器程序Word文档格式.docx

sbitAlarm_led_green=P1^6;

//低于压力表量程最小值绿色led报警定义

//adc采样值存储单元

charpress_data;

//标度变换存储单元

unsignedcharad_alarm;

//报警值存储单元

unsignedcharpress_bai=0;

//显示值百位

unsignedcharpress_shi=0;

//显示值十位

unsignedcharpress_ge=0;

//显示值个位

unsignedcharpress_dot=0;

//显示值十分位

ucharcodestr0[]={"

Press:

.kpa"

};

ucharcodestr1[]={"

CheckBYJack"

voiddelay(uint);

voidlcd_wait(void);

voiddelay_LCM(uint);

//LCD延时子程序

voidinitLCM(void);

//LCD初始化子程序

//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);

voidmain(void)

{

delay(500);

//系统延时500ms启动

initLCM();

WriteCommandLCM(0x01,1);

//清显示屏

DisplayListChar(0,0,str0);

DisplayListChar(0,1,str1);

while

(1)

{

ad_data=Adc0832(0);

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

alarm();

data_pro();

display();

}

}

voiddelay(uintk)

uinti,j;

for(i=0;

i

for(j=0;

j<

60;

j++)

{;

voidWriteCommandLCM(ucharWCLCM,ucharBusyC)

if(BusyC)lcd_wait();

DATAPORT=WCLCM;

LCM_RS=0;

//选中指令寄存器

LCM_RW=0;

//写模式

LCM_EN=1;

_nop_();

LCM_EN=0;

voidWriteDataLCM(ucharWDLCM)

lcd_wait();

//检测忙信号

DATAPORT=WDLCM;

LCM_RS=1;

//选中数据寄存器

voidlcd_wait(void)

DATAPORT=0xff;

//读LCD前若单片机输出低电平,而读出LCD为高电平,则冲突,Proteus仿真会有显示逻辑黄色

LCM_RW=1;

while(DATAPORT&

BUSY)

{LCM_EN=0;

voidinitLCM()

DATAPORT=0;

delay(15);

WriteCommandLCM(0x38,0);

//三次显示模式设置,不检测忙信号

delay(5);

WriteCommandLCM(0x38,1);

//8bit数据传送,2行显示,5*7字型,检测忙信号

WriteCommandLCM(0x08,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;

=0x01;

=0x0f;

while(X<

16)

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

ListLength++;

X++;

voiddisplay(void)

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);

//稳定显示

//采集并返回

ucharAdc0832(unsignedcharchannel)//AD转换,返回结果

uchari=0;

ucharj;

uintdat=0;

ucharndat=0;

if(channel==0)channel=2;

if(channel==1)channel=3;

ADDI=1;

ADCS=0;

//拉低CS端

ADCLK=1;

//拉高CLK端

ADCLK=0;

//拉低CLK端,形成下降沿1

ADDI=channel&

0x1;

//拉低CLK端,形成下降沿2

ADDI=(channel>

>

1)&

//拉低CLK端,形成下降沿3

//控制命令结束

dat=0;

i<

8;

i++)

dat|=ADDO;

//收数据

//形成一次时钟脉冲

dat<

<

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

j=0;

j=j|ADDO;

j=j<

7;

ndat=ndat|j;

if(i<

7)ndat>

ADCS=1;

//拉低CLK端

ADDO=1;

//拉高数据端,回到初始状态

=8;

dat|=ndat;

return(dat);

//returnadk

voiddata_pro(void)

unsignedinttemp;

floatpress;

if(14

intvary=ad_data;

//y=(115-15)/(243-13)*X+15kpa

press=((10.0/23.0)*vary)+9.3;

//测试时补偿值为9.3

temp=(int)(press*10);

//放大10倍,便于后面的计算

press_bai=temp/1000;

//取压力值百位

press_shi=(temp00)/100;

//取压力值十位

press_ge=((temp00)0)/10;

//取压力值个位

press_dot=((temp00)0);

//取压力值十分位

voidalarm(void)

if(ad_data>

=243)//如果当前压力值大于115kpa,

{Alarm_led_red=0;

}//则启动redled报警

else

{Alarm_led_red=1;

}//关闭redled报警

if(ad_data<

=14)//如果当前压力值小于16kpa

{Alarm_led_green=0;

}//则启动greenled报警

{Alarm_led_green=1;

}//关闭greenled报警

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

当前位置:首页 > 高等教育 > 艺术

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

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