内容:本系统就是充分利用了8051芯片的I/O引脚。系统以采用MCS-51系列单片机89c51为中心器件来设计简易温控风扇系统,实现了能根据设置的上下限温度,来启动风扇的工作与停止,低于设置的下限温度,风扇不工作,在上限与下限之间风扇以50%的转速工作,温度高于上限,风扇全速工作。 实施方案: (1) 设计电路布局图 (2) 准备好所需的材料 (3) 按照电路图焊接好元件 (4) 编写单片机程序 (5) 对单片机进行调试 预期目标:在每个温度区间保证风扇按要求运行、 部分程序:
#include <reg52.h> #include <intrins.h> #include <absacc.h> #include <math.h> #include "0832.h" #define uchar unsigned char #define uint unsigned int
//定义LCD1602端口 sbit E=P2^6; //1602使能引脚 sbit RS=P2^7; //1602数据/命令选择引脚 sbit RW=P2^5;
sbit LED_RED=P2^2; sbit LED_YELLOW=P2^1; sbit LED_GREEN=P2^0; sbit SET_KEY=P3^4; sbit ADD_KEY=P3^5; sbit SUB_KEY=P3^6; sbit BUZZ=P3^7; sbit jdq=P2^4; int WARNING=250; uint DA; bit FlagStartRH=0; bit flag_BJ=0; bit set=0; void L1602_string(uchar hang,uchar lie,uchar *p);
//定时器0初始化 void Timer0_Init() { ET0 = 1; //允许定时器0中断 TMOD = 0x11; //定时器工作方式选择 TL0 = 0xb0; TH0 = 0x3c; //定时器赋予初值 TR0 = 1; //启动定时器 TL1 = 0xb0; TH1 = 0x3c; //定时器赋予初值 ET1=1; TR1=1; }
//定时器0中断 void Timer0_ISR (void) interrupt 1 using 0 { uchar RHCounter; TL0 = 0xb0; TH0 = 0x3c; //定时器赋予初值 RHCounter++; //每2秒钟启动一次温湿度转换 if (RHCounter >= 20) { FlagStartRH = 1; RHCounter = 0; } } //定时器1中断 void Timer1_ISR (void) interrupt 3 { uchar RHCounter1; TL1 = 0xb0; TH1 = 0x3c; //定时器赋予初值 RHCounter1++; if(RHCounter1>=10) { RHCounter1=0; if(flag_BJ==1) BUZZ=!BUZZ; else BUZZ=1; } }
/******************************************************************** * 文件名 : 液晶1602显示.c * 描述 : 该程序实现了对液晶1602的控制。 ***********************************************************************/
/******************************************************************** * 名称 : delay() * 功能 : 延时,延时时间大概为140US。 * 输入 : 无 * 输出 : 无 ***********************************************************************/
void delay() { int i,j; for(i=0; i<=10; i++) for(j=0; j<=2; j++); }
void delay_ms(uint ms) { uint i,j; for(i=0;i<ms;i++) for(j=0;j<110;j++); }
|