ARM课程设计报告(数字温度计的设计)(4)

2019-01-12 15:10

//函数名称: void DS18B20_Init(void) //实现功能: 初始化18B20 //入口参数: 无 //出口返回值: 无

//======================================== void DS18B20_Init(void) {

DQ_OUT; DQ_L;

usDelay(700); DQ_H;

usDelay(4); DQ_IN;

usDelay(100);

/* if(DQ_STAT!=0) //测试复位是否成功

Uart_Printf(\ else

Uart_Printf(\*/

usDelay(250); }

//======================================== //函数名称: U8 DS18B20_ReadBit(void) //实现功能: 读取18b20的一位数据 //入口参数: 无

//出口返回值: 读取的一位数据

//======================================== U8 DS18B20_ReadBit(void) {

U8 dat; DQ_OUT; DQ_L;

usDelay(2); DQ_IN;

usDelay(10); if(DQ_STAT!=0) dat=1; else

dat=0; usDelay(50); return (dat); }

//======================================== //函数名称: U8 DS18B20_ReadByte(void)

//实现功能: 读取一个字节的数据 //入口参数: 无

//出口返回值: 读取的一个字节数据

//======================================== U8 DS18B20_ReadByte(void) {

U8 i,j,dat; dat=0;

for(i=1;i<=8;i++) {

j=DS18B20_ReadBit();

dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里 }

return(dat); }

//======================================== //函数名称: void DS18B20_WriteByte(U8 dat) //实现功能: 向18B20写一个字节数据 //入口参数: 要写入的数据 //出口返回值: 无

//======================================== void DS18B20_WriteByte(U8 dat) {

U8 j;

U8 testb; DQ_OUT;

for(j=1;j<=8;j++) {

testb=dat&0x01; dat=dat>>1; if(testb) {

DQ_L;

usDelay(8); DQ_H;

usDelay(50); } else {

DQ_L;

usDelay(90); DQ_H;

usDelay(8);

} } }

//======================================== //函数名称: void DS18B20_ReadID(void) //实现功能: 读取18B20的ID号 //入口参数: 无 //出口返回值: 无

//======================================== void DS18B20_ReadID(void) {

usDelay(1);

DS18B20_Init();

DS18B20_WriteByte(DS18B20_ReadROM); DS18B20_ID[0] = DS18B20_ReadByte(); DS18B20_ID[1] = DS18B20_ReadByte(); DS18B20_ID[2] = DS18B20_ReadByte(); DS18B20_ID[3] = DS18B20_ReadByte(); DS18B20_ID[4] = DS18B20_ReadByte(); DS18B20_ID[5] = DS18B20_ReadByte(); DS18B20_ID[6] = DS18B20_ReadByte(); DS18B20_ID[7] = DS18B20_ReadByte(); }

//======================================== //函数名称: void DS18B20_Match(void) //实现功能: 匹配18B20 //入口参数: 无 //出口返回值: 无

//======================================== void DS18B20_Match(void) {

DS18B20_WriteByte(DS18B20_MatchROM); DS18B20_WriteByte(DS18B20_ID[0]); DS18B20_WriteByte(DS18B20_ID[1]); DS18B20_WriteByte(DS18B20_ID[2]); DS18B20_WriteByte(DS18B20_ID[3]); DS18B20_WriteByte(DS18B20_ID[4]); DS18B20_WriteByte(DS18B20_ID[5]); DS18B20_WriteByte(DS18B20_ID[6]); DS18B20_WriteByte(DS18B20_ID[7]); }

//======================================== //函数名称: void DS18B20_TmpChange(void) //实现功能: 18B20开始温度转换

//入口参数: 无 //出口返回值: 无

//======================================== void DS18B20_TmpChange(void) {

DS18B20_Init();

usDelay(2);/*delay(1);*/

DS18B20_WriteByte(DS18B20_SkipROM); // address all drivers on bus DS18B20_WriteByte(DS18B20_ConvertTemp); // initiates a single temperature conversion }

//======================================== //函数名称: U16 DS18B20_Temperature(void) //实现功能: 得到18B20温度值 //入口参数: 无

//出口返回值: 温度值

//======================================== U16 DS18B20_Temperature(void) {

float tt; U8 a,b;

DS18B20_Init();

usDelay(4);/*delay(1);*/

DS18B20_WriteByte(DS18B20_SkipROM); DS18B20_WriteByte(DS18B20_ReadSCR); a=DS18B20_ReadByte(); b=DS18B20_ReadByte(); temp=b;

temp<<=8; //two byte compose a int variable temp=temp|a; tt=temp*0.0625; temp=tt*10+0.5; return temp; }

//======================================== //函数名称: void Test_DS18B20(void) //实现功能: 18B20测试程序 //入口参数: 无 //出口返回值: 无

//======================================== void Test_DS18B20(void) {

U16 tmp;

TFT_Init(); //LCD初始化

Test_TFT(); //上白框背景

for (k=0;k<340;k++)//hang for (j=10;j<520;j++) //列

LCD_BUFFER[k][j]=COLOR_RED; //红色铺满屏幕 Uart_Printf(\

Uart_Printf(\ while(1) {

DS18B20_TmpChange(); Delay(1000);

tmp = DS18B20_Temperature(); //

Uart_Printf(\ LCD_Display_hanzi_16_16(50,30,hanzi[10]);//通 LCD_Display_hanzi_16_16(70,30,hanzi[11]);//信 LCD_Display_hanzi_16_16(90,30,hanzi[12]);//工 LCD_Display_hanzi_16_16(110,30,hanzi[13]);//程 LCD_Display_hanzi_16_16(130,30,hanzi[7]);//詹 LCD_Display_hanzi_16_16(150,30,hanzi[8]);//文 LCD_Display_hanzi_16_16(170,30,hanzi[9]);//魁 LCD_Display_hanzi_16_16(30,100,hanzi[14]);//温 LCD_Display_hanzi_16_16(50,100,hanzi[15]);//度 LCD_Display_hanzi_16_16(70,100,hanzi[16]);//是 LCD_Display_English_8_16(90,100,number[tmp/100]);

LCD_Display_English_8_16(100,100,number[(tmp0)/10]); LCD_Display_English_8_16(120,100,number[tmp]); LCD_Display_English_8_16(110,100,number[10]);//点 LCD_Display_hanzi_16_16(130,100,hanzi[17]);//摄 LCD_Display_hanzi_16_16(150,100,hanzi[18]);//氏

LCD_Display_hanzi_16_16(170,100,hanzi[15]);//度 t=tmp; } }

主函数

//====================================================================== // 工程名称: DS18B20.mcp

// 功能描述: 驱动DS18B20,在终端上显示温度值 // IDE环境: ADS v1.2 // 组成文件: main.c // 硬件连接: DQ ---- GPB5

// 维护记录: 2014-06-12 V1.0 by xgc


ARM课程设计报告(数字温度计的设计)(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:地铁施工监理现场巡视主要内容

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: