欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
基于stm32+DS18B20+lcd12864的溫度檢測設計源碼
[打印本頁]
作者:
kingsleylo
時間:
2018-6-9 22:17
標題:
基于stm32+DS18B20+lcd12864的溫度檢測設計源碼
主程序:
#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.系統初始化:
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;//轉換
if(temp)returntem; //返回溫度值
elsereturn -tem;
}
3.5.LCD顯示程序
//LCD端口初始化
void LCD_GPIOInit (void)
{
GPIO_InitTypeDefGPIO_InitStructure; //定義GPIO結構變量
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //使能AFIO時鐘(下一操作所必需)
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); //啟用SW-DP(關閉其他以開放IO口)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //關閉AFIO時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能數據端口時鐘
//以上是對單個I/O的初始化例子,本工程可以一次完成
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能聯絡端口時鐘
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); //顯示開,關光標
delay_us(100);
LCD_Wcmd(0x01); //清除LCD的顯示內容
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, 下載次數: 295)
2018-6-9 23:40 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
1339493121
時間:
2019-2-19 11:03
不好用啊
作者:
scj123
時間:
2019-2-20 21:58
厲害了
作者:
1468216262
時間:
2019-9-2 10:20
是串行還是并行的程序?
作者:
豆餡兒
時間:
2020-6-15 22:45
你好,請問這個有proteus仿真圖嗎?
作者:
hzd530
時間:
2020-6-16 10:23
可以參考,有點使用價值
作者:
薩姆空間
時間:
2021-4-30 15:12
LCD怎么接的線啊
作者:
zzh999
時間:
2021-5-5 12:36
在償試中,有得學習了。
作者:
641572636
時間:
2021-5-5 18:03
那個大哥試了,這個好用嗎
作者:
jin111
時間:
2021-5-7 16:44
下了之后才發現這就是正點原子的示例源碼,就改了IO口,里面錯的字都一毛一樣啊。
作者:
bmdlzwh
時間:
2021-5-8 09:28
可以下載使用嗎?
作者:
薩姆空間
時間:
2021-5-9 15:32
jin111 發表于 2021-5-7 16:44
下了之后才發現這就是正點原子的示例源碼,就改了IO口,里面錯的字都一毛一樣啊。
請問這個怎么接的線啊
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1