设计要求:本设计以MCS-51系列单片机为核心,采用常用电子器件设计,一个电源开关,用一台直流电机控制百叶窗叶片的旋转(正转/反转),用一个光敏电阻传感器测量室内光强度,并用两位数码管显示测量结果,设置三个按键:手动/自动、手动正转和手动反转,用一个发光二极管显示手动/自动状态,自动状态时二极管亮。设置两个极限位置保护行程开关,用于保护百叶窗叶片:当正转到极限位置压下行程开关时,电机停止正转,但还可以反转;当反转到极限位置压下行程开关时,电机停止反转,但还可以正转。按键输入采用中断方式,按键中断请求信号接INT0。单片机根据设定光强S1和S2和实测光强P来控制电机M的动作,分别使电机正转、反转或者停转来达到控制光强弱的功能。
使用的设备:光敏电阻传感器,直流电机,两位数码管
实现功能:自动模式和手动模式
实现方式:采用中断方式
系统框图:
程序流程图:
目录
I2C总线的设定
代码如下:
#include <REGX52.H>
#include "I2C.h"
void I2CStart() //I2C开始
{
I2C_SCL=1;
I2C_SDA=1;
I2C_SDA=0;
I2C_SCL=0;
}
void I2CStop() //I2C结束
{
I2C_SCL=0;
I2C_SDA=0;
I2C_SCL=1;
I2C_SDA=1;
}
bit I2CWrite(unsigned char dat) //I2C写操作,dat-代写数值,ack-返回应答值
{
bit ack; //用来暂存应答值
unsigned char mask; //用来暂存数据
for(mask=0x80;mask!=0;mask>>=1)
{
if((mask&dat))
I2C_SDA=1;
else
I2C_SDA=0;
I2C_SCL=1; //拉高SCL
I2C_SCL=0; //再拉低SCL,完成一个周期
}
I2C_SDA=1; //主机释放SDA
I2C_SCL=