4路AD中的4路检测外部模拟量输入 使用液晶显示
来源:互联网 发布:淘宝怎么删除宝贝 编辑:程序博客网 时间:2024/05/01 19:16
/*----------------------------------------------- 名称:IIC协议 PCF8591 AD/DA转换 内容:使用4路AD中的4路检测外部模拟量输入 使用液晶显示------------------------------------------------*/ #include <reg52.h> #include "i2c.h"#include "delay.h"#include "1602.h"#include <stdio.h>#define AddWr 0x90 //写数据地址 #define AddRd 0x91 //读数据地址extern bit ack;unsigned char ReadADC(unsigned char Chl);unsigned char sec;bit WriteDAC(unsigned char dat);void timer_init(){ TH0 = 0x3c;//高位 TL0 = 0xb0;//低位}/*------------------------------------------------ 主程序------------------------------------------------*/main(){ unsigned char num=0,i; unsigned char temp[7];//定义显示区域临时存储数组 float Voltage; //定义浮点变量 LCD_Init(); //初始化液晶 DelayMs(20); //延时有助于稳定 LCD_Clear(); //清屏 TMOD = 0x01; timer_init(); TR0 = 1;//开关 EA = 1;//总开关 ET0 = 1;//外部中断开关 sec = 0;while (1) //主循环 { if(sec%4 == 0) { for(i=0;i<5;i++)//连续读5次,取最后一次,以便读取稳定值 num=ReadADC(0); //读取第1路电压值,范围是0-255 Voltage=(float)num*5/256; //根据参考电源VREF算出时间电压,float是强制转换符号,用于将结果转换成浮点型 sprintf(temp,"CHL0 %3.2fV",Voltage);//格式输出电压值,%3.2f 表示浮点输出,共3位数,小数点后2位 LCD_Write_String(0,0,temp);}if(sec%4 == 1){ for(i=0;i<5;i++) num=ReadADC(1); Voltage=(float)num*5/256; sprintf(temp,"CHL1 %3.2fV",Voltage); LCD_Write_String(0,0,temp);}if(sec%4 == 2){ for(i=0;i<5;i++) num=ReadADC(2); Voltage=(float)num*5/256; sprintf(temp,"CHL2 %3.2fV",Voltage); LCD_Write_String(0,0,temp);}if(sec%4 == 3){ for(i=0;i<5;i++) num=ReadADC(3); Voltage=(float)num*5/256; sprintf(temp,"CHL3 %3.2fV",Voltage); LCD_Write_String(0,0,temp);} //主循环中添加其他需要一直工作的程序 DelayMs(200); }}/*------------------------------------------------ 读AD转值程序输入参数 Chl 表示需要转换的通道,范围从0-3返回值范围0-255------------------------------------------------*/unsigned char ReadADC(unsigned char Chl) { unsigned char Val; Start_I2c(); //启动总线 SendByte(AddWr); //发送器件地址 if(ack==0)return(0); SendByte(0x40|Chl); //发送器件子地址 if(ack==0)return(0); Start_I2c(); SendByte(AddWr+1); if(ack==0)return(0); Val=RcvByte(); NoAck_I2c(); //发送非应位 Stop_I2c(); //结束总线 return(Val); }/*------------------------------------------------ 写入DA转换数值输入参数:dat 表示需要转换的DA数值,范围是0-255------------------------------------------------*//*bit WriteDAC(unsigned char dat){ Start_I2c(); //启动总线 SendByte(AddWr); //发送器件地址 if(ack==0)return(0); SendByte(0x40); //发送器件子地址 if(ack==0)return(0); SendByte(dat); //发送数据 if(ack==0)return(0); Stop_I2c(); }*/void ISR_T0(void) interrupt 1{ unsigned char i; EA = 0;//关掉其他中断 timer_init(); i++; if(i==20) { sec++; i = 0; }//如果i=20时完成了1s EA = 1;//结束后再打开中断}
0 0
- 4路AD中的4路检测外部模拟量输入 使用液晶显示
- PCF8591 4路AD中的4路检测外部模拟量输入
- 多模拟量输入系统
- 6.27_5路正交脉冲量与24路开关量输入(脉冲量4倍频,开关量消抖,时钟同步)
- 单片机DS18b20 温度检测液晶显示
- 109-PCF8591 4路AD数码管显示
- PCF8591 4路AD数码管显示
- PCF8591 4路AD数码管显示
- 检测表空间使用量脚本
- 栈使用量的一种检测方法
- 【STM32 .Net MF开发板学习-09】AD模拟量采集
- PLC模拟量输入的软件滤波使用方法
- 研华工控模拟量输入相关概念
- 树莓派使用PCF8591读取模拟量传感器
- 使用自动属性减少代码输入量
- 例化的方法实现多路开关量输入
- 物理模拟&碰撞检测 2017-2-4
- 使用sql server访问AD中的信息
- 简易的自定义闹钟
- 作为技术博客的开始
- ubuntu环境无pthread_mutex_lock 函数 man 手册
- 一个web应用的诞生(5)--数据表单
- Struts2-16 自定义拦截器
- 4路AD中的4路检测外部模拟量输入 使用液晶显示
- 谷哥的小弟学后台(20)——数据库连接池
- 个推 接入 流程 总览
- 二分图匹配之 匈牙利算法简单学习后感
- A Knight's Journey
- 剑指offer19——二叉树的镜像
- MacBook Pro android 7.0 编译环境搭建
- 面试总结~~附:内存复制函数mymemcpy
- pat 1111. Online Map (30)