网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
09月05日
漏签
0
天
51单片机吧
关注:
73,973
贴子:
302,528
看贴
图片
吧主推荐
游戏
9
回复贴,共
1
页
<<返回51单片机吧
>0< 加载中...
使用51单片机,程序能驱动AM2301,为什么把51单片机STC12C5A60S2
只看楼主
收藏
回复
晨钟暮鼓世间人
童生
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
使用51单片机,程序能驱动AM2301,为什么把51单片机换为STC12C5A60S2单片机就不能正常显示了,
只为兴趣a115
探花
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
改一下延时
2025-09-05 02:17:49
广告
不感兴趣
开通SVIP免广告
只为兴趣a115
探花
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这块单片机处理速度要比89c51快
晨钟暮鼓世间人
童生
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
/***************************************************************
名 称 :AM2301温湿度监测
功 能 :1602显示采集到的温湿度并用串口发送温湿度数据到上位机
并接受上位机的控制
(波特率 9600)
说 明 : 无
修 改 :无
日 期 :2011-3-18
****************************************************************/
//头文件
#include <STC12C5A60S2.h>
#include <intrins.h>
#include <stdio.h>
#include "LCD1602.h"
#include "uart.h"
//宏定义
typedef unsigned char U8; /* 无符号8位整型变量 */
typedef signed char S8; /* 有符号8位整型变量 */
typedef unsigned int U16; /* 无符号16位整型变量 */
typedef signed int S16; /* 有符号16位整型变量 */
typedef unsigned long U32; /* 无符号32位整型变量 */
typedef signed long S32; /* 有符号32位整型变量 */
typedef float F32; /* 单精度浮点数(32位长度) */
typedef double F64; /* 双精度浮点数(64位长度) */
#define uchar unsigned char
#define uint unsigned int
//----------------IO口定义-------------------//
sbit DHT = P1^4 ; //AM2301端口定义
sbit JDQ = P2^7; //继电器端口定义
//----------------全局变量--------------------//
bit flagtemp;//温度正负标志位,k U8count,
bit flagsendtemp;//发送温度的标志位
U8 U8FLAG;
U8 U8temp;
U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
U8 U8comdata;
U16 DHTData1,DHTData2;
U8 outdata[5]; //定义发送的字节数
U8 indata[5];
U8 count, count_r=0;
U8 RevData;//串口数据接收
U8 str[5];
U8 data tab[6]={0x00,0x00,0x00,0x00,0x00,0x00};//存储温湿度数据
U8 code dis1[]={"Humdity: % "} ;
U8 code dis2[]={"Temper: c "} ;
/*********************************************************
函数名称 : 延时子程序
功 能 : 延时
说 明 : 无
*********************************************************/
void Delay(U16 j)
{ U8 i;
for(;j>0;j--)
{
for(i=0;i<;i++);
}
}
void Delay_10us(void)//延时10uS
{
U8 i;
i--;
i--;
i--;
i--;
i--;
i--;
}
/*********************************************************
函数名称 : 读温湿度字节函数
功 能 : 读取温湿度每个字节
说 明 : 无
*********************************************************/
void COM(void)//读字节
{
U8 i;
for(i=0;i<8;i++)
{
U8FLAG=2;
while((!DHT)&&U8FLAG++);
Delay_10us();
Delay_10us();
Delay_10us();
U8temp=0;
if(DHT)U8temp=1;
U8FLAG=2;
while((DHT)&&U8FLAG++);
//超时则跳出for循环
if(U8FLAG==1)break;
//判断数据位是0还是1
// 如果高电平高过预定0高电平值则数据位为 1
U8comdata<<=1;
U8comdata|=U8temp; //0
}//end i
}
//--------------------------------------------------------------
//--------------------------------
//-----湿度读取子程序 ------------
//--------------------------------
//----以下变量均为全局变量--------
//----温度高8位== U8T_data_H------
//----温度低8位== U8T_data_L------
//----湿度高8位== U8RH_data_H-----
//----湿度低8位== U8RH_data_L-----
//----校验 8位 == U8checkdata-----
//----调用相关子程序如下----------
//---- Delay();, Delay_10us();,COM();
//--------------------------------
/*********************************************************
函数名称 : 温湿度读取函数
功 能 : 读取温湿度数据
说 明 : 无
*********************************************************/
void RH(void)//读取温湿度
{
//主机拉低 1-5ms
DHT=0;
Delay(5);
DHT=1;
//总线由上拉电阻拉高 主机延时40us
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
//主机设为输入 判断从机响应信号
DHT=1;
//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
if(!DHT) //T !
{
U8FLAG=2;
//判断从机是否发出 80us 的低电平响应信号是否结束
while((!DHT)&&U8FLAG++);
U8FLAG=2;
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
while((DHT)&&U8FLAG++);
//数据接收状态
COM();
U8RH_data_H_temp=U8comdata;
COM();
U8RH_data_L_temp=U8comdata;
COM();
U8T_data_H_temp=U8comdata;
COM();
U8T_data_L_temp=U8comdata;
COM();
U8checkdata_temp=U8comdata;
DHT=1;
//数据校验
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
if(1)
{
U8RH_data_H = U8RH_data_H_temp;//湿度
U8RH_data_L = U8RH_data_L_temp;
DHTData1 = U8RH_data_H;
DHTData1 <<= 8;
DHTData1 |= U8RH_data_L;//获得完整的湿度
tab[0]=DHTData1/100+0x30; //湿度百位
tab[1]=DHTData1%100/10+0x30;//湿度十位
tab[2]=DHTData1%10+0x30; //湿度个位
U8T_data_H = U8T_data_H_temp;//温度
U8T_data_L = U8T_data_L_temp;
DHTData2 = U8T_data_H;
DHTData2<<=8;
DHTData2 |= U8T_data_L;//获得完整的温度
if(DHTData2&0x8000)//如果温度为负值
{
flagtemp=1;
DHTData2&=0x7FFF;
}
tab[3]=DHTData2/100+0x30;
tab[4]=DHTData2%100/10+0x30;
tab[5]=DHTData2%10+0x30;//
U8checkdata=U8checkdata_temp;
}//fi
}//fi
}
/*********************************************************
函数名称 : 显示温湿度函数
功 能 : 显示温湿度数据
说 明 : 无
*********************************************************/
void display()
{
U8 m;
//====显示湿度======
m = 0 ;
writecmd(0x80);
while(dis1[m] != '\0')//显示字符
{
writedata(dis1[m]) ;
m++ ;
}
writecmd(0x89);
writedata(tab[0]);
writedata(tab[1]);
writedata('.');
writedata(tab[2]);
//=====显示温度=====
m = 0 ;
writecmd(0xc0);
while(dis1[m] != '\0')//显示字符
{
writedata(dis2[m]) ;
m++ ;
}
writecmd(0xC8);
if(flagtemp)writedata('-');
else writedata('+');
writecmd(0xC9);
writedata(tab[3]);
writedata(tab[4]);
writedata('.');
writedata(tab[5]);
}
/*---------------------------------------------------
函数名称 :主函数 mani()
功 能 :将采集到的温湿度数据用1602显示并发送到上位机
说 明 :无
----------------------------------------------------*/
void main()
{
//U8 buff[4];
U8 timecount;
UART_Init();
init_LCD();
while(1)
{
RH();//调用温湿度读取子程序
display(); //1602显示数据
//发送数据到上位机
timecount++;
if(timecount/2==0)flagsendtemp=1;
if(timecount>6)
{
timecount=0;
UART_Send_Byte('R');//上位机识别湿度的标志
UART_Send_Byte(tab[0]);
UART_Send_Byte(tab[1]);
UART_Send_Byte('.');
UART_Send_Byte(tab[2]);
// UART_Send_Byte('E');//上位机结束标志
}
if(flagsendtemp)
{
flagsendtemp=0;
UART_Send_Byte('T');//上位机识别温度的标志
UART_Send_Byte(tab[3]);
UART_Send_Byte(tab[4]);
UART_Send_Byte('.');
UART_Send_Byte(tab[5]);
//UART_Send_Byte('E');//上位机结束标志
}
Delay(20000);//读取模块数据周期不易小于 2S
}//end of whie
}// end of main
/*********************************************************
函数名称 : 串口接收中断服务子程序
功 能 : 接收上位机发来的数据并驱动继电器工作
说 明 : 控制湿度有两个分机构成,此为其中之一
为加大湿度
*********************************************************/
void serial() interrupt 4
{
RevData = SBUF;
RI = 0;
switch (RevData)
{
case 'a': //加大湿度
JDQ = 0;
break;
/*case 'm': //降低湿度
JDQ = 0;
break;*/
case 's': //停止
JDQ = 1;
break;
default:
break;
}
}
长运河
贡士
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这个是单时钟周期单片机,速度比普通51快12倍,驱动程序相应的要把延时增加12倍才行
晨钟暮鼓世间人
童生
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
谢谢,我试试
辩护荣辱之境
童生
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
楼主 求一个基于C51的程序 将温湿度显示在晶体管上,重谢!!
Lion
白丁
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
楼主求一个c51的程序
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示