历史上的今天
今天是:2025年06月25日(星期三)
2018年06月25日 | 单片机——ds18b20——代码
2018-06-25 来源:eefocus
#include
#include "../delay/delay.h"
#include "lcd.h"
/*====================================================
判断写入命令/数据函数
=====================================================*/
void lcd_write(unsigned char byte, unsigned char flag)
{
if(flag)
{
RS = 1; //选择数据寄存器
}
else
{
RS = 0; //选择指令寄存器
}
RW = 0; //写
E = 1; //选中LCD
LCDPORT = byte;
delay_us(5); //稳定
E = 0; //失能LCD
}
/*====================================================
LCD初始化函数
=====================================================*/
void lcd_init()
{
delay_ms(15);
lcd_write(0x38,LCD_WRITE_COM); //显示8位数据接口,两行显示,5*7点阵字符
delay_ms(5);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x08,LCD_WRITE_COM); //关闭显示,关闭光标的闪烁
delay_ms(5);
lcd_write(0x01,LCD_WRITE_COM); //清屏
delay_ms(5);
lcd_write(0x06,LCD_WRITE_COM); //设置指针方式,画面不平移
delay_ms(5);
lcd_write(0x0c,LCD_WRITE_COM); //打开显示
delay_ms(5);
}
/*====================================================================================
写入字符函数
函数原型:void lcd_dis_byte(unsigned char x, unsigned char y, unsigned char byte);
说明:x为行(1——2),y为列(1——8)。
=====================================================================================*/
void lcd_dis_byte(unsigned char x, unsigned char y, unsigned char byte)
{
unsigned char add;
if(((0 == x) || (x > 2)) || ((0 == y) || (y > 16)))
{
return ;
}
add = 0x80 + (x - 1) * 0x40 + (y - 1);
lcd_write(add,LCD_WRITE_COM);
lcd_write(byte,LCD_WRITE_DATA);
}
/*====================================================================================
写入字符串函数
函数原型:void lcd_dis_str(unsigned char x, unsigned char y, unsigned char *disdata);
说明:x为行(1——2),y为列(1——8)。
=====================================================================================*/
void lcd_dis_str(unsigned char x, unsigned char y, unsigned charchar *disdata)
{
unsigned char add;
if(((0 == x) || (x > 2)) || ((0 == y) || (y > 16)))
{
return ;
}
add = 0x80 + (x - 1) * 0x40 + (y - 1);
lcd_write(add,LCD_WRITE_COM);
while(*disdata != '\0')
{
lcd_write(*disdata,LCD_WRITE_DATA);
disdata++;
}
}
#if 0
/*===========================================================================
时间显示函数
============================================================================*/
void lcd_dis_time()
{
lcd_write(0x80 + 4,LCD_WRITE_COM);
lcd_write((hour / 10) + 0x30,LCD_WRITE_DATA);
lcd_write((hour % 10) + 0x30,LCD_WRITE_DATA);
lcd_write((min / 10) + 0x30,LCD_WRITE_DATA);
lcd_write((min % 10) + 0x30,LCD_WRITE_DATA);
lcd_write((sec / 10) + 0x30,LCD_WRITE_DATA);
lcd_write((sec % 10) + 0x30,LCD_WRITE_DATA);
}
#endif
ds18b20.c
[objc] view plain copy 在CODE上查看代码片派生到我的代码片
#include
#include
#include
#include "./lcd/lcd.h"
#include "./delay/delay.h"
sbit ds = P1^0;
bit ack = 0;
/*=================================================================
复位DS18B20
==================================================================*/
void ds_reset()
{
ds = 1;
ds = 0;
delay_us(200);
delay_us(100); //480-960us,800us
ds = 1; //free ds
delay_us(30);
if(0 == ds)
{
ack = 1;
}
else
{
ack = 0;
}
delay_us(200);
delay_us(100);
}
/*=================================================================
向DS18B20中写入一个字节
==================================================================*/
void ds_send_byte(unsigned char byte)
{
unsigned char i;
for(i = 0; i < 8; i++)
{
ds = 0;
_nop_();
_nop_();
ds = byte & 0x01;
byte >>= 1;
delay_us(30);
ds = 1;
}
delay_us(30);
}
bit ds_read_bit()
{
bit temp;
ds = 1;
ds = 0;
_nop_();
_nop_();
ds = 1;
temp = ds;
delay_us(30);
return temp;
}
unsigned char ds_read_byte()
{
unsigned char i;
unsigned char j;
unsigned char k;
for(i = 0; i < 8; i++)
{
j = ds_read_bit();
k = (j << 7) | (k >> 1);
}
return k;
}
void main()
{
unsigned char a;
unsigned char disbuf[20];
unsigned int temp;
unsigned int b;
float temperature;
lcd_init();
while(1)
{
ds_reset();
ds_send_byte(0xcc);
ds_send_byte(0x44);
ds_reset();
ds_send_byte(0xcc);
ds_send_byte(0xbe);
a = ds_read_byte();
b = ds_read_byte();
temp = (b << 8) | a;
temperature = (float)temp * 0.0625;
sprintf(disbuf,"Temp is %7.3f",temperature);
lcd_dis_str(1,1,disbuf);
}
}
上一篇:51单片机控制LCD1602模块
下一篇:单片机——红外遥控器——代码
史海拾趣
|
刚装的ev4.0 运行程序提示 Cannot Execute Program 今天上午刚安装的evc4.0 安装过程是 ActiveSync->eVC4->eVC4 sp4->smartphone SDK->crosoft Pocket PC 2003 SDK->Windows Mobile 2003 Second Edition Emulator Images for Pocket PC - CHS; &nbs ...… 查看全部问答> |
|
最近需要开发一个扫描仪在wince下的驱动程序,但是没有一点头绪,希望做过的兄弟帮忙给点提示。 我用的板子是2440+wince5.0,扫描仪还没确定。 要做这样一个驱动需要做些什么准备?怎么开始?如果有具体流程就更好了, ...… 查看全部问答> |
|
各位好!请问如何能将一个wince的程序最小化呢?发现showwindow(SW_MINIMIZE)并不起作用。和windowmobile差别很大呀!谢谢大家… 查看全部问答> |
|
没有错误,AD转换是500Hz,转换出来才200Hz左右,错在哪里啊,感觉是while(AD0INT==0); 浪费时间了,高手来帮帮忙 //----------------------------------------------------------------------------- void PORTb_Init (void) { // &nbs ...… 查看全部问答> |
|
新手求教,关于学习驱动开发! 对于驱动开发本人是菜鸟一个,由于工作需要,要求必须掌握驱动程序开发,主要是针对windows内核的(不涉及到硬件的驱动)。由于本人对这方面的知识掌握得很少,所以在这里请教各位驱动前辈我应该从哪里入手,该掌握 ...… 查看全部问答> |
|
我现在想调试串口程序,在串口上外接一个设备时,会不停有个对话提示:USB CONNE未联接,请问这是问题大概是串口的哪个程序有问题啊? 我想用WINCE5.0编译生成修改后的NK文件。请问要怎样编译,才最快呀?… 查看全部问答> |
|
关于CCS安装的问题,小女子急!没分了,真抱歉啊,5555~ CCS 2.2版本,同一个软件我在公司的机子上安装没有出现任何问题,在自己的机子上安装,装了好几次都出现同样的问题,每次open一个新的工程,就出现no build tools were found.两台机子都同是xp的系统. 请高手指点,拜托了!… 查看全部问答> |




