资源简介
包括DS18B20的lcd1602显示和LED显示,分别放在两个文件夹里,包括Proteus仿真图和c源代码及hex文件,可以直接使用,也可修改其中的数据显示函数
代码片段和文件信息
#include
#include //包含_nop_()函数定义的头文件
#define uint unsigned int
#define DATA P0
sbit DQ=P1^0; //数据线
sbit rs = P2^0;
sbit rw = P2^1;
sbit en = P2^2;
unsigned char time_DS18B20; //设置全局变量,专门用于严格延时
unsigned char baishige;
unsigned char TL; //储存暂存器的温度低位
unsigned char TH; //储存暂存器的温度高位
unsigned char TN; //储存温度的整数部分
unsigned int TD; //储存温度的小数部分
void delay(unsigned int num)
{
unsigned int xy;
for (x=num; x>0; x--)
for(y=110; y>0; y--);
}
void write_cmd (unsigned char cmd)
{
rs = 0;
rw = 0;
DATA = cmd;
delay(5);
en = 1;
delay(5);
en = 0;
}
void write_data (unsigned char dat)
{
rs = 1;
rw = 0;
DATA = dat;
delay(5);
en = 1;
delay(5);
en = 0;
}
void lcd_init (void)
{
rw = 0;
rs = 0;
en = 0;
write_cmd(0x02);
write_cmd(0x06);
write_cmd(0x0c);
write_cmd(0x38);
write_cmd(0x01);
}
void delay1ms()
{
unsigned char ij;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
;
}
void delaynms(int n)
{
unsigned char i;
for(i=0;i delay1ms();
}
bit Init_DS18B20(void)
{
bit flag_DS18B20; //储存DS18B20是否存在的标志,flag=0,表示存在;flag=1,表示不存在
DQ = 1; //先将数据线拉高
for(time_DS18B20=0;time_DS18B20<2;time_DS18B20++) //略微延时约6微秒
;
DQ = 0; //再将数据线从高拉低,要求保持480~960us
for(time_DS18B20=0;time_DS18B20<200;time_DS18B20++) //略微延时约600微秒
; //以向DS18B20发出一持续480~960us的低电平复位脉冲
DQ = 1; //释放数据线(将数据线拉高)
for(time_DS18B20=0;time_DS18B20<10;time_DS18B20++)
; //延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲)
flag_DS18B20=DQ; //让单片机检测是否输出了存在脉冲(DQ=0表示存在)
for(time_DS18B20=0;time_DS18B20<200;time_DS18B20++) //延时足够长时间,等待存在脉冲输出完毕
;
return (flag_DS18B20); //返回检测成功标志
}
unsigned char ReadOneChar( )
{
unsigned char i=0;
unsigned char dat; //储存读出的一个字节数据
for (i=0;i<8;i++)
{
DQ =1; // 先将数据线拉高
_nop_(); //等待一个机器周期
DQ = 0; //单片机从DS18B20读书据时将数据线从高拉低即启动读时序
dat>>=1;
_nop_(); //等待一个机器周期
DQ = 1; //将数据线“人为“拉高为单片机检测DS18B20的输出电平作准备
for(time_DS18B20=0;time_DS18B20<3;time_DS18B20++); //延时约6us,使主机在15us内采样
if(DQ==1)
dat|=0x80; //如果读到的数据是1,则将1存入dat
else
dat|=0x00;//如果读到的数据是0,则将0存入dat
//将单片机检测到的电平信号DQ存入r[i]
for(time_DS18B20=0;time_DS18B20<8;time_DS18B20++)
; //延时3us两个读时序之间必须有大于1us的恢复期
}
return(dat); //返回读出的十进制数据
}
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=0; i<8; i++)
{
DQ =1; // 先将数据线拉高
_nop_(); //等待一个机器周期
DQ=0; //将数据线从高拉低时即启动写时序
DQ=dat&0x01; //利用与运算取出要写的某位二进制数据
//并将其送到数据线上等待DS18B20采样
for(time_DS18B20=0;time_DS18B20<10;time_DS18B20++)
;//延时约30us,DS18B20在拉低后的约15~60us期间从数据线上采样
DQ=1; //释放数据线
for(time_DS18B20=0;time_DS18B20<1;time_DS18B20++)
;//延时3us两个写时序间至少需要1us的恢复期
dat>>
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5822 2018-12-17 15:55 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602\Keil\Main.c
文件 10299 2018-12-11 17:05 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602\Keil\Main.LST
文件 11511 2018-12-11 17:05 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602\Keil\Main.OBJ
文件 6376 2009-05-07 14:37 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602\Keil\STARTUP.A51
文件 14048 2018-12-11 17:05 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602\Keil\STARTUP.LST
文件 749 2018-12-11 17:05 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602\Keil\STARTUP.OBJ
文件 10319 2018-12-11 17:05 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602\Keil\Temp
文件 2219 2018-12-11 17:05 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602\Keil\Temp.hex
文件 41 2018-12-11 17:05 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602\Keil\Temp.lnp
文件 16005 2018-12-11 17:05 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602\Keil\Temp.M51
文件 163 2018-12-17 15:28 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602\Keil\Temp.plg
文件 55657 2018-12-17 15:56 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602\Keil\Temp.uvopt
文件 13395 2018-11-25 18:11 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602\Keil\Temp.uvproj
文件 55651 2018-12-11 17:05 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602\Keil\Temp_uvopt.bak
文件 13396 2018-11-23 17:44 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602\Keil\Temp_uvproj.bak
文件 15742 2018-11-25 18:05 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602\Proteus仿真图\Backup Of 温显工程.pdsbak
文件 26844 2018-11-25 18:12 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602\Proteus仿真图\Last Loaded 温显工程.pdsbak
文件 27105 2018-11-25 18:22 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602\Proteus仿真图\温显工程.pdsprj
文件 2945 2018-11-27 22:27 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602\Proteus仿真图\温显工程.pdsprj.DESKTOP-G525MQ4.cheng.workspace
文件 6341 2010-09-09 13:26 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LED\wenduji.c
文件 3155 2010-09-09 13:26 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LED\wenduji.hex
文件 101981 2010-09-09 13:28 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LED\温度计.DSN
目录 0 2018-12-17 15:59 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602\Keil
目录 0 2018-12-17 15:59 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602\Proteus仿真图
目录 0 2018-12-17 15:59 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LCD1602
目录 0 2018-12-17 15:58 DS18B20+lcd1602显示+LED数码管显示\DS18B20+LED
目录 0 2018-12-17 15:58 DS18B20+lcd1602显示+LED数码管显示
----------- --------- ---------- ----- ----
399764 27
............此处省略0个文件信息
- 上一篇:Bosch CAN总线协议-中文版
- 下一篇:网页设计课程设计
相关资源
- 基于51单片机和LCD1602的计算器
- 基于verilog使得led闪烁~
- 16*16点阵设计电路图
- 单片机代码LED灯,蜂鸣器,按键,流
- STM32 OLED打点划线画圆 OLED电子罗盘 程
- 51单片机,DS18B20实现程序
- LED点阵显示汉字
- STM32F103驱动DS18B20程序
- Altium designer 四位集成多功能数码管
- 0.96英寸oled屏iic通讯中文说明.doc
- 32*64点阵LED显示屏单元板原理图
- STM32控制LED灯
- STC89C52+LCD1602+DS1302电子时钟
- VHDL LCD1602显示程序
- 51单片机 菜单程序OLED屏
- 基于STC12C5A60S2的DS18B20温度显示工程
- 128*32OLED点阵屏驱动已移植GUI
- 基于89C51的等精度频率计LCD1602显示1
- 以51单片机为核心的DS18B20的数码管显
- net.sourceforge.shelled-site-2.0.2
- 基于DS18B20的数字温度计设计原理图
- 用DS18B20测量温度并在12864液晶屏上显
- 6个16X16LED点阵 滚动显示 源代码和pr
- nrf2401的收发程序 带到DS18B20
- 8255单片机led显示实验
- LCD1602液晶显示的计算器加减乘除
- 基于8255实现七人抢答器LED显示微机原
- Spring @Scheduled定时任务动态修改cron参
- VHDLled灯程序
- LCD12864 万年历 单片机 农历 显示 温度
评论
共有 条评论