基于yeelink的温度远程采集系统实训报告(编辑修改稿)内容摘要:
LG7290 能够直接驱动 8 位共阴式数码管(或 64 只独立的 LED),同时还可以扫描管理多达 64 只按键。 其中有 8 只按键还可以作为功能键使用,就像电脑键盘上的 Ctrl、Shift、 Alt 键一样。 另外 ZLG7290B 内部还设置有连击计数器,能够使某键按下后不松手而连续有效。 采用 I2C 总线方式,与微控制器的接口仅需两根信号线。 可控扫描位数,可控任一数码管闪烁。 引脚说明如下图: ZLG7290 使用说明 ZLG7290B 是基于 I2C 总线接口的芯片。 主控单片机 ADUC831 作为主器件时,内部没有I2C 总线功能,因此需用 SPI 总线的引脚来模拟 I2C 总线。 具体连接如下: ZLG7290B ADUC831 GND DGND SDA MOSI SCL SCLOCK /INT INT0 内蒙古科技大学 信息工程学院实训报告 8 VCC DVDD 但是,这种连接不是唯一的,只是在所写 的软件里需要这样连接。 其实中断可以根据自己所选的中断而定。 地( GND)和电源( VCC)也可以另外从电源上接过来。 所用电源为 5V。 编译软件使用的是 WSD,这个软件主要是用于 AD系列芯片的。 只要下载扩展名为 HEX 的文件即可。 ZLG7290 工作原理 ZLG7290 的核心是一块 ZLG7290B 芯片,它采用 I2C 接口,能直接驱动 8 位共阴式数码管,同时可扫描管理多达 64 只按键,实现人机对话的功能资源十分丰富。 除具有自动消除抖动功能外,它还具有段闪烁、段点亮、段熄灭、功能键、连击键计数等强大功能,并可提供 10 种数字和 21 种字母的译码显示功能,用户可以直接向显示缓存写入显示数据,而且无需外接元件即可直接驱动数码管,还可扩展驱动电压和电流。 此外, ZLG7290B 的电路简单,使用也很方便。 用户按下某个键时, ZLG7290 的 INT 引脚会产生一个低电平的中断请求信号,读取键值后,中断信号就会自动撤销。 正常情况下,微控制器只需要判断 INT 引脚就可以得到键盘输入的信息。 微控制器可通过两种方式得到用户的键盘输入信息。 其一是中断方式,该方式的优点是抗干扰能力强,缺点是要占用微控制器的一个外部中断源。 其二是查询方式,即通 过不断查询 INT 引脚来判断是否有键按下,该方式可以节省微控制器的一根 I/ O 口线,但是代价是 I2C 总线处于频繁的活动状态,消耗电流多并且不利于抗干扰。 系统构成框图 系统原理介绍 数字温度计系统构成框图中 DS18B20 温度传感器主要用于采集温度; ZLG7290 按键电路用于控制和调节时间,数码管用于时间显示便于读数,蜂鸣器用于报警闹铃。 DS18B20 温度传感器 8051单片机芯片 蜂鸣报警器 ZLG7290 数码管显示 内蒙古科技大学 信息工程学院实训报告 9 软件流程图 主程序的主要功能是负责温度的实时显示、读出并处理 DS18B20 的测量的当前温度值,温度测量每 1s进行一次。 这样可以在一秒之内测量一次被测温度,其程序流程见图 主程序流程图 读温度流程图 初始化 调用显示子程序 1S 到。 初次上电 读出温度值温度计算处理显示数据刷新 发温度转换开始命令 N Y N Y Y 发 DS18B20 复位命令 发跳过 ROM 命令 发读取温度命令 读取操作, CRC 校验 9 字节完。 CRC 校验正。 确。 移入温度暂存器 结束 N N Y 内蒙古科技大学 信息工程学院实训报告 10 软件 程序 程序 清单及注释 include include define zlg7290 0x70 /*ZLG7290的 IIC地址 */ define uchar unsigned char /*宏定义 */ define uint unsigned int define _Nop() _nop_() /*定义空指令 */ uchar disp_buf[8]={0,0,0,0,0,0,0,0}。 /*显示缓冲区 */ uchar temper[2]。 /*存放温度的数组 */ uchar code sampling[]={0,20,29,38,47,56}。 /*端口位定义 */ sbit SDA=P1^7。 /*模拟 I2C数据传送位 */ sbit SCL=P1^6。 /*模拟 I2C时钟控制位 */ sbit DQ =P3^3。 /*18B20数据线引脚 */ sbit KEY_INT=P3^2。 sbit BEEP=P3^5。 bit ack。 /*应答标志位 */ uchar g。 uchar t1。 uchar t2。 uchar 1=1。 uchar KEY。 uchar change_disp=0。 /*IIC开始 */ /******************************************************************* 起动 IIC总线函数 ********************************************************************/ void Start_I2c() { SDA=1。 /*发送起始条件的数据信号 */ _Nop()。 SCL=1。 _Nop()。 /*起始条件建立时间大于 ,延时 */ 内蒙古科技大学 信息工程学院实训报告 11 _Nop()。 _Nop()。 _Nop()。 _Nop()。 SDA=0。 /*发送起始信号 */ _Nop()。 /* 起始条件锁定时间大于 4μ s*/ _Nop()。 _Nop()。 _Nop()。 _Nop()。 SCL=0。 /*钳住 I2C总线,准备发送或接收数据 */ _Nop()。 _Nop()。 } /******************************************************************* 结束 IIC总线函数 ********************************************************************/ void Stop_I2c() { SDA=0。 /*发送结束条件的数据信号 */ _Nop()。 /*发送结束条件的时钟信号 */ SCL=1。 /*结 束条件建立时间大于 4μ s*/ _Nop()。 _Nop()。 _Nop()。 _Nop()。 _Nop()。 SDA=1。 /*发送 I2C总线结束信号 */ _Nop()。 _Nop()。 _Nop()。 _Nop()。 } /******************************************************************* 字节数据传送函数 内蒙古科技大学 信息工程学院实训报告 12 ********************************************************************/ void SendByte(uchar c) { uchar BitCnt。 for(BitCnt=0。 BitCnt8。 BitCnt++) /*要传送的数据长度为 8位 */ { if((cBitCnt)amp。 0x80)SDA=1。 /*判断发送位 */ else SDA=0。 _Nop()。 SCL=1。 /*置时钟线为高,通知被控器开始接收数据位 */ _Nop()。 _Nop()。 /*保证时钟高电平周期大于 4μ s*/ _Nop()。 _Nop()。 _Nop()。 SCL=0。 } _Nop()。 _Nop()。 SDA=1。 /*8位发送完后释放数据线,准备接收应答位 */ _Nop()。 _Nop()。 SCL=1。 _Nop()。 _Nop()。 _Nop()。 if(SDA==1)ack=0。 else ack=1。 /*判断是否接收到应答信号 */ SCL=0。 _Nop()。 _Nop()。 } /******************************************************************* 字 节数据传送函数 内蒙古科技大学 信息工程学院实训报告 13 ********************************************************************/ uchar RcvByte() { uchar retc。 uchar BitCnt。 retc=0。 SDA=1。 /*置数据线为输入方式 */ for(BitCnt=0。 BitCnt8。 BitCnt++) { _Nop()。 SCL=0。 /*置时。基于yeelink的温度远程采集系统实训报告(编辑修改稿)
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。