1、基于80c51单片机的数据采集与显示系统设计说明题目:数据采集及显示系统设计设计基本功能: 利用TLC549做A/D转换器,外界提供模拟电压输入信号,将模拟量转化成数字量,在单片机控制下实现对外部输入信号的数据采集,并将采集数据结果在LED数码管上显示,显示结果为实际输入电压数值。 要求能够实现单次触发存储显示方式,即每按动一次“单次触发”键,能对被测信号进行一次采集与显示。系统在不采集信号时,显示当前时间。一、硬件设计本方案分为三个模块:单片机模块、AD模块、I2C模块,其中I2C模块有时钟、键盘和LED三部分组成。1、单片机模块该模块设计实现单片机最小系统和与其他模块的接口。电路图见图一。
2、图一 2、AD模块该模块是TLC549的电路连接。见图二。图二 TLC5493、I2C模块本模块是由时钟芯片PCF8563和由ZLG7290连接的键盘、6位LED组成。实现时钟设置、读取,键盘识别,以及显示功能。电路连接见图三、四。图三 ZLG7290图四 PCF8563二、软件设计1、流程图见图五。图五 流程图2程序#include #include #include #include VIIC_C51.h#include ZLG7290.h#define PCF8563 0xA2 /定义器件地址#define WRADDR 0x00 /定义写单元首地址#define RDADDR 0x02
3、 /定义读单元首地址#define uchar unsigned char#define uint unsigned int#define ulong unsigned long#define ZLG7290 0x70 /定义器件地址/定义TLC549串行总线操作端口sbit CLK=P10;sbit DAT=P11;sbit CS=P12;/定义I2C总线控制端口sbit SDA=P17;sbit SCL=P16;/显示缓冲区初始化:DP-51PROunsigned char disp_buf8=0,0,0,0,0,0,0,0;/显示缓存uchar bdata ADCdata;sbit AD
4、bit=ADCdata0;sbit KEY_INT=P32;sbit RST=P10;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_(); ADCdata0; no-) for(i=0; i100; i+) for(j=0; j2) key1_count=0; if(KEY=2) /调整日期 key2_count+;
5、if(key2_count3) key2_count=0; if(KEY=3) /调整时间 key3_count+; if(key3_count2) key3_count=0; if(KEY=5) /采集电压 ad_sample=TLC549ADC(); /*修改日期*/ if(key2_count=1) /调整年 disp_buf5 =31; disp_buf4 =31; ZLG7290_SendBuf(disp_buf,8); DelayNS(2); if(KEY=4) rd6+; if(rd6&0x0f)=0x0a) rd6&=0xf0; rd6+=0x10; else if(key2_
6、count=2) /调整月 disp_buf3 =31; disp_buf2 =31; ZLG7290_SendBuf(disp_buf,8); DelayNS(2); if(KEY=4) rd5+; if(rd5&0x0f)=0x0a) rd5&=0xf0; rd5+=0x10; if(rd5=0x13) rd5=0x01; else if(key2_count=3) /调整日 disp_buf1 =31; disp_buf0 =31; ZLG7290_SendBuf(disp_buf,8); DelayNS(2); if(KEY=4) rd3+; if(rd3&0x0f)=0x0a) rd3&=0xf0; rd3+=0x10; if(rd3=0x32) rd3=0x01; /*修改时间*/ if(key3_count=1) /修改小时 disp_buf6 =31; disp_buf7 =31;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1