1602多功能万年历,温湿度计PCB抄板
PCB抄板单片机源程序如下:
- PCB抄板#include <reg52.h>
- typedef unsigned int u16;
- typedef unsigned char u8;
- sbit k2=P3^2; //K1 K2 K3 K4按键接口,建议从左到右接K1-K4
- sbit k1=P3^5;
- sbit k3=P3^3;
- sbit k4=P3^4;
- sbit DQ=P3^6;
- sbit beep=P1^6;
- sbit Data=P2^0; //有源蜂鸣器在P16口
- sbit lcden=P1^4; //LCD1602接口定义
- sbit lcdrs=P1^0;
- sbit lcdrw=P2^6;
- sbit bg=P2^7; //背光变量接入LCD1602的K极,通过bg的高低电平就可控制自动熄灭与点亮
- u8 k,e,d,o=1,p=1,temp,nxflag=0,mbflag=0,tianmax;
- float temperature; //温度变量,18B20接收时为浮点数
- u8 miao1,miao2,fen1,fen2,shi1,shi2,tian1,tian2,wk,tem1,tem2,tem3,wendufu;
- u8 day=1,mon=1,day1,day2,yue1,yue2,mbw,n=0,m=0,beiguang,RH,RL,TH,TL,tempH,tempL;
- u8 se1,se2,mon1,mon2,hou1,hou2,min1,min2,MB2,nian1,nian2,nian3,nian4;
- u16 y,MB1;
- u16 temper,buchang,tempwarn=0,tempwarn1=500; //tempwarn为温度下限,1为温度上限
- u8 code set[]={"NaoZhong Status"}; //上电后傻瓜调节模块
- u8 code tempwarng[]={"Wendu Waring!"};
- u8 code temmin[]={"Min"};
- u8 code temmax[]={"Max"};
- u8 code naozhongON[]={" ON"};
- u8 code naozhongOFF[]={"OFF"};
- u8 code setsucces[]={"Set Success!"};
- u8 code thanks[]={"Welcome to use !"};
- u8 code thanksu[]={"thanks for using"};
- u8 code make[]={"Designed by LY"};
- u8 code MB[]={"Stopwatch"};
- u8 code week1[]={"[MON]"};
- u8 code week2[]={"[TUE]"};
- u8 code week3[]={"[WED]"};
- u8 code week4[]={"[THU]"};
- u8 code week5[]={"[FRI]"};
- u8 code week6[]={"[SAT]"};
- u8 code week7[]={"[SUN]"};
- void delay(unsigned int z) //定义延时函数
- {
- unsigned int x,y;
- for(x=z;x>0;x--)
- for(y=1;y>0;y--);
- }
- void DHT11_delay_us(u8 n)
- {
- while(--n);
- }
- void DHT11_delay_ms(u16 z) //定义DHT11延迟函数
- {
- u16 i,j;
- for(i=z;i>0;i--)
- for(j=110;j>0;j--);
- }
- void DHT11_start()
- {
- Data=1;
- DHT11_delay_us(2);
- Data=0;
- DHT11_delay_ms(20); //延时18ms以上
- Data=1;
- DHT11_delay_us(30);
- }
- u8 DHT11_rec_byte() //接收一个字节
- {
- u8 i,dat=0;
- for(i=0;i<8;i++) //从高到低依次接收8位数据
- {
- while(!Data); //等待50us低电平过去
- DHT11_delay_us(8); //延时60us,如果还为高则数据为1,否则为0
- dat<<=1; //移位使正确接收8位数据,数据为0时直接移位
- if(Data==1) //数据为1时,使dat加1来接收数据1
- dat+=1;
- while(Data); //等待数据线拉低
- }
- return dat;
- }
- void DHT11_receive() //接收40位的数据
- {
- u8 R_H,R_L,T_H,T_L,revise;
- DHT11_start();
- if(Data==0)
- {
- while(Data==0); //等待拉高
- DHT11_delay_us(40); //拉高后延时80us
- R_H=DHT11_rec_byte(); //接收湿度高八位
- R_L=DHT11_rec_byte(); //接收湿度低八位
- T_H=DHT11_rec_byte(); //接收温度高八位
- T_L=DHT11_rec_byte(); //接收温度低八位
- revise=DHT11_rec_byte(); //接收校正位
- DHT11_delay_us(25); //结束
- if((R_H+R_L+T_H+T_L)==revise) //校正
- {
- RH=R_H;
- RL=R_L;
- TH=T_H;
- TL=T_L;
- }
- }
- }

芯片解密