#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char //宏定义
#include <intrins.h>
sbit P20=P3^2;
uchar flag;
uint c=0;
uchar flag_1s=0;
//ADC0832的引脚
sbit ADCS =P1^0; //ADC0832 chip seclect
sbit ADDI =P1^2; //ADC0832 k in
sbit ADDO =P1^2; //ADC0832 k out
sbit ADCLK =P1^1; //ADC0832 clock signal
unsigned char getdata,getdata1; //获取ADC转换回来的值
/***********************延时函数************************/
void delay_uint(uint q)
{
while(q--);
}
void delay(uint q)
{
uint i,j;
for(i=0;i<q;i++)
for(j=0;j<120;j++);
}
/************
读ADC0832函数
************/
//采集并返回
unsigned int Adc0832(unsigned char channel) //AD转换,返回结果
{
unsigned char i=0;
unsigned char j;
unsigned int dat=0;
unsigned char ndat=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); //return ad k
}
/*****主函数*****/
void main(void)
{
unsigned int ppress = 0;
float press;
P20=0;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
ET1=0;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = (65536-50000)%256; //设置定时初值
TH0 = (65536-50000)/256; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
EA=1;//开总中断
ET0=1;//开定时器0中断
while(1)
{
getdata=Adc0832(0);
if(0<getdata<243)
{
int vary=getdata;
press=((10.0/23.0)*vary)+9.3;
c=(int)(press*10);
}
if(flag_1s==1)
{
P20=1;
ES=0;
SBUF=c/1000;
while(!TI);
TI=0;
SBUF=c%1000/100;
while(!TI);
TI=0;
SBUF=c%1000%100/10;
while(!TI);
TI=0;
SBUF=c%10;
while(!TI);
TI=0;
ES=1;
delay(10);
P20=0;
flag_1s=0;
}
}
}
void serve_T0() interrupt 1 using 1
{
static uint aa=0;
TL0 = (65536-50000)%256; //设置定时初值
TH0 = (65536-50000)/256; //设置定时初值
aa++;
if(aa>=20){aa=0; flag_1s=1;}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
基于单片机从机采集气压,主机液晶显示-485通信(proteus仿真+源程序).rar (22个子文件)
基于单片机从机采集气压,主机液晶显示-485通信(proteus仿真+源程序)
主机
Objects
主机 7KB
主机.lnp 73B
主机.build_log.htm 1KB
主机.hex 2KB
主机.obj 8KB
主机.c 3KB
主机.uvgui.pc 84KB
主机.uvproj 14KB
Listings
主机.lst 5KB
主机.m51 10KB
主机.uvopt 5KB
Last Loaded 图8.11.fv8.14.pdsbak 34KB
图8.11.pdsprj.LAPTOP-T3IKUD4S.pc.workspace 3KB
图8.11.pdsprj 35KB
从机
从机.uvgui.pc 84KB
Objects
从机 10KB
从机.hex 4KB
从机.uvproj 14KB
从机.c 3KB
Listings
从机.m51 12KB
从机.uvopt 5KB
图8.6.pdsprj 34KB
共 22 条
- 1
资源评论
- xellosmeta2023-05-25果断支持这个资源,资源解决了当前遇到的问题,给了新的灵感,感谢分享~
bbxyliyang
- 粉丝: 91
- 资源: 181
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功