急求一个stc12c5a60s2串口程序 12MHz DHT11+MQ-5+lcd1602显示程序

查看: 3104|回复: 6
stc12c5a60s2+DH11+数码管显示程序
/************************************************
项&&目:温、湿度测量程序
单片机:STC12C5A60S2
传感器:DHT11
************************************************/
#include &stc12c5a60s2.h&
#define uint unsigned int
#define uchar unsigned char
sbit io = P2^0;& & & & & & & & & & & & //定义数据端口
uchar data_& & & & & & & & //定义全局变量
uchar RH,RL,TH,TL;& & & & & & & & //定义全局变量
unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};& & & & // 显示段码值0~9
uchar&&TempData[5]; & & & & & & & & & & & & //存储显示值的全局变量
/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void delayus(unsigned char t)
& & & & while(--t);
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void delayms(unsigned char t)
& & & & while(t--)
& & & & & & & & //大致延时1mS
& & & & & & & & delayus(245);
& & & & & & & & delayus(245);
/******************** DHT11测试模块**********************/
void start()& & & & & & & & & & & & //开始信号
& & & & io=1;
& & & & delayus(10);
& & & & io=0;
& & & & delayms(30);& & & & & & & & //10~60之间
& & & & io=1;
& & & & delayus(100);& & & & & & & & //关键时间:35-250之间
/**********************接收一个字节**********************/
uchar receive_byte()& & & & & & & & & & & &
& & & & uchar i,temp,
& & & & for(i=0;i&8;i++)
& & & & & & & & count=2;
& & & & & & & & while((!io)&&count++)& & & & & & & &
& & & & & & & & temp=0;
& & & & & & & & delayus(150);& & & & & & & & & & & & & & & & //关键时间:10~23之间
& & & & & & & & if(io==1)temp=1;
& & & & & & & & count=2;
& & & & & & & & while((io)&&count++);
& & & & & & & & if(count==1)
& & & & & & & & data_byte&&=1;
& & & & & & & & data_byte|=
& & & & return data_
/************************接收数据************************/
void receive()& & & & & & & & & & & & & & & & & & & &
& & & & uchar T_H,T_L,R_H,R_L,check,num_
& & & & start();& & & & & & & & & & & & & & & & & & & & //开始信号& & & & & & & &
& & & & io=1;& & & &
& & & & if(!io)& & & & & & & & & & & & & & & & & & & & & & & & //读取DHT11响应信号
& & & & & & & & count=2;
& & & & & & & & while((!io)&&count++);& & & & //DHT11高电平80us是否结束
& & & & & & & & count=2;
& & & & & & & & while((io)&&count++);& & & & & & & &
& & & & & & & & R_H=receive_byte();
& & & & & & & & R_L=receive_byte();
& & & & & & & & T_H=receive_byte();
& & & & & & & & T_L=receive_byte();& & & &
& & & & & & & & check=receive_byte();
& & & & & & & &
& & & & & & & & io=0;& & & & & & & & & & & & & & & & & & & &
& & & && & & & & & delayms(1);& & & & & & & & & & & & & & & & //拉低延时& & & & & & & &
& & & & & & & & io=1;& & & & & & & &
& & & & & & & & num_check=R_H+R_L+T_H+T_L;
& & & & & & & & & & & &
& & & & & & & & if(num_check=check)
& & & & & & & & {
& & & & & & & & & & & & RH=R_H;
& & & & & & & & & & & & RL=R_L;
& & & & & & & & & & & & TH=T_H;
& & & & & & & & & & & & TL=T_L;
& & & & & & & & & & & & check=num_& & & & & & & &
& & & & & & & & }& & & & & & & &
/**********************************************************************
& & & & & & & & & & & & & & & & & & & & & & & & & & & & 显示子函数
**********************************************************************/
void display()
&&& & & & P2=0
& & & & P0=TempData[0];& & & & & & & &
& & & & delayms(20);
& & & & P2=0
& & & & P2=0
& & & & P0=TempData[1];& & & &
& & & & delayms(20);
& & & & P2=0
& & & & P2=0
& & & & P0=TempData[2];
& & & & delayms(20);
& & & & P2=0
& & & & P2=0x7f;
& & & & P0=TempData[3];& & & &
& & & & delayms(20);
& & & & P2=0
/*******************************************************************
& && && & & & & & & &&&& & & & & & & & & & & & 定时器初始化子函数
*******************************************************************/
void InitTimer(void)& & & & & & & && && &&&
{& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & && & & & & &
& & & & TMOD |= 0x01;& && && && && && && & & & //定义定时器T0,工作方式1& &
& & & & TH0=()/256;
& & & & TL0=()%256;& & & & & & & & & & & & //50ms
& & & & ET0=1;
& & & & TR0=1;
& & & & EA = 1;& && && && && && && && && & & & //开总中断
/***************************主函数**************************/
void main()
& & & & P0M0=0xFF;& & & & & & & & & & & & & & & & & & & & & & & & //定义P0口为推挽输出
//& & & & P2M0=0xF0;& & & & & & & & & & & & & & & & & & & & & & & & //定义P2.4 ~ P2.7口为推挽输出&&
& & & & InitTimer();
& & & & delayms(10);
& & & & while(1)
& & & & {& & & &
& & & & & & & &
& & & & & & & & receive();& & & & & & & &
& & & & & & & &
& & & & & & & & TempData[0]=DuanMa[RH/10];& & & & & & & & & & & & & & & &
& & & & & & & & TempData[1]=DuanMa[RH%10];& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & &
& & & & & & & & TempData[2]=DuanMa[TH/10];& & & & & & & & & & & &
& & & & & & & & TempData[3]=DuanMa[TH%10];
& & & & & & & &
& & & & & & & & delayms(20);
& & & & & & & & display();& & & & & & & &
/***********************************************************************
& & & & & & & & & & & & & & & & & & & & & & & & 定时器T1中断子函数
***********************************************************************/
void timer0(void) interrupt 1&&
& & & & & & & & & & & &
& & & & TH0=()/256;
& & & & TL0=()%256;
& & & & ms++;& & & & & & & & & & & & & & & & & & & & & & & & //ms++
& & & & if(ms==50)& & & &&&& & & & & & & & & & & & & & & & //如果等于10*500us=5ms
& & & & & & & & ms=0;& & & & & & & & & & & & & & & & & & & & //ms清0& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
//& & & & display();& & & & & & & & & & & & & & & & //调用显示子函数& & & & & & & &
能问下你有STC12C5A60S2芯片的封装吗?如果有stc库最好了,谢谢。
请问楼主:资料是你自己写的吗?还是哪里的?
芯片封装可在protel99se或AD2004、AD6.9等电路软件库制作。
资料来源为参考厂家及网上的相关资料,自已改动后编写的。
有hex文件么
我想请教一下我准备做晾衣架,问下在这里加个光敏来控制光度,然后还有按键来控制晾衣架自动的开关怎么弄
Powered by急求一份DHT11+STC89C52Rc十LCD1602程序(c语言)你能发给我一份吗?谢谢5_百度知道
急求一份DHT11+STC89C52Rc十LCD1602程序(c语言)你能发给我一份吗?谢谢5
我有更好的答案
#include &reg52.h&#define uchar unsigned char
//宏定义#define uint unsigned intsbit
DHTIO = P2^7;
//管脚定义,DHT11总线输入输出;sbit
LCDRS = P2^3;
//管脚定义,1602液晶RS控制端;sbit
LCDWR = P2^4;
//管脚定义,1602液晶W/R控制端;sbit
LCDEN = P2^5;
//管脚定义,1602液晶EN使能端;uchar code table[]={'0','1','2','3','4','5','6','7','8','9'};uchar data_uchar Tem_Z,Tem_X,Hum_Z,Hum_X,Cvoid LCD_Init();
//声明LCD_Init液晶初始化函数;void LCD_Display();
//声明LCD_Display液晶显示函数;void Rec_DHT();
//声明Rec_DHT,DHT11接收数据函数; //主函数void main(){
LCD_Init();
Rec_DHT();
LCD_Display();
}}/*********延时函数********/void delay(uchar ms){
while(ms--)
for(i=0;i&250;i++);
}}/***延时10us***/void delay1(){
i--;i--;i--;
i--;i--;i--;} /********主机发出开始信号*******/void DHT11_Start()
//请结合时序图分析{
delay(20);
//保持电平时间大于18ms
//延迟等待20-40us
delay1();}/********DHT11接收一个字节数据*******/uchar receive_data(){
uchar i,temp,
data_byte=0;
for(i=0;i&8;i++)
while((!DHTIO)&&count++);//等待50us低电平结束
delay1();delay1();delay1();delay1();
if(DHTIO==1)
while((DHTIO)&&count++);
if(count==1)
data_byte&&=1;
data_byte|=
return data_}/********DHT11接收数据*******/void Rec_DHT(){
DHT11_Start();//主机发出开始信号
//拉高等待DHT11响应
if(!DHTIO)
//从机发出响应信号
while((!DHTIO) && flag++);
//判断从机是否发出 80us 的低电平响应信号是否结束
while(DHTIO && flag++);
//判断从机是否发出 80us 的高电平,若发出则开始采集数据
Tem_Z = receive_data();
//采集湿度整数部分
Tem_X = receive_data();
//采集湿度小数部分
Hum_Z = receive_data();
//采集温度整数部分
Hum_X = receive_data();
//采集温度小数部分
Check = receive_data();
//采集校验位
DHTIO = 1;
}}/*******指令码*******/void write_com(uchar com){
com=((com&0x01)&&7)|((com&0x02)&&5)|((com&0x04)&&3)|((com&0x08)&&1)|((com&0x10)&&1)|((com&0x20)&&3)|((com&0x40)&&5)|((com&0x80)&&7);
//注:此部分因采用的最小系统板电路设计原因,需要将字节信息逆置;
}/*******数据码*******/void write_data(uchar date){
date=((date&0x01)&&7)|((date&0x02)&&5)|((date&0x04)&&3)|((date&0x08)&&1)|((date&0x10)&&1)|((date&0x20)&&3)|((date&0x40)&&5)|((date&0x80)&&7);
//注:此部分因采用的最小系统板电路设计原因,需要将字节信息逆置;
LCDEN=0;}/*********************//********1602液晶显示初始化*******/void LCD_Init()
//使能低电平
write_com(0x38);
//显示模式设置,设置16*2显示,5*7点阵,8位数据接口
write_com(0x0c);
//显示开关及光标设置
write_com(0x06);
write_com(0x01);
delay(2);}/**********1602液晶显示*********/void LCD_Display(){//液晶显示第一行:温度显示;
write_com(0x0c);
write_com(0x81);delay(2);
write_data('T');delay(2);
write_data('e');delay(2);
write_data('m');delay(2);
write_data(':');delay(2);
write_com(0x86);delay(2);
write_data(table[(Tem_Z/10)]);delay(2);
//输出温度的十位
write_data(table[(Tem_Z%10)]);delay(2);
//输出温度的个位
write_data('.');delay(2);
write_data('0');delay(2);
write_data('0');delay(2);
write_com(0x8c);delay(2);
write_data(0xdf);delay(2);
write_data(0x43);delay(2);//液晶第二行:湿度显示;
write_com(0xc1);delay(2);
write_data('H');delay(2);
write_data('u');delay(2);
write_data('m');delay(2);
write_data(':');delay(2);
write_com(0xc6);delay(2);
write_data(table[(Hum_Z/10)]);delay(2);
//输出湿度的十位
write_data(table[(Hum_Z%10)]);delay(2);
//输出湿度的个位
write_data('.');delay(2);
write_data('0');delay(2);
write_data('0');delay(2);
write_com(0xcc);delay(2);
write_data('%');delay(2);}
采纳率:100%
?不会,要是C++的话我可以
给一份DS18B20做参考
这是我的程序,但没有LCD部分,希望可以给你参考链接:
密码: g2bn
1条折叠回答
其他2条回答
为您推荐:
其他类似问题
您可能关注的内容
dht11的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。dht11+1602程序_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
dht11+1602程序
你可能喜欢没有更多推荐了,
不良信息举报
举报内容:
程序不知哪出问题了一直显示0,12MHZ晶振,STC12C5A60S2单片机 LCD1602
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!网站已改版,请使用新地址访问:
DHT11 1TSTC12C5A60S2单片机温湿度采集驱动程序 SCM 开发 276万源代码下载- www.pudn.com
&文件名称: DHT11& & [
& & & & &&]
&&所属分类:
&&开发工具: C-C++
&&文件大小: 32 KB
&&上传时间:
&&下载次数: 250
&&提 供 者:
&详细说明:1TSTC12C5A60S2单片机温湿度采集驱动程序 -1TSTC12C5A60S2 of temperature and humidity acquisition driver
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&DHT11\dht11.plg&&.....\test.c&&.....\dht11.lnp&&.....\dht11.M51&&.....\dht11.hex&&.....\uart.h&&.....\uart.c&&.....\dht11_uvproj.bak&&.....\dht11_uvopt.bak&&.....\dht11.uvproj&&.....\test.LST&&.....\test.OBJ&&.....\uart.LST&&.....\uart.OBJ&&.....\dht11&&.....\dht11.uvopt&&DHT11
&[]:纯粹是垃圾&[]:纯粹是垃圾&[]:纯粹是垃圾&[]:纯粹是垃圾&[]:纯粹是垃圾&[]:有待于考证,先试试&[]:纯粹是垃圾&[]:很好,推荐下载
&近期下载过的用户:
&相关搜索:
&&&&&&&&&&
&输入关键字,在本站276万海量源码库中尽情搜索:
&[] - 高精度温湿度传感器DHT22的80c51代码
&[] - nrf24l01无线模块,使用STC12单片机,DHT11温湿度传感器
&[] - DHT11数字温度传感器的应用实例,通过51单片机可实现温度湿度在lcd1602液晶上实时显示。

我要回帖

更多关于 stc12c5a60s2单片机 的文章

 

随机推荐