#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
//MAX7219引脚定义
sbit CLK = P2^5;
sbit DIN = P2^6;
sbit LOAD = P2^7;
//ADC0832引脚定义
sbit ADC_CS = P2^0;
sbit ADC_DI = P2^1;
sbit ADC_CLK = P2^2;
sbit ADC_DO = P2^3;
//FT245BM引脚定义
sbit RXF = P1^0;
sbit TXE = P1^1;
sbit WR1 = P1^2;
sbit RD1 = P1^3;
sbit PWREN = P1^4;
const uchar tab[]={
0x7E,0x30,0x6D,0x79, // 0~3
0x33,0x5B,0x5F,0x70, // 4~7
0x7F,0x7B,0x77,0x1F, // 8~B
0x4E,0x3D,0x4F,0x47 // C~F
};
uchar P_dat,num=0;
uchar buf[4];
/************************函数声明***********************/
void wr_7219(uchar com,uchar dat); //MAX7219控制函数
void init_max7219(void); //MAX7219初始化函数
void init_timer0(void); //T0初始化函数
uchar ADC_read(uchar chnn); //ADC0832模数转换函数
void change(uint c_dat); //标度变换函数
void disp(uchar chn); //显示函数
void usb(uchar usb_dat); //USB通信函数
void init_disp(void); //显示初始化函数
/*****************主函数******************/
main()
{
uchar i=0;
init_max7219();
init_timer0();
init_disp();
while(1)
{
if(num==100)
{
num=0;
if(i==0)
{
P_dat=ADC_read(0); //读取通道0数据
usb(0); //发送通道号
usb(P_dat); //发送测量数据
change(P_dat); //标度变化
disp(0); //显示通道0压力值
i=1; //切换到另一通道
}
else
{
P_dat=ADC_read(1); //读取通道1数据
usb(1); //发送通道号
usb(P_dat); //发送测量数据
change(P_dat); //标度变化
disp(1); //显示通道0压力值
i=0; //切换到另一通道
}
}
}
}
/**************MAX7219写函数************/
void wr_7219(uchar com,uchar dat)
{
uchar i,temp;
LOAD = 0;
temp = com;
for(i=0;i<8;i++) //发送地址
{
CLK=0;
if((temp&0x80)==0x80)
DIN=1;
else
DIN=0;
temp<<=1;
CLK=1;
}
temp=dat; //发送数据
for(i=0;i<8;i++)
{
CLK=0;
if((temp&0x80)==0x80)
DIN=1;
else
DIN=0;
temp<<=1;
CLK=1;
}
LOAD = 1;
}
/*************MAX7219初始化函数***********/
void init_max7219(void)
{
wr_7219(0x0c,0x01);
wr_7219(0x09,0x00); //译码形式
wr_7219(0x0a,0x05); //显示亮度
wr_7219(0x0b,0x04); //显示位数
}
/***************T0初始化函数**************/
void init_timer0(void)
{
TMOD=0x01; //方式控制
TH0=0x3c; //T0高8位
TL0=0xb0; //T0低8位
EA=1; //开全局中断
ET0=1; //开定时中断0
TR0=1; //启动定时器
}
/***********ADC0832模数转换函数***********/
uchar ADC_read(uchar chnn)
{
uchar i,temp=0;
ADC_CLK = 0;
ADC_CS=0;
ADC_CLK = 1; //起始位
ADC_DI=1;
ADC_CLK = 0;
ADC_CLK = 1; //选择通道
ADC_DI=1;
ADC_CLK = 0;
ADC_CLK = 1;
if(chnn==0)
ADC_DI=0;
else
ADC_DI=1;
ADC_CLK = 0;
ADC_CLK = 1;
for(i=0;i<8;i++) //接收转换数据
{
temp<<=1;
ADC_CLK = 0;
if(ADC_DO==1)temp|=0x01;
ADC_CLK = 1;
}
ADC_CS=1;
return temp;
}
/***************标度变换函数**************/
void change(uint c_dat)
{
uint temp1;
temp1=c_dat;
temp1=(temp1*312)/255+62;
buf[2]=temp1/100;
buf[1]=(temp1%100)/10;
buf[0]=temp1%10;
}
/**************初始化显示函数**************/
void init_disp(void)
{
wr_7219(0x01,1); //显示数据
wr_7219(0x02,1);
wr_7219(0x03,1);
wr_7219(0x04,1);
}
/*****************显示函数****************/
void disp(uchar chn)
{
if(chn==0) //若为通道0
buf[3]=0x77; //显示通道号"A"
else //若为通道1
buf[3]=0x1F; //显示通道号"B"
if(buf[2]==0) //若最高位为0
buf[2]=0; //该位停止显示
else
buf[2]=tab[buf[2]]; //正常显示该位
buf[1]=0x80|tab[buf[1]];
buf[0]=tab[buf[0]];
wr_7219(0x01,buf[0]); //显示数据
wr_7219(0x02,buf[1]);
wr_7219(0x03,buf[2]);
wr_7219(0x04,buf[3]);
}
/****************T0中断函数***************/
void timer0(void) interrupt 1
{
num++;
TH0=0x3c; //T0高8位
TL0=0xb0; //T0低8位
}
/****************USB通信函数***************/
void usb(uchar usb_dat)
{
while(PWREN); //判断FT245BM是否就绪
WR1=0;
while(!TXE); //判断能否写入数据,不能就等待
WR1=1;
P0=usb_dat;
WR1=0;
}
USB.rar_采集电路
版权申诉
67 浏览量
2022-09-20
21:39:12
上传
评论
收藏 196KB RAR 举报
寒泊
- 粉丝: 76
- 资源: 1万+
最新资源
- MySQL是一种广泛使用的开源关系型数据库管理系统
- MySQL是一种广泛使用的开源关系型数据库管理系统
- MySQL是一种广泛使用的开源关系型数据库管理系统
- 012c3c44c465a099108e0d8570b86a70.zip
- 基于Java和JavaWeb的网上商城项目设计源码 - myshopping
- 基于Vue和JavaScript的书城项目设计源码 - Demo12.18
- wp2787778-map-wallpaper.jpg
- 基于Javascript的杜王町打工人仓库管理系统设计源码 - 杜王町打工人的仓库
- 基于C#的报销材料合并工具设计源码 - 报账材料合并
- 基于Java的驾校一点通后端服务设计源码 - jiaxiaoServer
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈