网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
11月27日漏签0天
单片机吧 关注:212,728贴子:1,049,507
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1 2 下一页 尾页
  • 21回复贴,共2页
  • ,跳到 页  
<<返回单片机吧
>0< 加载中...

毕设求助!对大神来说应该还蛮简单的吧。。。。

  • 只看楼主
  • 收藏

  • 回复
  • 寂灭60
  • 中尉
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
有段程序,有没有大神给指出来子程序是哪些部分,当然能给出流程图最好,谢谢!!
程序是关于温度湿度监测报警系统的


  • 寂灭60
  • 中尉
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include<AT89X52.h>
#include<intrins.h>
#defineuint unsigned int
#defineuchar unsigned char
#include"1602.h"
#include<dh11.h>
uchartemp[] ="RH_SET:00%\0"; //设置的湿度值显示
uchartemp_s[] ="RH:00% TEMP:00 \0"; //实时湿度显示
sbitsw3=P1^5; //按键定义
sbitsw1=P1^3;
sbitsw2=P1^4;
sbitbaojing=P3^3;
//sbitled=P3^5;
ucharset; //变量定义
ucharnum1;
uchargetdata=55;
uintshangxian=34;
uchartemp_h,temp_t;
voidconv();
yunxing();
voidkey();
voidkongzhi();
voidzhuanhuan()//扫描数据转换
{
temp[7]=shangxian/10%10+0x30;
temp[8]=shangxian%10+0x30;
temp_s[3]=temp_h/10%10+0x30;
temp_s[4]=temp_h%10+0x30;
temp_s[3]=temp_h/10%10+0x30;
temp_s[4]=temp_h%10+0x30;
temp_s[12]=temp_t/10%10+0x30;
temp_s[13]=temp_t%10+0x30;
temp_s[14]=0xdf;
temp_s[15]='C';
}
//------------------------------------------------------------
main()
{
baojing=0;
delay(500);
baojing=1;
//led=0;
LCD_Initial(); //液晶初始化
while(1)
{
RH();
temp_t=U8T_data_H;
temp_h=U8RH_data_H;
zhuanhuan();
key();// 按键检测
kongzhi();
GotoXY(0,0);//显示起始位置 Y=0,第一行,Y=1 第二行//显示第一行
Print(temp);// 内容
GotoXY(0,1);//显示起始位置 Y=0,第一行,Y=1 第二行 显示第二行
Print(temp_s);// 内容
delay(1);
//getdate= GetADCResult(0)*3.9;
}
}
void key() //按键检测程序
{
if(set==1)//上限设置
{
if(sw1==0) //上限减功能
{
delay(50);
if(sw1==0)
{ //while(sw1==0);
if(shangxian>0) shangxian--;
else( shangxian=255);
}
}
if(sw2==0) //上限加功能
{
delay(50);
if(sw2==0)
{ //while(sw2==0);
if(shangxian<255) shangxian++;
else( shangxian=0);
}
}
}
}
void kongzhi() //控制报警
{
if((temp_h>=shangxian)|(temp_t>32)) //此处设定预设温度
{
//led=1;
num1++;
if(num1>=20)
{
num1=0;
baojing=~baojing;
}
}
else{baojing=1; }
}
DHT11
传感器接受和发送信息,然后将接收来的信息作出相应的判断和处理,然后反馈到显示器。
#include<at89x52.h>
#include<intrins.h>
// aem
typedefunsigned char U8; /* defined for unsigned 8-bits integervariable 无符号8位整型变量 */
typedefsigned char S8; /* defined for signed 8-bits integer variable 有符号8位整型变量 */
typedefunsigned int U16; /* defined for unsigned 16-bits integervariable 无符号16位整型变量 */
typedefsigned int S16; /* defined for signed 16-bits integer variable 有符号16位整型变量 */
typedefunsigned long U32; /* defined for unsigned 32-bits integervariable 无符号32位整型变量 */
typedefsigned long S32; /* defined for signed 32-bits integer variable 有符号32位整型变量 */
typedeffloat F32; /*single precision floating point variable (32bits) 单精度浮点数(32位长度) */
typedefdouble F64; /* double precision floating pointvariable (64bits) 双精度浮点数(64位长度) */
//
#defineuchar unsigned char
#defineuint unsigned int
#define Data_0_time 4 //相当于用Data_0_time代替4.
//----------------------------------------------//
//----------------IO口定义区--------------------//
//----------------------------------------------//
sbit DQ =P3^0 ;
//----------------------------------------------//
//----------------定义区--------------------//
//----------------------------------------------//
U8 U8FLAG,k;
U8 U8count,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;
U8 outdata[5]; //定义发送的字节数
U8 indata[5];
U8 count, count_r=0;
U16U16temp1,U16temp2;
//以上为变量的定义.
void COM(void);
void Delay2(U16 j) //延时函数
{ U8 i;
for(;j>0;j--)
{
for(i=0;i<27;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;


2025-11-27 02:59:59
广告
不感兴趣
开通SVIP免广告
  • 寂灭60
  • 中尉
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
while((!DQ)&&U8FLAG++);
Delay_10us();
Delay_10us();
Delay_10us();
U8temp=0;
if(DQ)U8temp=1;
U8FLAG=2;
while((DQ)&&U8FLAG++);
//超时则跳出for循环
if(U8FLAG==1)break;
//判断数据位是0还是1
// 如果高电平高过预定0高电平值则数据位为 1
U8comdata<<=1; //左移1位
U8comdata|=U8temp; //U8comdata与U8temp相或,结果保存在U8comdata中.
}
}
//--------------------------------
//-----湿度读取子程序 ------------
//--------------------------------
//----以下变量均为全局变量--------
//----温度高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)
{
//主机拉低18ms
DQ=0;
Delay2(180);
DQ=1;
//总线由上拉电阻拉高主机延时20us
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
//主机设为输入判断从机响应信号
DQ=1;
//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行
if(!DQ) //T !
{
U8FLAG=2;
//判断从机是否发出 80us 的低电平响应信号是否结束
while((!DQ)&&U8FLAG++);
U8FLAG=2;
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
while((DQ)&&U8FLAG++);
//数据接收状态
COM(); //调用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;
DQ=1;
//数据校验
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp;
U8checkdata=U8checkdata_temp;
}//对数据作出相应的处理与运算.
}
}
2、LCD1602
1602将接受来的信息进过字符转换,反馈到了液晶屏上面,同时我们可以根据需要加减所学要的预设湿度值。
#include<at89x52.h>
#include<intrins.h>
#defineuint unsigned int
defineuchar unsigned char
void delay(uint z) //延时函数
{
uint a,b;
for(a=z;a>0;a--)
for(b=120;b>0;b--);
}
sbitLcdRs = P1^0;
sbitLcdRw = P1^1;
sbitLcdEn =P1^2;
sfr DBPort =0x80; //端口定义,LcdRs就代表P1^0口,以下同.
//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口
unsignedchar LCD_Wait(void) //内部等待函数,LCD的显示需要一定的延迟时间.
{
LcdRs=0;
LcdRw=1; _nop_();
LcdEn=1; _nop_();
LcdEn=0;
return DBPort;
}
//向LCD写入命令或数据
#defineLCD_COMMAND 0 // Command
#defineLCD_DATA 1 // Data
#defineLCD_CLEAR_SCREEN 0x01 // 清屏
#defineLCD_HOMING 0x02 // 光标返回原点
//以上4行为宏定义,以后出现LCD_HOMING的地方就可以用0x02来代替.
voidLCD_Write(bit style, unsigned char input) //LCD写入子函数,形参为数据类型和无符号字符型输入.
{
LcdEn=0;
LcdRs=style; //数据类型传递给LcdRS
LcdRw=0; _nop_();
DBPort=input; _nop_();//写入的数据传递给DBPort
LcdEn=1; _nop_();//注意顺序
LcdEn=0; _nop_();
LCD_Wait(); //调用内部等待函数.
}
//设置显示模式
************************************************************
#defineLCD_SHOW 0x04 //显示开
#defineLCD_HIDE 0x00 //显示关
#defineLCD_CURSOR 0x02 //显示光标
#defineLCD_NO_CURSOR 0x00 //无光标
#defineLCD_FLASH 0x01 //光标闪动
#defineLCD_NO_FLASH 0x00 //光标不闪动
voidLCD_SetDisplay(unsigned char DisplayMode) //LCD显示设置子函数
{
LCD_Write(LCD_COMMAND, 0x08|DisplayMode);
}
//设置输入模式
************************************************************
#defineLCD_AC_UP 0x02
#defineLCD_AC_DOWN 0x00 // default
#defineLCD_MOVE 0x01 // 画面可平移
#defineLCD_NO_MOVE 0x00 //default
voidLCD_SetInput(unsigned char InputMode)
{
LCD_Write(LCD_COMMAND, 0x04|InputMode);
}
//初始化
LCD***********************************************************
voidLCD_Initial() //初始化函数.
{
LcdEn=0;
LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵
delay(5);
LCD_Write(LCD_COMMAND,0x38);
delay(5);
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标
delay(5);
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
delay(5);
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动
delay(5);
}
//液晶字符输入的位置************************
voidGotoXY(unsigned char x, unsigned char y)
{
if(y==0)
LCD_Write(LCD_COMMAND,0x80|x);
if(y==1)
LCD_Write(LCD_COMMAND,0x80|(x-0x40));
}
//将字符输出到液晶显示
voidPrint(unsigned char *str)
{
while(*str!='\0')
{
LCD_Write(LCD_DATA,*str);
str++;
delay(1);
}


  • 寂灭60
  • 中尉
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
因为完全一窍不通,所以有什么错误请指出,洗耳恭听,还有其他需要知道的可以直接问,谢谢


  • 寂灭60
  • 中尉
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
顶!求助


  • 寂灭60
  • 中尉
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
顶


  • 亲亲我的宝贝o5
  • 上尉
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
哈哈,好吧!口误了!既然这么说了,那你哪里不会呢?


  • bad5tone
  • 少尉
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
好


2025-11-27 02:53:59
广告
不感兴趣
开通SVIP免广告
  • bad5tone
  • 少尉
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
好


  • 令狐丁薆
  • 中校
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
看不懂的说


  • bad5tone
  • 少尉
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你卖屁眼儿我就教你


  • 养专业户
  • 中校
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
太长不看
 ✎﹏﹏
zll0360为您报时: 2016年04月02日 周六 23时17分36秒036毫秒


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 下一页 尾页
  • 21回复贴,共2页
  • ,跳到 页  
<<返回单片机吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示