- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
题目:数据采集及显示系统设计
设计基本功能:
利用TLC549做A/D转换器,外界提供模拟电压输入信号,将模拟量转化成数字量,在单片机控制下实现对外部输入信号的数据采集,并将采集数据结果在LED数码管上显示,显示结果为实际输入电压数值。
要求能够实现单次触发存储显示方式,即每按动一次“单次触发”键,能对被测信号进行一次采集与显示。系统在不采集信号时,显示当前时间。
硬件设计
本方案分为三个模块:单片机模块、AD模块、I2C模块,其中I2C模块有时钟、键盘和LED三部分组成。
单片机模块
该模块设计实现单片机最小系统和与其他模块的接口。电路图见图一。
图一
AD模块
该模块是TLC549的电路连接。见图二。
图二 TLC549
I2C模块
本模块是由时钟芯片PCF8563和由ZLG7290连接的键盘、6位LED组成。实现时钟设置、读取,键盘识别,以及显示功能。电路连接见图三、四。
图三 ZLG7290
图四 PCF8563
软件设计
1、流程图见图五。
图五 流程图
2程序
#include REG51.h
#include intrins.h
#include absacc.h
#include VIIC_C51.h
#include ZLG7290.h
#define PCF8563 0xA2 //定义器件地址
#define WRADDR 0x00 //定义写单元首地址
#define RDADDR 0x02 //定义读单元首地址
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define ZLG7290 0x70 //定义器件地址
//定义TLC549串行总线操作端口
sbit CLK=P1^0;
sbit DAT=P1^1;
sbit CS=P1^2;
//定义I2C总线控制端口
sbit SDA=P1^7;
sbit SCL=P1^6;
//显示缓冲区初始化:DP-51PRO
unsigned char disp_buf[8]={0,0,0,0,0,0,0,0};//显示缓存
uchar bdata ADCdata;
sbit ADbit=ADCdata^0;
sbit KEY_INT=P3^2;
sbit RST=P1^0;
unsigned char KEY; //保存键值
/***************************************************
**函数名称: TLC549ADC()
**函数功能: 读取上一次A/D转换的数据,启动下一次A/D转换
****************************************************/
uchar TLC549ADC(void)
{
uchar i;
CLK=0;
DAT=1;
CS=0;
for(i=0;i8;i++)
{
CLK=1;
_nop_();
_nop_();
ADCdata=1;
ADbit=DAT;
CLK=0;
_nop_();
}
return (ADCdata);
}
/****************************************
**函数名称: delay()
**函数功能: 硬件延时程序
**入口参数: i
****************************************/
unsigned char DelayNS(unsigned char no)
{
unsigned char i,j; //延时参数
for(; no0; no--)
for(i=0; i100; i++)
for(j=0; j100; j++);
return 0;
}
/*A/D数据转换处理和输出显示功能函数*/
/*******************************************
**函数名称: display()
**函数功能: 处理A/D转换后的数据并输出显示
********************************************/
void display(uchar advalue)
{
ulong ad_disp;
ad_disp=((ulong)advalue)*500/255;
disp_buf[2] =(uchar)(ad_disp/100%10)+0x80;
disp_buf[1] =(uchar)(ad_disp/10%10);
文档评论(0)