压力传感器程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<12c5a60s2.h>
#include
#define uint unsigned int
#define uchar unsigned char
#define ADC_POWER 0x80
#define ADC_FLAG 0x10
#define ADC_START 0x08
#define ADC_SPEEDLL 0x00 //540个时钟周期转换一次#define ADC_SPEEDL 0x20 //360个时钟周期转换一次#define ADC_SPEEDH 0x40 //180个时钟周期转换一次#define ADC_SPEEDHH 0x60 //90个时钟周期转换一次sbit lcden=P3^4;
sbit rs=P3^5;
sbit wr=P3^6;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]=" Voltage value";
uchar code table1[]=" mV";
uchar t;
float AD_val;
/**************************
延时函数
**************************/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/************************** 写指令
**************************/ void write_com(uchar com) {
rs=0;
wr=0;
P0=com;
lcden=0;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
/************************** 写数据
**************************/
void write_date(uchar date) {
rs=1;
wr=0;
P0=date;
lcden=0;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
/************************** 初始化液晶
**************************/ void lcd_init()
{
uchar i,j;
wela=0;
dula=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
for(i=0;i<14;i++)
{
write_date(table[i]);
delay(10);
}
write_com(0x80+0x40);
for(j=0;j<16;j++)
{
write_date(table1[j]);
delay(10);
}
}
/****************************
分离小数
****************************/ void fenli(uchar add,float num) {
uchar ge,bai,shi,ge1;
num=num*1000;
ge=(uint)num/1000;
bai=(uint)num%1000/100;
shi=(uint)num%100/10;
ge1=(uint)num%10;
write_com(0x80+0x40+add);
write_date(0x30+ge);
write_date(0x20+14);
write_date(0x30+bai);
write_date(0x30+shi);
write_date(0x30+ge1);
}
/*****************************
初始化AD
*****************************/
void AD_init()
{
P1ASF=0x04;
ADC_RES=0;
ADC_RESL=0;
ADC_CONTR|= ADC_POWER|ADC_SPEEDHH; delay(2);
}
/**************************
读AD值
**************************/
uint get_AD(uchar ch)
{
uint AD_date;
ch&=0x07;
ADC_CONTR=ADC_POWER|ADC_START|ADC_SPEEDHH|ch; _nop_();
_nop_();
_nop_();
_nop_();
while(!(ADC_CONTR&ADC_FLAG));
ADC_CONTR&=0x82;
AD_date=ADC_RES*4+(ADC_RESL&0x03);
return AD_date;
}
/**************************
AD_val平均值
**************************/
float AD_work(uchar ch)
{
uchar i;
float AD_val;
for(i=0;i<100;i++)
AD_val+=get_AD(ch);
AD_val/=100;