主程序:
- #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)
|