资源简介

基于单片机DS1302+DS18B20+DHT11+LCD12864的万年历设计,单片机是用STC12C5A60S2,具有时钟调节,温度报警,按键翻页功能。

资源截图

代码片段和文件信息

#include
#include
#include
#define uint unsigned int
#define uchar unsigned char
#define KeyIN (P2&0x38)
 
unsigned char up_limit=27;
unsigned char down_limit=10;
uchar data up_value[3];  //上下限温度存放数组
uchar data down_value[3];

sbit RS=P3^5;  //12864引脚
sbit RW=P3^4;
sbit E=P4^0;

//sbit shijian=P3^2;
sbit wenshidu=P3^3;
sbit SetKey=P2^3; //按键功能:设置
sbit PlusKey=P2^4; //按键功能:加
sbit ReduceKey=P2^5; //按键功能:减
sbit Alarm=P2^7;
//sbit LCD_RES=P4^6;

sbit SCLK=P3^7;  //ds1302引脚
sbit IO=P3^6;
sbit RES=P2^1;

sbit DQ=P2^2;

sbit ACC0 = ACC^0;
sbit ACC7 = ACC^7;

sbit DHT=P2^0;

uint tvalue;
uchar tflag;
uchar data disdata[4];
uchar data timedata[12];

uchar table[]=“现在温度“;//数组形式
uchar table1[]=“现在湿度“;
uchar table2[]=“TH“;
uchar table3[]=“TL“;
uchar shiZshiXwenZwenXcheck;
uchar tr_shiZtr_shiXtr_wenZtr_wenX;
uchar flag;
uchar keyvalue;
uchar Clear_cont;
uchar time_a;
char read_data();

void delay(uint del)  //延时xms
{
uint ij;
for(i=del;i>0;i--)
for(j=110;j>0;j--);
}
void delay_1ms(uint i)
{
uint j=88;
for(;i>0;i--)
{
while(j>0)j--;
}
}
void delay10ms(void)   //误差 -0.000000000001us
{
    unsigned char abc;
    for(c=14;c>0;c--)
        for(b=168;b>0;b--)
            for(a=22;a>0;a--);
}
void delay_10us()
{
uchar i;
i--;
i--;
i--;
i--;
i--;
i--;
}
/*******************************************************************
12864 程序
******************************************************************/
void writecom(uchar com)
{
P0=com;
RS=0;
RW=0;
E=0;
delay(1);
E=1;
delay(1);
}
void lcdwritedate(uchar date)
{
P0=date;
RS=1;
RW=0;
E=0;
delay(1);
E=1;
delay(1);
}

void lcdinit()
{

// PSB=1;
writecom(0x01);
delay(1);
writecom(0x30);
delay(1);
writecom(0x06);
delay(1);
writecom(0x0c);
delay(1);
}
void clear_lcd()
{
writecom(0x34);
delay(5);
writecom(0x30);
delay(5);
writecom(0x01);
delay(5);

}
/*************************************************************************
 dh11程序
**************************************************************************/
void read_init()
{
DHT=0;   //主机使DHT11低电平并延时至少18ms
delay_1ms(21);
DHT=1;   //主机置DHT11高电平20~40us并等待从机相应
delay_10us();
delay_10us();
delay_10us();
delay_10us();
DHT=1;
if(!DHT)  //从机发出响应信号
{
flag=2;
while((!DHT)&&flag++);//等待从机发高电平结束
flag=2;
while(DHT&&flag++); //开始采集数据
tr_shiZ=read_data();//采集湿度整数部分
tr_shiX=read_data();//采集湿度小数部分
tr_wenZ=read_data();//采集温度整数部分
tr_wenX=read_data();//采集温度小数部分
check=read_data(); //采集校验位
}
DHT=0;
delay(20);//采集完数据后    
}
char read_data()
{
uchar inumtemp;
num=0;
for(i=0;i<8;i++)
{
flag=2;
while((!DHT)&&flag++);//等待50毫秒低电平
delay_10us();//延时判断0还是1
delay_10us();
delay_10us();
    delay_10us();
if(DHT==1) 
{
temp=1;
flag=2;
while(DHT&&flag++);
}

评论

共有 条评论