- #include "led.h"
- #include "delay.h"
- #include "sys.h"
- #include "usart.h"
- #include "lcd.h"
- #include "ds18b20.h"
- #include "rtc.h"
- #include "spi.h"
- #define size 10//數(shù)組大小
- #define N 4//滑動(dòng)平均濾波計(jì)算平均值時(shí)所取的點(diǎn)數(shù)
- void Smooth(float data[]);
- float temprature;
- int sum;
- int main(void)
- {
- u8 t=0,count=0;
- short temperature;
-
- unsigned int t1,i;
- unsigned char c;
- unsigned char flag;
- int xx;
- /* 配置系統(tǒng)時(shí)鐘為72M */
- SystemInit();
-
- delay_init(); //延時(shí)函數(shù)初始化
- // NVIC_Configuration();
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 設(shè)置中斷優(yōu)先級(jí)分組2
- uart_init(9600); //串口初始化為9600
- LED_Init(); //初始化與LED連接的硬件接口
- RTC_Init();
- LCD_Init();
- /* MAX6675 SPI 接口初始化 */
- SPI_MAX6675_Init();
-
- POINT_COLOR=BLUE;//設(shè)置字體為藍(lán)色
- while(DS18B20_Init()) //DS18B20初始化
- {
- LCD_ShowString(60,130,200,16,16,"DS18B20 Error");
- delay_ms(200);
- LCD_Fill(60,130,239,130+16,WHITE);
- delay_ms(200);
- }
- LCD_ShowString(60,150,200,16,16,"Temp: . C");
- while(1)
- {
- if(t%10==0)//每100ms讀取一次
- {
- POINT_COLOR=BLUE;//設(shè)置字體為藍(lán)色
- temperature=DS18B20_Get_Temp();
- // printf("%d",&temperature);
- if(temperature<0)
- {
- LCD_ShowChar(60+40,150,'-',16,0); //顯示負(fù)號(hào)
- temperature=-temperature; //轉(zhuǎn)為正數(shù)
- } else LCD_ShowChar(60+40,150,' ',16,0); //去掉負(fù)號(hào)
- LCD_ShowNum(60+40+8,150,temperature/10,2,16); //顯示正數(shù)部分
- LCD_ShowNum(60+40+32,150,temperature%10,1,16); //顯示小數(shù)部分
-
-
- MAX6675_CSL();
- c = MAX6675_ReadByte();
- i = c;
- i = i<<8;
- c = MAX6675_ReadByte();
- MAX6675_CSH();
-
- i = i|((unsigned int)c); //i是讀出來(lái)的原始數(shù)據(jù)
- flag = i&0x04; //flag保存了熱電偶的連接狀態(tài)
- t1 = i<<1;
- t1 = t1>>4;
- temprature = t1*0.25;
-
- for(i=0;i<0x2fffff;i++)
- ; //max6675的轉(zhuǎn)換時(shí)間是0.2秒左右,所以兩次轉(zhuǎn)換間隔不要太近
- for (count=0;count<N;count++)
- {
- sum+=(temprature*10);
- delay_ms(10);
- }
- xx=sum/N;
-
-
- LCD_ShowString(60,200,200,16,16,"Temp: . C");
- LCD_ShowNum(60+40+8,200,xx/10,2,16); //顯示正數(shù)部分
- LCD_ShowNum(60+40+32,200,xx%10,1,16); //顯示小數(shù)部分
- POINT_COLOR=RED;//設(shè)置字體為紅色
- LCD_ShowNum(60,50,RealTime.year,4,16); //顯示年部分
- LCD_ShowChar(95,50,'Y',16,0); //顯示Y
- LCD_ShowNum(110,50,RealTime.mon,2,16); //顯示月部分
- LCD_ShowChar(130,50,'M',16,0); //顯示M
- LCD_ShowNum(145,50,RealTime.date,2,16); //顯示日部分
- LCD_ShowChar(165,50,'D',16,0); //顯示D
- LCD_ShowNum(60,70,RealTime.hour,4,16); //顯示時(shí)部分
- LCD_ShowChar(95,70,'H',16,0); //顯示H
- LCD_ShowNum(110,70,RealTime.min,2,16); //顯示分部分
- LCD_ShowChar(130,70,'M',16,0); //顯示M
- LCD_ShowNum(145,70,RealTime.sec,2,16); //顯示秒部分
- LCD_ShowChar(165,70,'S',16,0); //顯示S
- switch(RealTime.week)
- {
- case 0:
- LCD_ShowString(80,100,200,24,24,"Sunday");//星期
- break;
- case 1:
- LCD_ShowString(80,100,200,24,24,"Monday");//星期
- break;
-
- case 2:
- LCD_ShowString(80,100,200,24,24,"Tuesday");//星期
- break;
-
- case 3:
- LCD_ShowString(80,100,200,24,24,"Wednesday");//星期
- break;
-
- case 4:
- LCD_ShowString(80,100,200,24,24,"Thursday");//星期
- break;
-
- case 5:
- LCD_ShowString(80,100,200,24,24,"Friday");//星期
- break;
-
- case 6:
- LCD_ShowString(80,100,200,24,24,"Saturday");//星期
- break;
-
- default:
- break;
- }
-
-
-
-
-
-
-
-
-
- }
- delay_ms(10);
- t++;
- if(t==20)
- {
- t=0;
- LED0=!LED0;
- }
- }
- }
復(fù)制代碼
Keil代碼下載:
代碼.7z
(234.21 KB, 下載次數(shù): 29)
2022-3-31 02:48 上傳
點(diǎn)擊文件名下載附件
|