123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401 |
- C51 COMPILER V9.60.0.0 MAIN 02/21/2022 21:12:48 PAGE 1
- C51 COMPILER V9.60.0.0, COMPILATION OF MODULE MAIN
- OBJECT MODULE PLACED IN .\Objects\main.obj
- COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE main.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\main
- -.lst) TABS(2) OBJECT(.\Objects\main.obj)
- line level source
- 1 #include "drive_1602.h"
- 2 #include "string.h"
- 3 #include "stdio.h"
- 4 #include "dht11.h"
- 5
- 6 #define uint unsigned int
- 7 #define uchar unsigned char
- 8
- 9 /*
- 10 按键实现人机交互的主要方式,温湿度传感器可以感测环境温度湿度,
- 11 并且采集电信号至单片机,供电模块给单片机提供电能保证系统能够正常运行,
- 12 水位传感器能够检测水田水位保证一定的水位。
- 13 显示屏可以显示温湿度信息和水位信息,
- 14 蓝牙传输模块能够将采集的信号都传输至手机APP,并实现图形化显示。
- 15 实现的功能:
- 16 1、通过蓝牙能够检测到水田的水位、温度、湿度。
- 17 2、通过USB +5V 供电
- 18 3、能够具有阈值报警的功能
- 19 4、阈值可以进行调节。
- 20 5、实现APP的温湿度信息监测,可在APP端图形化实时监测温度湿度变化。
- 21 */
- 22 sbit SW1=P3^7;
- 23 sbit SW2=P3^6;
- 24 sbit SW3=P3^5;
- 25 sbit SW4=P3^4;
- 26
- 27 sbit JR_LED=P2^2;
- 28 sbit JW_LED=P2^4;
- 29
- 30 sbit buzz=P3^3;
- 31
- 32 uchar temp,humi;
- 33 int sw_val=0;
- 34
- 35 void delay_xms(int xms)
- 36 {
- 37 1 char ix=0;
- 38 1 for(;xms>0;xms--)
- 39 1 for(ix=110;ix>0;ix--);
- 40 1 }
- 41 uchar SET=0;
- 42 char WdL=10;
- 43 char WdH=30;
- 44
- 45 char SdL=30;
- 46 char SdH=80;
- 47
- 48 char SWL=2;
- 49 char SWH=6;
- 50
- 51 char keyflag=0;
- 52 uchar bj_flag=0;
- 53 uchar Bj_CNt=0;
- 54 uchar JCount=0;
- C51 COMPILER V9.60.0.0 MAIN 02/21/2022 21:12:48 PAGE 2
- 55
- 56 uchar clear_flag=0;
- 57
- 58 uchar bj_clear=0;
- 59 uint clear_cnt=0;
- 60
- 61 void KeyRead(void)
- 62 {
- 63 1 if(!SW1)
- 64 1 {
- 65 2 if(!SW1&&keyflag==0)
- 66 2 {
- 67 3 keyflag=1;
- 68 3 if(++SET>6)SET=0;
- 69 3 while(!SW1);
- 70 3 }
- 71 2 }
- 72 1 else if(!SW2)
- 73 1 {
- 74 2 if(!SW2&&keyflag==0)
- 75 2 {
- 76 3 keyflag=1;
- 77 3 switch(SET)
- 78 3 {
- 79 4 case 1:
- 80 4 if(++WdH>50)WdH=0;
- 81 4 break;
- 82 4
- 83 4 case 2:
- 84 4 if(++WdL>50)WdL=0;
- 85 4 break;
- 86 4
- 87 4
- 88 4 case 3:
- 89 4 if(++SdH>90)SdH=0;
- 90 4 break;
- 91 4
- 92 4 case 4:
- 93 4 if(++SdL>90)SdH=0;
- 94 4 break;
- 95 4
- 96 4 case 5:
- 97 4 if(++SWH>8)SWH=0;
- 98 4 break;
- 99 4
- 100 4 case 6:
- 101 4 if(++SWL>8)SWL=0;
- 102 4 break;
- 103 4 }
- 104 3 while(!SW2);
- 105 3 }
- 106 2 }
- 107 1
- 108 1 else if(!SW3)
- 109 1 {
- 110 2 if(!SW3&&keyflag==0)
- 111 2 {
- 112 3 keyflag=1;
- 113 3 switch(SET)
- 114 3 {
- 115 4 case 1:
- 116 4 if(--WdH<0)WdH=50;
- C51 COMPILER V9.60.0.0 MAIN 02/21/2022 21:12:48 PAGE 3
- 117 4 break;
- 118 4
- 119 4 case 2:
- 120 4 if(--WdL<0)WdL=50;
- 121 4 break;
- 122 4
- 123 4 case 3:
- 124 4 if(--SdH<0)SdH=90;
- 125 4 break;
- 126 4
- 127 4 case 4:
- 128 4 if(--SdL<0)SdL=90;
- 129 4 break;
- 130 4
- 131 4 case 5:
- 132 4 if(--SWH<0)SWH=8;
- 133 4 break;
- 134 4
- 135 4 case 6:
- 136 4 if(--SWL<0)SWL=8;
- 137 4 break;
- 138 4
- 139 4 }
- 140 3 while(!SW3);
- 141 3 }
- 142 2 }
- 143 1 else if(!SW4)
- 144 1 {
- 145 2 if(!SW4&&keyflag==0)
- 146 2 {
- 147 3
- 148 3 bj_clear^=1;
- 149 3
- 150 3
- 151 3 while(!SW4);
- 152 3 }
- 153 2 }
- 154 1 else
- 155 1 {
- 156 2 keyflag=0;
- 157 2 clear_cnt=0;
- 158 2 }
- 159 1
- 160 1
- 161 1 }
- 162
- 163 void Timer0Init(void) //10毫秒@11.0592MHz
- 164 {
- 165 1
- 166 1 TMOD &= 0xF0; //设置定时器模式
- 167 1 TMOD |= 0x01; //设置定时器模式
- 168 1 TL0 = 0x00; //设置定时初值
- 169 1 TH0 = 0xDC; //设置定时初值
- 170 1 TF0 = 0; //清除TF0标志
- 171 1 ET0=1;
- 172 1 TR0 = 1; //定时器0开始计时
- 173 1 EA=1;
- 174 1
- 175 1 }
- 176
- 177 void TimeISR()interrupt 1
- 178 {
- C51 COMPILER V9.60.0.0 MAIN 02/21/2022 21:12:48 PAGE 4
- 179 1 TL0 = 0x00; //设置定时初值
- 180 1 TH0 = 0xDC; //设置定时初值
- 181 1 KeyRead();
- 182 1 if((bj_flag==1)&&(bj_clear==0))
- 183 1 {
- 184 2 if(++Bj_CNt>30)
- 185 2 {
- 186 3 Bj_CNt=0;
- 187 3 buzz=~buzz;
- 188 3 }
- 189 2 }else
- 190 1 {
- 191 2 buzz=1; Bj_CNt=0;
- 192 2 }
- 193 1 JCount++;
- 194 1 }
- 195
- 196 void UartInit(void) //9600bps@11.0592MHz
- 197 {
- 198 1 PCON &= 0x7F; //波特率不倍速
- 199 1 SCON = 0x50; //8位数据,可变波特率
- 200 1 TMOD &= 0x0F; //清除定时器1模式位
- 201 1 TMOD |= 0x20; //设定定时器1为8位自动重装方式
- 202 1 TL1 = 0xFD; //设定定时初值
- 203 1 TH1 = 0xFD; //设定定时器重装值
- 204 1 ET1 = 0; //禁止定时器1中断
- 205 1 TR1 = 1; //启动定时器1
- 206 1 EA=1;
- 207 1 ES=0;
- 208 1 }
- 209
- 210
- 211 void sendData(char *p,unsigned char n)
- 212 {
- 213 1 if( p == 0) return ;
- 214 1 ES = 0;
- 215 1 if(n > 0)
- 216 1 {
- 217 2 while(n --)
- 218 2 {
- 219 3 SBUF = *p++ ;
- 220 3 while(!TI) ;
- 221 3 TI = 0 ;
- 222 3 }
- 223 2 }
- 224 1 // ES = 1;
- 225 1 }
- 226
- 227
- 228
- 229 // 往串口发送字符串
- 230 void sendString(char *p)
- 231 {
- 232 1 if(p == 0) return ;
- 233 1 sendData(p,strlen(p));
- 234 1 }
- 235 // 接收中断函数
- 236 void usart() interrupt 4
- 237 {
- 238 1 if(RI == 1)
- 239 1 {
- 240 2 // setUsartRxData(SBUF);
- C51 COMPILER V9.60.0.0 MAIN 02/21/2022 21:12:48 PAGE 5
- 241 2 }
- 242 1 RI = 0;
- 243 1 TI = 0;
- 244 1 }
- 245
- 246 //char xdata showbuff[16]={0};
- 247 char data send_buff[17]={0};
- 248
- 249 sbit IN_PL = P2^0; //SHIFT/!LOA引脚
- 250 sbit IN_Data = P2^2; // QH数据输出引脚
- 251 sbit SCK = P2^1; //CLOCK引脚
- 252
- 253 unsigned char Read74HC165(void)
- 254 {
- 255 1 unsigned char indata;
- 256 1 unsigned char i;
- 257 1 IN_PL = 0;//装载8位并行数据
- 258 1 _nop_();
- 259 1 IN_PL = 1;//转换8位并行数据为串行数据
- 260 1 _nop_();
- 261 1
- 262 1 indata = 0;
- 263 1 for(i = 0; i < 8; i ++) //将8个串行数据存入数组indata中
- 264 1 {
- 265 2 indata = indata << 1;//开始时,indata数组先左移一位,以后每个循环左移一次
- 266 2 SCK = 0;//时钟低电平到来后,并行数据开始转换串行数据
- 267 2 _nop_();
- 268 2
- 269 2 indata |= IN_Data; //将转换完成的串行数据一位位存入数组
- 270 2 SCK = 1; //时钟变为高电平,再次变为低电平时,开始传出下一位串行数据
- 271 2 }
- 272 1 return indata;
- 273 1 }
- 274
- 275
- 276 char find_bit(unsigned char dat)
- 277 {
- 278 1 char i=0;
- 279 1 char cnt=0;
- 280 1 for(i=0;i<8;i++)
- 281 1 {
- 282 2 if(!(dat&0x01))
- 283 2 {
- 284 3 cnt++;
- 285 3 }
- 286 2 dat>>=1;
- 287 2 }
- 288 1 return cnt;
- 289 1 }
- 290 void main()
- 291 {
- 292 1 lcd1602_init();
- 293 1 UartInit();
- 294 1 dht11_value(&temp,&humi,DHT11_UINT8);
- 295 1 buzz=1;
- 296 1 delay_xms(200);
- 297 1 dht11_value(&temp,&humi,DHT11_UINT8);
- 298 1 Timer0Init();
- 299 1 while(1)
- 300 1 {
- 301 2
- 302 2 if(JCount>50)//500ms采集一次
- C51 COMPILER V9.60.0.0 MAIN 02/21/2022 21:12:48 PAGE 6
- 303 2 {
- 304 3 JCount=0;
- 305 3 if(SET==0)
- 306 3 {
- 307 4 if(clear_flag==1)
- 308 4 {
- 309 5 clear_flag=0;
- 310 5
- 311 5 Write_1602_com(0x01);//清显示
- 312 5 delay_1ms(100);
- 313 5 }
- 314 4 sw_val = find_bit(Read74HC165());
- 315 4 dht11_value(&temp,&humi,DHT11_UINT8);
- 316 4 L1602_printf(0,0,"temp:%2d",(int)temp);
- 317 4 L1602_printf(0,1,"humi:%2d",(int)humi);
- 318 4 L1602_printf(12,0,"%s","SW");
- 319 4 L1602_printf(12,1,"%2dcm",(int)sw_val);
- 320 4 if((temp<WdL||temp>WdH)||(humi<SdL||humi>SdH)||(sw_val<SWL||sw_val>SWH))
- 321 4 {
- 322 5 bj_flag=1;
- 323 5 }else
- 324 4 {
- 325 5 bj_flag=0;
- 326 5 }
- 327 4 sprintf(send_buff,"X%dH%dD%dZ\r\n",(int)temp,(int)humi,(int)sw_val);
- 328 4 sendString(send_buff);
- 329 4 }
- 330 3 else
- 331 3 {
- 332 4 if(clear_flag==0)
- 333 4 {
- 334 5 clear_flag=1;
- 335 5
- 336 5 Write_1602_com(0x01);//清显示
- 337 5 delay_1ms(100);
- 338 5 }
- 339 4 switch(SET)
- 340 4 {
- 341 5 case 1:
- 342 5 case 2:
- 343 5 WriteLcd1602_String(0,0,"Set temp");
- 344 5 L1602_printf(0,1,"H:%2d L:%2d",(int)WdH,(int)WdL);
- 345 5 break;
- 346 5
- 347 5 case 3:
- 348 5 case 4:
- 349 5 WriteLcd1602_String(0,0,"Set humi");
- 350 5 L1602_printf(0,1,"H:%2d L:%2d",(int)SdH,(int)SdL);
- 351 5 break;
- 352 5
- 353 5 case 5:
- 354 5 case 6:
- 355 5 WriteLcd1602_String(0,0,"Set SW ");
- 356 5 L1602_printf(0,1,"H:%2d L:%2d",(int)SWH,(int)SWL);
- 357 5 break;
- 358 5 }
- 359 4
- 360 4 }
- 361 3 }
- 362 2
- 363 2 }
- 364 1
- C51 COMPILER V9.60.0.0 MAIN 02/21/2022 21:12:48 PAGE 7
- 365 1 }
- MODULE INFORMATION: STATIC OVERLAYABLE
- CODE SIZE = 1351 ----
- CONSTANT SIZE = 83 ----
- XDATA SIZE = ---- ----
- PDATA SIZE = ---- ----
- DATA SIZE = 36 6
- IDATA SIZE = ---- ----
- BIT SIZE = ---- ----
- END OF MODULE INFORMATION.
- C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|