|
- /*------------------------------------------------
- 包含頭文件
- ------------------------------------------------*/
- #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]]);
- }
- }
- }
復制代碼 |
-
-
多功能測量(功能).rar
2019-8-3 11:45 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
107.86 KB, 下載次數: 13, 下載積分: 黑幣 -5
|