本帖最后由 佐小柠 于 2019-5-30 20:08 编辑
此图我自己了解画的,新人一枚,实在不会,后面附带仿真文件
多路数据采集系统设计.zip
(129.26 KB, 下载次数: 56)
图中画的温感是搜索得来的,可忽略,
请大神帮忙在此基础上修改或者添加
请大神帮忙在此基础上修改或者添加
1、功能要求利用键盘选择采集的数据通道;一路为温度,范围为0-255摄氏度,一路为压强,范围为0-255Pa。
2、硬件设计
2.1硬件电路芯片的选择
ATC89C51单片机,A/D转换用ADC0809
原理图
3软件设计
c语言没学过,半学半推中实在不会写,但是可以看懂部分,急用!!急用!急用
下面是程序,只找到了压感的程序,温感不知道怎么把程序加进去
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char code tab[]={0x3f ,0x06,0x5b,0x4f ,0x66,0x6d,0x7d,0x07,0x7f ,0x6f };
uchar code tab1[]={0xfe,0xfd,0xfb,0xf7};
uchar dis_buf[4];
sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
sbit CLK=P3^3;
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit AA=P3^5;
sbit BB=P3^6;
sbit CC=P3^7;
void delay()// 延时函数
{
uchar t;
for(t=0;t<250;t++);
}
void display()
{
uchar j;
for(j=0;j<4;j++)
{
P1=tab[dis_buf[j]];
P2=tab1[j];
delay();
P2=0xff;
}
}
void t1() interrupt 1 // 定时器中断服务函数 ; 作用 : 产生 CLK 信号
{
TH0=(65536-200)/256;
TL0=(65536-200)%256;
CLK=~CLK;
}
void main()// 主函数
{
uchar sj=0,ge=0,shi=0,bai=0,qian=0;
uint temp;
TMOD=0x01;
TH0=(65536-200)/256;// 定时时间为 0.2us, 亦即 CLK 周期为 0.4us
TL0=(65536-200)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
// P3=0x0f //选择通道0
// AA=0;// 选择通道 0
// BB=0;
// CC=0;
ST=0;// 关闭转换
OE=0;// 关闭输出
ST=1;// 开启转换
ST=0;// 关闭转换
while(EOC==0);// 判断是否转换结束 : 是则执行以下语句 , 否则等待
OE=1;// 开启数据输出允许
sj=P0;// 将数据取走 , 存放在变量 sj 中
OE=0;// 关闭输出
temp=sj;// 电压值转换 ,5V 作为参考电压 , 分成 256 份
qian=temp/1000; // 个位
bai=(temp-qian*1000)/100;// 十位
shi=(temp-qian*1000-bai*100)/10;// 百位
ge=temp-qian*1000-bai*100-shi*10;// 千位
dis_buf[0]=ge;
dis_buf[1]=shi;
dis_buf[2]=bai;
dis_buf[3]=qian;
display();
OE=0;
}
}
|