主程序:
- #include "stm32f10x.h"
- #include "delay.h"
- #include <stdio.h>
- #include "lcd12864.h"
- #include "ds18b20.h"
- char bbb[32],ddd[32];
- short aaa,ccc; //0x20000014
- double c,d;
- #ifdef __GNUC__
- #define PUTCHAR_PROTOTYPE int__io_putchar(int ch)
- #else
- #define PUTCHAR_PROTOTYPE int fputc(intch, FILE *f)
- #endif
- int main(void)
- {
- SystemCoreClockUpdate ();
- delay_init(72);
- LCD_GPIOInit();
- LCD_Init();
- while(DS18B20_Init())/
- {
- delay_ms(500);
- }
- while (1)
- {
- LCD_Clear();
- aaa=DS18B20_Get_Temp();
- sprintf(bbb,"%d",aaa);
- bbb[3]=bbb[2];
- bbb[2]='.';
- LCD_ShowString(1,1,"Temperature:");
- LCD_ShowString(4, 2,(&(bbb[0])));
- LCD_ShowString(6,2,"℃");
- delay_us(1000000);
- }
- }
- 3.系統(tǒng)初始化:
- 3.1時鐘的初始程序
- SystemCoreClockUpdate ();
- 3.2.I/O初始化程序
- GPIO_InitTypeDef GPIO_InitStructure; //GPIO
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE ); /GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0;
- GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
- GPIO_Init(GPIOA,&GPIO_InitStructure);
- 3.3.18b20初始化程序
- 初始化要用到的幾個 GPIO 引腳;初始化 ds18b20芯片;
- 程序為:
- u8 DS18B20_Init(void)
- {
- GPIO_InitTypeDefGPIO_InitStructure; //GPIO
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE ); //使能PORTA口時鐘
- GPIO_InitStructure.GPIO_Pin= GPIO_Pin_0;
- GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP; //復用推挽輸出
- GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
- GPIO_Init(GPIOA,&GPIO_InitStructure);
- GPIO_SetBits(GPIOA,GPIO_Pin_0);
- DS18B20_Rst();
- returnDS18B20_Check();
- }
- 3.4.ds18b20中讀入溫度程序
- //從ds18b20得到溫度值
- //精度:0.1C
- //返回值:溫度值 (-550~1250)
- short DS18B20_Get_Temp(void)
- {
- u8 temp;
- u8 TL,TH;
- shorttem;
- DS18B20_Start ();
- DS18B20_Rst();
- DS18B20_Check();
- DS18B20_Write_Byte(0xcc);
- DS18B20_Write_Byte(0xbe);
- TL=DS18B20_Read_Byte();
- TH=DS18B20_Read_Byte();
-
- if(TH>7)
- {
- TH=~TH;
- TL=~TL;
- temp=0;//溫度為負
- }else temp=1;//溫度為正
- tem=TH; //獲得高八位
- tem<<=8;
- tem+=TL;//獲得底八位
- tem=(float)tem*0.625;//轉(zhuǎn)換
- if(temp)returntem; //返回溫度值
- elsereturn -tem;
- }
- 3.5.LCD顯示程序
- //LCD端口初始化
- void LCD_GPIOInit (void)
- {
- GPIO_InitTypeDefGPIO_InitStructure; //定義GPIO結(jié)構(gòu)變量
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //使能AFIO時鐘(下一操作所必需)
- GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); //啟用SW-DP(關(guān)閉其他以開放IO口)
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //關(guān)閉AFIO時鐘
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能數(shù)據(jù)端口時鐘
- //以上是對單個I/O的初始化例子,本工程可以一次完成
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能聯(lián)絡端口時鐘
- GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP; //推挽輸出
- GPIO_InitStructure.GPIO_Pin= LCD_RS_PIN | LCD_EN_PIN | LCD_RW_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(LCD_EN_PORT,&GPIO_InitStructure);
- GPIO_Write(GPIOC,GPIO_ReadOutputData(GPIOC) | 0x000e); //輸出高電平
- }
- //LCD初始化
- void LCD_Init (void)
- {
- LCD_Wcmd(0x34); //擴充指令操作
- delay_us(100000);
- LCD_Wcmd(0x30); //基本指令操作
- delay_us(100);
- LCD_Wcmd(0x0C); //顯示開,關(guān)光標
- delay_us(100);
- LCD_Wcmd(0x01); //清除LCD的顯示內(nèi)容
- delay_us(5000);
- }
- //設定顯示位置
- void LCD_SetCursor (u8 x, u8 y)
- {
- if (y == 0)
- {y = 0x80;}
- else if (y == 1)
- {y = 0x90;}
- else if (y == 2)
- {y = 0x88;}
- else if (y == 3)
- {y = 0x98;}
- LCD_Wcmd(x + y); //顯示地址
- }
- //從(x,y)處開始顯示一個字符串,*p:待顯示字符串
- void LCD_ShowString (u8 x,u8 y, char *p)
- {
- u8 i=0;
- LCD_SetCursor(x, y);
- while(*p != '\0')
- {
- LCD_Wdata(*p++);
- }
- }
復制代碼
全部資料51hei下載地址:
羅靖 課設.rar
(347.29 KB, 下載次數(shù): 295)
2018-6-9 23:40 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|