主芯片为89c51,外设有电机,温度传感器,红外热释电,lcd1602,主要功能是可根据室温自动调整电机转速,并且识别人体,有人打开,无人断电,室内温度,以及上下限可按键调整,并在1602上显示。
压缩包里有原理图,pcb板,以及库。还有代码和文档。
Altium Designer画的原理图和PCB图如下:
单片机源程序如下:
#include #define uchar unsigned char //无符号字符型 宏定义 变量范围0~255 #define uint unsigned int //无符号整型 宏定义 变量范围0~65535 #include sbit dq = P2^4; //18b20 IO口的定义 sbit BGVCC = P2^7; uint temperature ; // bit flag_200ms ; bit flag_lj_en; //按键连加使能 bit flag_lj_3_en; //按键连3次连加后使能 加的数就越大了 uchar key_time,key_value; //用做连加的中间变量 bit key_500ms ; sbit hw = P2^5; uchar miao = 30; uchar flag_en; sbit buzz=P1^3; uchar code table_num[]="0123456789abcdefg"; sbit rs=P1^2; //寄存器选择信号 H:数据寄存器 L:指令寄存器 sbit rw=P1^1; //寄存器选择信号 H:数据寄存器 L:指令寄存器 sbit e =P1^0; //片选信号 下降沿触发 sbit pwm = P2^3; uchar f_pwm_l ; // uchar menu_1; //菜单设计的变量 uint t_high = 300,t_low = 200; /***********************1ms延时函数*****************************/ void delay_1ms(uint q) { uint i,j; for(i=0;i } /******************************************************************** * 名称 : delay_uint() * 功能 : 小延时。 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void delay_uint(uint q) { while(q--); } /******************************************************************** * 名称 : write_com(uchar com) * 功能 : 1602命令函数 * 输入 : 输入的命令值 * 输出 : 无 ***********************************************************************/ void write_com(uchar com) { e=0; rs=0; rw=0; P0=com; delay_uint(25); e=1; delay_uint(100); e=0; } /******************************************************************** * 名称 : write_data(uchar dat) * 功能 : 1602写数据函数 * 输入 : 需要写入1602的数据 * 输出 : 无 ***********************************************************************/ void write_data(uchar dat) { e=0; rs=1; rw=0; P0=dat; delay_uint(25); e=1; delay_uint(100); e=0; } /******************************************************************** * 名称 : write_string(uchar hang,uchar add,uchar *p) * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下 write_string(1,5,"ab cd ef;") * 输入 : 行,列,需要输入1602的数据 * 输出 : 无 ***********************************************************************/ void write_string(uchar hang,uchar add,uchar *p) { if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); while(1) { if(*p == ' for(j=0;j<110;j++);