395 基于51单片机按摩椅和智能风扇控制系统【毕设课设】

本文详细描述了一种基于51单片微型计算机的按摩床控制系统,包括恒温加热、按键调节、显示、电机控制、速度检测及PID控制等模块,还展示了I2C通信接口和AT24C02/DS18B20温度传感器的使用。
摘要由CSDN通过智能技术生成

本次设计是基于51单片微型计算机的按摩床控制系统。按摩床的控制系统由恒温加热模块,按键调节模块,LCD显示模块,PWM控制电机转动按摩模块,霍尔电路测速模块,PID精准控速模块,定时模块,报警模块组成。当启动按摩床时,系统会驱动电机进行按摩同时加热系统会开始加热按摩区域,通过按键来调节按摩频率和力度,以及按摩各部位温度的调节,和按摩时间的设定。温度过高或者按摩床工作不正常就会有蜂鸣器进行警报,或是设定时间到了则蜂鸣器提醒。从而完成整个按摩过程。

完整版 电路图和程序代码 下载地址

https://pan.baidu.com/s/1ynP7vicusPz9bDPensw_lw?pwd=8888

部分代码展示
#include <at24c02.h>
#include <ds18b20.h>
void i2c_init()
{
 sda = 1;
 nop();
 scl = 1;
 nop();
}
void start() //启动i2c
{
 sda = 1;
 scl = 1;
 nop();//延时必须大于4.7us,此约为五微秒
 sda = 0; //在scl为高电平时,sda一个下降沿为启动信号
 nop();
}
//stop:
void stop() //停止i2c
{
 sda = 0;
 scl = 1;
nop();
 sda = 1; //在scl为高电平时,sdasda一个上升沿为停止信号
nop();
}
//ack:
void ack() //应答信号0
{
 uchar i = 0; //等待变量
 scl = 1;//在scl为高电平期间等待应答
nop();
 while((sda == 1) && i < 250)//若为应答0即退出,从机向主机发送应答信号
 i++;//等待一段时间
 scl = 0; //应答之后将scl拉低
 nop();
}
//nack:
void nack() //非应答
{
 scl = 1;//在scl为高电平期间,由主机向从机发送一个1,非应答信号
nop();
 sda = 1;
 scl = 0; //应答之后将scl拉低
nop();
}
//send byte:
void send_byte(uchar date)//写一个字节
{
 uchar i, temp;
 temp = date; //存入要写入的数据,即要发送到sda上的数据
 for(i = 0; i < 8; i++)
 { //发送8位
  temp <<= 1; //to CY 将数据的最高位移入到PSW中的CY位中
  scl = 0;//只有在scl为低电平时,才允许sda上的数据变化
nop();
  sda = CY; //将CY里的数据发送到sda数据线上
nop();//可以延时
  scl = 1; //在scl为高电平时,不允许sda上的数据变化,使数据稳定
nop();
  scl = 0;//允许sda数据线的数据变化,等待下一个数据的传输
nop();
 }
 //wait ack:发送完一个字节数据后要主机要等待从机的应答,第九位
 scl = 0;//允许sda变化
nop();
 sda = 1;//wait:ack,sda拉高等待应答,当sda=0时,表示从机的应答
nop();
}
//read: byte

uchar read1_byte() //读一个字节数据
{
 uchar i, j, k;
 scl = 0; //读之前先允许sda变化
nop(); //等待数据
 for(i = 0; i < 8; i++)
 {
  scl = 1; //不允许sda变化
nop(); //使sda数据稳定后开始读数据
  j = sda; //读出sda上的数据
  k = (k << 1)| j; //将数据通过|运算存入k中
  scl = 0;//允许sda变化等待下一位数据的到来
nop();
 }
 //delay();//可不用延时
 return k;//返回读出的数据
} 
//write:at24c02  在at24c02中的指定地址写入数据

void write_at24c02(uchar address, uchar date)
{
 start(); //启动i2c
 send_byte(write_c02);//写入期间地址和写操作
 ack(); //从机应答0
 send_byte(address); //写入写数据的单元地址
 ack(); //ack0
 send_byte(date); //在指定地址中写入数据
 ack(); //从机应答0
 stop();    //停止i2c
}	
//read: at24c02   在at24c02的指定地址中读出写入的数据

uchar read_at24c02(address)
{
 uchar dat;//用来存储读出的数据
 start(); //启动i2c
 send_byte(write_c02); //写入at24c02器件地址和写操作
 ack(); //从机应答0
 send_byte(address); //写入要读取AT24C02的数据的单元地址
 ack(); //从机应答0
 start();  //再次启动i2c
 send_byte(read_c02); //写入AT24C02器件地址和读操作
 ack();//从机应答‘0’
 dat = read_byte();//读出指定地址中的数据
 nack(); //主机发出非应答‘1’
 stop();  //停止i2c
 return dat;    //返回读出的数据
} 

unsigned char conver(unsigned char a,unsigned char b,unsigned char c)
{	
 
	if((a&0x0f)==0x0a) a=a+6;
  	if(a==b)  a=c;
	return a;
}
	

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值