|
- /*------------------------------------------------
- 包含头文件
- ------------------------------------------------*/
- #include<reg52.h>
- #include"uart.h"
- #include"lcd.h"
- #include"ds1302.h"
- #include"18b20.h"
- #include"xpt2046.h"
- #include"hcsr04.h"
- #include"delay.h"
- #include<stdio.h>
- #include"hcsr04.h"
- #include"key.h"
- char CMER [10] = "厘米--";
- char TIER[10] = "摄氏度--";
- char TIMER[6] = "时间\n";
- char LIGHTH[10] = "光照强度--";
- bit flag =0;
- unsigned char code ASCII[15] = {'0','1','2','3','4','5','6','7','8','9','.',':','-','M','S'};
- void UsartConfiguration()
- {
- SCON=0X50; //设置为工作方式1
- TMOD=0X20; //设置计数器工作方式2
- PCON=0X80; //波特率加倍
- TH1=0XF3; //计数器初始值设置,注意波特率是4800的
- TL1=0XF3;
- // ES=1; //打开接收中断
- // EA=1; //打开总中断
- TR1=1; //打开计数器
- }
- void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围
- {
- flag=1; //中断溢出标志
- }
- /*------------------------------------------------
- S级延时
- ------------------------------------------------*/
- void DelayS(unsigned char u)
- {
- while(u--)
- {
- DelayMs(250);
- DelayMs(250);
- DelayMs(250);
- DelayMs(250);
- }
- }
- /*------------------------------------------------
- 主函数
- ------------------------------------------------*/
- main()
- {
- unsigned char DisNum = 0; //显示用指针
- unsigned int time=0;
- unsigned long S=0;
- unsigned char i, disbuff[2] ={0,0,};
- unsigned char disp[3];
- unsigned char datas[] = {0, 0, 0, 0};
- int temp,light; //温度值
- float tp;
- Int0Configuration();
- InitUART (); //初始化串口
- LCD_Init(); //初始化LCD1602
- Ds1302Init();
- DelayMs(30); //稳定
- zhongduan() ;
- UsartConfiguration();
- LCD_Write_String(0,0,"Welcome to me!");//液晶显示测试
- LCD_Write_String(0,1,"tengjianhao");
- DelayS(2);
- LCD_Clear();
- while(1)
- {
- key();
- LCD_Write_String(0,0,"Time:");//液晶显示测试
- LCD_Write_Com(0x85);
- LCD_Write_Data('0'+TIME[2]/16) ;
- LCD_Write_Data('0'+(TIME[2]&0x0f));
- SBUF = '0'+TIME[2]/16;//将接收到的数据放入到发送寄存器
- while (!TI); //等待发送数据完成
- TI = 0;
- SBUF = '1'+TIME[2]/16;//将接收到的数据放入到发送寄存器
- while (!TI); //等待发送数据完成
- TI = 0;
- SBUF = '.';//将接收到的数据放入到发送寄存器
- while (!TI); //等待发送数据完成
- TI = 0;
- LCD_Write_Data('-');
- LCD_Write_Data('0'+TIME[1]/16) ;
- LCD_Write_Data('0'+(TIME[1]&0x0f));
- SBUF = '0'+TIME[1]/16;//将接收到的数据放入到发送寄存器
- while (!TI); //等待发送数据完成
- TI = 0;
- SBUF = '1'+TIME[1]/16;//将接收到的数据放入到发送寄存器
- while (!TI); //等待发送数据完成
- TI = 0;
- SBUF = '.';//将接收到的数据放入到发送寄存器
- while (!TI); //等待发送数据完成
- TI = 0;
- LCD_Write_Data('-');
- LCD_Write_Data('0'+TIME[0]/16) ;
- LCD_Write_Data('0'+(TIME[0]&0x0f));
- SBUF = '0'+TIME[0]/16;//将接收到的数据放入到发送寄存器
- while (!TI); //等待发送数据完成
- TI = 0;
- SBUF = '1'+TIME[0]/16;//将接收到的数据放入到发送寄存器
- while (!TI); //等待发送数据完成
- TI = 0;
- for(i=0; i<8; i++)
- {
- SBUF = TIMER[i];//将接收到的数据放入到发送寄存器
- while (!TI); //等待发送数据完成
- TI = 0;
- }
-
-
- LCD_Write_String(0,1,"T:");
- temp=ReadTemperature();//读取温度
- DelayS(1);
- temp=ReadTemperature();
- tp=temp;
- temp=tp*0.0625*100+0.5;
- datas[0] = temp % 10000 / 1000;
- datas[1] = temp % 1000 / 100;
- LCD_Write_Com(0x80+0x42);
- LCD_Write_Data('0'+datas[0]) ;
- LCD_Write_Data('0'+datas[0]&0x0f) ;
- SBUF = '0'+datas[0];//将接收到的数据放入到发送寄存器
- while (!TI); //等待发送数据完成
- TI = 0;
- LCD_Write_Com(0x80+0x43);
- LCD_Write_Data('0'+datas[1]);
- LCD_Write_Data('0'+datas[1]&0x0f) ;
- SBUF = '0'+datas[1];//将接收到的数据放入到发送寄存器
- while (!TI); //等待发送数据完成
- TI = 0;
- for(i=0; i<10; i++)
- {
- SBUF = TIER[i];//将接收到的数据放入到发送寄存器
- while (!TI); //等待发送数据完成
- TI = 0;
- }
- LCD_Write_Com(0x80+0x44);
- LCD_Write_Data('C') ;
- LCD_Write_String(6,1,"L:");
- light = Read_AD_Data(0xA4)/10;
- disp[0]=light%1000/100;//百位
- disp[1]=light%1000%100/10;//个位
- disp[2]=light%1000%100%10;
- LCD_Write_Com(0x80+0x48);
- LCD_Write_Data('0'+disp[1]) ;
- LCD_Write_Data('0'+disp[1]&0x0f) ;
- SBUF = '0'+disp[1];//将接收到的数据放入到发送寄存器
- while (!TI); //等待发送数据完成
- TI = 0;
- LCD_Write_Com(0x80+0x49);
- LCD_Write_Data('0'+disp[2]) ;
- LCD_Write_Data('0'+disp[2]&0x0f) ;
- SBUF = '0'+disp[2];//将接收到的数据放入到发送寄存器
- while (!TI); //等待发送数据完成
- TI = 0;
- for(i=0; i<10; i++)
- {
- SBUF = LIGHTH[i];//将接收到的数据放入到发送寄存器
- while (!TI); //等待发送数据完成
- TI = 0;
- }
- LCD_Write_Com(0x80+0x4A);
- LCD_Write_Data('%') ;
-
- LCD_Write_String(12,1,"S:");
- chaosheng() ;
- time=TH0*256+TL0;
- TH0=0;
- TL0=0;
- S=(time*1.7)/1000; //算出来是CM
- if((S>=100)||flag==1) //超出测量范围显示“-”
- {
- flag=0;
- SBUF='0';//将接收到的数据放入到发送寄存器
- while(!TI); //等待发送数据完成
- TI=0;
- SBUF='0';//将接收到的数据放入到发送寄存器
- while(!TI); //等待发送数据完成
- TI=0;
- for(i=0; i<10; i++)
- {
- SBUF = CMER [i];//将接收到的数据放入到发送寄存器
- while (!TI); //等待发送数据完成
- TI = 0;
- }
- LCD_Write_Com(0x80+0x4E);
- LCD_Write_Data(ASCII[12]) ;
- LCD_Write_Com(0x80+0x4F);
- LCD_Write_Data(ASCII[12]) ;
- }
- else
- {
-
- disbuff[0]=S%1000%100/10;
- SBUF = '0'+disbuff[0];//将接收到的数据放入到发送寄存器
- while (!TI); //等待发送数据完成
- TI = 0;
- disbuff[1]=S%1000%10 %10;
- SBUF = '0'+disbuff[1];//将接收到的数据放入到发送寄存器
- while (!TI); //等待发送数据完成
- TI = 0;
- for(i=0; i<10; i++)
- {
- SBUF = CMER [i];//将接收到的数据放入到发送寄存器
- while (!TI); //等待发送数据完成
- TI = 0;
- }
- LCD_Write_Com(0x80+0x4E);
- LCD_Write_Data(ASCII[disbuff[0]]) ;
- LCD_Write_Com(0x80+0x4F);
- LCD_Write_Data(ASCII[disbuff[1]]);
- }
- }
- }
复制代码 |
|