完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#include #define LCD_DB P0 unsigned int s1[5]; unsigned int s2[5]; ***it LCD_RS = P2^5; ***it LCD_RW = P2^6; ***it LCD_E = P2^7; ***it P3_2 = P3^2; ***it moshi = P3^4; ***it INC = P3^5; ***it DEC = P3^6; ***it SPK = P1^5; /******定义函数****************/ #define uchar unsigned char #define uint unsigned int typedef unsigned char U8; // 无符号8位整型变量 typedef unsigned int U16; // 无符号16位整型变量 int count1=70,count2=35; uchar moshicount=0; U8 U8FLAG; 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; void LCD_init(void);//初始化函数 void LCD_write_command(uchar command); //写指令函数 void LCD_write_data(uchar dat); //写数据函数 void LCD_disp_char(uchar x,uchar y,uchar dat);//在某个屏幕位置上显示一个字符,X(0-16),y(1-2) void delay_n40us(uint n);//延时函数 //*******液晶初始化函数***************// void LCD_init(void) { LCD_write_command(0x38); //设置 8 位格式,2 行,5x7 LCD_write_command(0x0c); //整体显示,关光标,不闪烁 LCD_write_command(0x06); //设定输入方式,增量不移位 LCD_write_command(0x03); //清除屏幕显示 delay_n40us(100); } //******************************// //******************************// //********写指令函数************// void LCD_write_command(uchar dat) { LCD_DB=dat; LCD_RS=0; LCD_RW=0;//写入 LCD_E=1;//允许 delay_n40us(1); LCD_E=0; delay_n40us(1); } //*******************************// //********写数据函数*************// void LCD_write_data(uchar dat) { LCD_DB=dat; LCD_RS=1;//数据 LCD_RW=0;//写入 LCD_E=1;//允许 delay_n40us(1); LCD_E=0; delay_n40us(1); } //********************************// //*******显示一个字符函数*********// void LCD_disp_char(uchar x,uchar y,uchar dat) { uchar address; if(y==1) address=0x80+x; else address=0xc0+x; LCD_write_command(address); LCD_write_data(dat); } //*******************************// //********延时函数***************// void delay_n40us(uint n) { uint i; uchar j; for(i=n;i>0;i--) for(j=0;j<2;j++); } void Delay_10us(void) { U8 i; i--; i--; i--; i--; i--; i--; } void Delay(U16 j) { U8 i; for(;j>0;j--) for(i=0;i<27;i++); } //**********************************// //*******一字节数据传送函数*********// void COM(void) { U8 i; for(i=0;i<8;i++) { U8FLAG=2; while((!P3_2)&&U8FLAG++); Delay_10us(); Delay_10us(); Delay_10us(); U8temp=0; if(P3_2) U8temp=1; U8FLAG=2; while((P3_2)&&U8FLAG++);//超时则跳出for循环 if(U8FLAG==1) break;//判断数据位是0还是1,如果高电平高过预定0高电平值则数据位为 1// U8comdata<<=1; U8comdata=U8temp; //0 }//rof } //--------------------------------// //-----湿度读取子程序 ------------// //--------------------------------// //----以下变量均为全局变量--------// //----温度高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 P3_2=0; Delay(180); P3_2=1;//总线由上拉电阻拉高 主机延时20us Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us();//主机设为输入 判断从机响应信号 P3_2=1;//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!P3_2) //T ! { U8FLAG=2; //判断从机是否发出 80us 的低电平响应信号是否结束 while((!P3_2)&&U8FLAG++); U8FLAG=2;//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 while((P3_2)&&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; P3_2=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;//湿度整数部分 { //s1[0]=(int)(0X30+U8RH_data_H/10); //s1[1]=(int)(0X30+U8RH_data_H%10); //湿度整数部分 //s1[2]=(int)(0X30+U8RH_data_L/10); //湿度小数部分 //s2[0]=(int)(0X30+U8T_data_H/10); //s2[1]=(int)(0X30+U8T_data_H%10); //温度整数部分 //s2[2]=(int)(0X30+U8T_data_L/10); //温度小数部分 } }//fi }//fi } //液晶显示函数 void disp() { LCD_disp_char(0,1,'s'); LCD_disp_char(1,1,'h'); LCD_disp_char(2,1,'i'); LCD_disp_char(3,1,'d'); LCD_disp_char(4,1,'u'); LCD_disp_char(5,1,':'); LCD_disp_char(6,1,0X30+U8RH_data_H/10); LCD_disp_char(7,1,0X30+U8RH_data_H%10); LCD_disp_char(8,1,'.'); LCD_disp_char(9,1,0X30+U8RH_data_L/10); LCD_disp_char(10,1,'%'); LCD_disp_char(11,1,'R'); LCD_disp_char(12,1,'H'); LCD_disp_char(0,2,'w'); LCD_disp_char(1,2,'e'); LCD_disp_char(2,2,'n'); LCD_disp_char(3,2,'d'); LCD_disp_char(4,2,'u'); LCD_disp_char(5,2,':'); LCD_disp_char(6,2,0X30+U8T_data_H/10); LCD_disp_char(7,2,0X30+U8T_data_H%10); LCD_disp_char(8,2,'.'); LCD_disp_char(9,2,0X30+U8T_data_L/10); LCD_disp_char(10,2,0xDF); LCD_disp_char(11,2,'C'); } //阈值设置函数 void shezhi() { s1[3] = (char)(0x30+count1/10); s1[4] = (char)(0x30+count1%10); s2[3] = (char)(0x30+count2/10); s2[4] = (char)(0x30+count2%10); if(moshi==0) { delay_n40us(10000); moshicount++; } if(moshicount==1) { if(INC==0) { delay_n40us(10000); count1++; } else if(DEC==0) { delay_n40us(10000); count1--; } LCD_disp_char(14,1,' '); LCD_disp_char(15,1,' '); LCD_disp_char(14,2,' '); LCD_disp_char(15,2,' '); s1[3] = count1/10; s1[4] = count1%10; s2[3] = count2/10; s2[4] = count2%10; LCD_disp_char(14,1,s1[3]+0x30); LCD_disp_char(15,1,s1[4]+0x30); LCD_disp_char(14,2,s2[3]+0x30); LCD_disp_char(15,2,s2[4]+0x30); } else if(moshicount==2) { if(INC==0) { delay_n40us(10000); count2++; } else if(DEC==0) { delay_n40us(10000); count2--; } LCD_disp_char(14,1,' '); LCD_disp_char(15,1,' '); LCD_disp_char(14,2,' '); LCD_disp_char(15,2,' '); s1[3] = count1/10; s1[4] = count1%10; s2[3] = count2/10; s2[4] = count2%10; LCD_disp_char(14,1,s1[3]+0x30); LCD_disp_char(15,1,s1[4]+0x30); LCD_disp_char(14,2,s2[3]+0x30); LCD_disp_char(15,2,s2[4]+0x30); } else if(moshicount==3) { delay_n40us(10000); LCD_disp_char(14,1,' '); LCD_disp_char(15,1,' '); LCD_disp_char(14,2,' '); LCD_disp_char(15,2,' '); moshicount=0; } } //蜂鸣器报警程序 void laba() { if((U8RH_data_H>=count1)||(U8T_data_H>=count2)) { SPK=0; } else { SPK=1; } } //*********主函数*****************// void main(void) { LCD_init(); Delay(4); while(1) { delay_n40us(10000); RH(); disp(); laba(); shezhi(); } } 程序输出的结果怎么都是0?怎么改? |
|
相关推荐
1 个讨论
|
|
为什么用FatFS在SD卡创建文件,在单片机上读写正常,用读卡器插到电脑上就什么都没有
297 浏览 0 评论
708 浏览 2 评论
《DNK210使用指南 -CanMV版 V1.0》第九章 打印输出实验
375 浏览 0 评论
stm32f407+ksz8863rlli概率性ping不通
1090 浏览 1 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-常见网络服务搭建之NFS服务搭建
515 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11334 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-1 06:47 , Processed in 0.715192 second(s), Total 50, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号