C51温度采集与控制实验Word格式.docx
- 文档编号:22122915
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:28
- 大小:607.40KB
C51温度采集与控制实验Word格式.docx
《C51温度采集与控制实验Word格式.docx》由会员分享,可在线阅读,更多相关《C51温度采集与控制实验Word格式.docx(28页珍藏版)》请在冰豆网上搜索。
I2C总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。
2)I2C信号线
I2C总线只有两根双向信号线。
一根是数据线SDA另一根是时钟线SCL。
I2C总线通过上拉电阻接正电源。
当总线空闲时,两根线均为高电平。
连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA
及SCI都是线与”关系。
a)数据位的有效性规定
I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
b)起始和终止信号
SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。
起始和终止信号都是由主机发出的,在起始信号产生后,总线就处于被占用的状态;
在终止信号产生后,总线就处于空闲状态。
-F厂…=厂
SCL
c)I2C总线的数据传送速率
I2C总线的通信速率受主机控制,能快能慢,最高速率限制为100Kb/s
d)I2C总线的数据传送格式
主机向从机发送数据
4)总线的寻址
I2C总线协议有明确的规定:
采用7位的寻址字节(寻址字节是起始信号后的第一个字节)。
寻址字节的位定义
位:
7心
斗a
2^
2
0+^
1
D7〜D1位组
向从机写数据,|
1成从机的地址。
D0立是数据传送方向位,为0"
时表示王机「一I为1”时表示王机由从机读数据。
址l^w|
主机发送地址时,总线上的每个从机都将这7位地址码与自己的地址进行比较,如果相同,则认为自己正被主机寻址,根据R/位将自己确定为发送器或接收器。
从机的地址由固定部分和可编程部分组成。
在一个系统中可能希望接入多个相同的从机,从机地址中可编程部分决定了可接入总线该类器件的最大数目。
如一个从机的7位寻址位有4位是固定位,3位是可编程位,这时仅能寻址8个同样的器件,即可以有8个同样的器件接入到该I2C总线系统中。
4、LM75特征及应用
LM75A是一个使用了内置带隙温度传感器和模数转换技术的温度-数字转换
器I2C总线接口。
工作温度范围-55oC〜+125oC,精度可达0.125oC。
LM75A可设置成工作在两种模式:
正常工作模式或关断模式。
在正常工作模式中,每隔100mS^行一次温度-数字的转换,Tem寄存器保存着最后一次更新的结果;
但是,在该模式下,器件的I2C接口仍然有效,寄存器读/写操作纠结执行。
器件的工作模式通过配置寄存器可编程位B0业设定。
当器件上电或从关
断模式进入正常工作模式时启动温度转换。
LM75A可配置成不同的工作条件。
它可设置成在正常工作模式下周期性地对环境温度进行监控或进入关断模式来将器件功耗降至最低。
OS俞出有2种可选
的工作模式:
OS:
匕较器模式和O冲断模式。
OS俞出可选择高电平或低电平有效。
LM75-OS
EC-SCL
EC-SDA
温度寄存器(Temp
Temp寄存器存放着每次A/D转换的或监控到的数字结果。
包含2个8位的
数据字节,由一个高数据字节(MS和一个低数据字节(LS)组成。
其中,只有11位用来存放分辨率为0.125oC的Tem数据(以二进制补码数据的形式)
TempMS字节
TempLS字节
MSB
LSB
B7
B(5
B5
B4
B3
B2
Bl
BO
B6
未用
对于
正的温
去度值
【,
D10=
0T
=Ter
np*0.
125oC
负的温
仞T
=ETe
mp白
勺补码
*0.11:
!
3oC
X
LM75/主要应用于系统温度管理、个人计算机、电子设备和工业控制器等地方,典型应用实例为:
VOC电悴
步进电机是一种将电脉冲转化为角位位移的执行机构。
通俗一点讲:
当步进驱动器接收到一个脉冲从头到尾,它就驱动步进电机按设定的方向转动一个固定的角度(即步进角)。
所以,我们可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的,同时也可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调整的目的。
本实验中驱动电机的信号仍由PW脉冲方波控制。
原理图如图8所示。
6、程序框图
主程序
每1mS进入一次中断(T1)
中断服务程序幵始
初始化
Syslnit()幵启16位定时器TO
Displnit()数据管显示初始化
幵启中断T1
I2C_Init()I2C总线协议初始化
设定PWM温度初值
更新扫描数据
判断延时标志flag
读取温度
显示温度
为0,BUZZE取反
扫描键盘
比较cnt与temp,设置
无
PwmValue直为差的绝
对值
判断是否有键按下
设置延时标志flag的值有
中断时间到蜂鸣器响0.5s
判断k
+'
温度cnt++‘,'
温度cnt--
若
相
大
小
等
则
致
送
热
冷
风
灯
亮
更新DispBuf
PwmValue勺值
控制脉冲宽度
更新温度值
思考题:
设定温度的按键改用外部中断模式,电路如何修改
(画示意图)?
程序如何修改,写出中断服务程序
答:
将KEY与KEY键通过跳线分别接到INT0与INT1接口上。
开启中断:
Syslnit()
{…
EA=0;
//禁止总中断
EX1=1;
//使能/INT1中断
EX0=1;
//使能/INTO中断
EA=1;
}//使能总中断中断服务程序:
voidINT0SVC()interrupt0
{
if(cnt<
=31)cnt++;
}
voidINT1SVC()interrupt2
if(cnt>
=17)cnt--;
七、总结及心得体会
通过本实验课程,我对中断和定时有了较深入的了解,对单片机的认识也
进一步的提高。
在编程的过程中,遇到了一些问题,本质原因是因为对单片
机的认识不足,对工作机理不清楚,望文生义,从而导致一些程序行不通,不过最终还是在老师和同学的帮助下,顺利的完成了实验。
我想,对于语言来说,要想机器懂你,就必须遵守规则,所以,先弄懂是怎么运行的,再着手编程,会更顺理成章一点。
八、对本实验过程及方法、手段的改进建议
九、附录
1、学号+秒表+按键+电机的程序
2、温度采集控制(数码管+直流电机)程序
附录1:
学号+秒表+按键+电机的程序
/*
main.c
加减计数器
*/
#inelude<
reg51.h>
absacc.h>
ctype.h>
//定义按键
按键1
按键2
sbitKEY1=P2A0;
//
sbitKEY2=卩2八1;
sbitBUZZER=卩3八2;
sbitPWM=P3A3;
//定义PW最大级数
#definePWM_MAX50
//定义PW级数,分为0〜PWM_MAX级
unsignedcharent=18;
//定义计数器变量
intflag=1;
unsignedcharPwmValue;
unsignedcharsec=0;
unsignedintcount=998;
codeunsignedcharTab[]=
{//定义0123456789AbCdEF勺数码管字型数据0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F
};
unsignedcharDispBuf[8];
函数:
KeyScan()
功能:
键盘扫描
返回:
扫描到的键值
unsignedcharKeyScan()
unsignedchark='
\0'
;
if(KEY1==0)k='
if(KEY2==0)k='
-'
returnk;
T1INTSVC()
定时器T1的中断服务函数
voidT1INTSVC()interrupt3
codeunsignedcharcom[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
staticunsignedcharn二0;
staticunsignedchart=0;
TR1=0;
TH1=0xFC;
TL1=0x66;
TR1=1;
P1=0xFF;
//暂停显示
XBYTE[0xE800]=〜DispBuf[n];
//更新扫描数据
P1=~com[n];
//重新显示
n++;
t++;
n&
二0x07;
if(flag==0)
BUZZER二!
BUZZER;
}
if(n==8){n=0;
{count++;
//统计毫秒
//pwmcnt++;
if(count==999)//一秒时间到
sec++;
count=0;
DispBuf[4]=Tab[sec/10];
//分离十位
DispBuf[3]=Tab[sec%10];
//分离个位
if(sec==30){sec=0;
sec)
PwmValue=cnt-sec;
else
PwmValue=sec-cnt;
if(t>
=PWM_MAX)t=0;
if(t<
=PwmValue)
PWM=1;
PWM=0;
DispClear()
清除数码管的所有显示
voidDispClear()
unsignedchari;
for(i=0;
i<
8;
i++)
DispBuf[i]=0x00;
}}
DispChar()
在数码管上显示字符
参数:
x:
数码管的坐标位置(0〜7)
c:
要显示的字符(仅限16进制数字和减号)dp:
是否显示小数点,0—不显示,1—显示
DispInit()
数码管扫描显示初始化
voidDispInit()
DispClear();
//初始为全灭
EA=0;
TMOD&
二0x0F;
TMOD|=0x10;
ET1=1;
EA=1;
Delay()
延时0.01〜2.56s参数:
t>
0时,延时(t*0.01)s
t=0时,延时2.56s说明:
晶振用11.0592MHz
voidDelay(unsignedchart){
do
THO=OxDC;
TLO=0x00;
TR0=1;
while(!
TF0);
TR0=0;
TF0=0;
}while(--t!
=0);
Syslnit()功能:
系统初始化
voidSysInit()
二0xF0;
TMOD|=0x01;
//设置定时器T0为16位定时器DispInit();
//数码管扫描显示初始化
PwmValue=PWM_MAX/2;
//设置PW初值PWM=1;
}//PWM管脚为高voidmain()
unsignedchark;
//定义键值变量
Syslnit();
//系统初始化
DispBuf[7]=Tab[1];
DispBuf[6]=Tab[5];
DispBuf[1]=Tab[cnt/10];
DispBuf[0]=Tab[cnt%10];
for(;
)
{for(;
{Delay(5);
//延时50ms
k=KeyScan();
//键盘扫描
if(k!
='
flag=0;
Delay(50);
flag=1;
}break;
switch(k)//判断键值,执行具体功能
{case'
:
if(ent<
25)
cnt++;
break;
ease'
if(ent>
16)ent--;
default:
DispBuf[O]=Tab[cnt%10];
Delay(5);
如果按键抬起,退出循环
if(KeyScan()=='
)break;
附录2:
温度采集控制(数码管+直流电机)程序
LM75A数字温度计
#include"
l2C.h"
#include<
string.h>
#inelude<
#include<
//定义按键
sbitLED0=P2A2;
sbitLED1=P2A3;
sbitLED2=卩2八4;
定义LED由PO.O控制//定义LED由P0.0控制
定义LED由P0.0控制#definePWM_MAX50
//定义PW级数,分为0〜PWM_MAX级unsignedcharPwmValue;
unsignedcharent=25;
unsignedinttemp;
{//定义0123456789AbCdE的数码管字型数据0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
if(cnt==temp/8)
{LED2=0;
LED1=1;
LED0=1;
temp/8)
{PwmValue=cnt-temp/8;
if(PwmValue>
1)
{LED0=0;
LED2=1;
}}
{PwmValue二temp/8-cnt;
{LED1=0;
延时0.01〜2.56s
t=0时,延时2.56s
说明:
Syslnit()
//设置定时器T0为16位定时器
DispInit();
I2C_Init();
//设置PW初值
//PWM管脚为高
LM75A_GetTemp
读出LM75A勺温度值
LM75A温度寄存器的数值(乘以0.125可得到摄氏度值)
intLM75A_GetTemp()
unsignedcharbuf[2];
intt;
I2C_Gets(0x90,0x00,2,buf);
t=buf[0];
t<
<
=8;
t+=buf[1];
t>
>
=5;
//去掉无关位
returnt;
DispTemp()
在数码管上显示出温度值
t:
补码,除以8以后才是真正温度值
voidDispTemp(intt)
//整数部分
unsignedintd;
//小数部分
//分离出整数和小数部分
i=t/8;
DispBuf[7]=Tab[i/10];
DispBuf[6]=Tab[i%10]+0x80;
d=(t%8)*125;
DispBuf[5]=Tab[d/100];
DispBuf[4]=Tab[d%100/10];
DispBuf[3]=Tab[d%100%10];
//整数部分转换成字符串
voidmain()
temp=LM75A_GetTemp();
DispTemp(temp);
if
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C51 温度 采集 控制 实验