资源简介
PROTEUS仿真DS18B20(程序+仿真)1602显示
代码片段和文件信息
#include
#include
#include
extern void delay(unsigned int x);
void delay1()
{
char i=20;
do
{
_nop_();
}while(--i!=0);
}
void i2c_init()
{
SDA=1;
delay1();
SCL=1;
delay1();
}
void i2c_start()
{
SDA=1;
delay1();
SCL=1;
delay1();
SDA=0;
delay1();
SCL=0;
delay1();
}
void i2c_write(unsigned char temp)
{
unsigned char t;
for(t=0;t<8;t++)
{
SDA=(bit)(temp&0x80);
temp<<=1;
SCL=1;
delay1();
SCL=0;
delay1();
}
}
unsigned char i2c_read()
{
unsigned char datt;
SDA=1; //as in port
for(t=0;t<8;t++)
{
SCL=1;
delay1();
dat<<=1;
if(SDA)
dat++;
SCL=0;
delay1();
}
return(dat);
}
bit i2c_getack()
{ bit ack;
unsigned char i=0;
SDA=1;
delay1();
SCL=1;
delay1();
while((i<100)&&(SDA==1))
{
i++;
}
ack = SDA;
SCL =0;
delay1();
return(ack);
}
void i2c_putack(bit ack)
{
SDA = ack;
delay1();
SCL = 1;
delay1();
SCL = 0;
delay1();
}
void i2c_stop()
{
SDA=0;
delay1();
SCL=1;
delay1();
SDA=1;
delay1();
delay(300);
}
bit i2c_puts
( unsigned char SlaveAddr
unsigned char SubAddr
unsigned char *dat
unsigned char Size
)
{
i2c_start();
i2c_write(SlaveAddr);
if(i2c_getack())
{
i2c_stop();
return 1;
}
i2c_write(SubAddr);
if(i2c_getack())
{
i2c_stop();
return 1;
}
do
{
i2c_write(*dat++);
if(i2c_getack())
{
i2c_stop();
return 1;
}
}while(--Size!=0);
i2c_stop();
return 0;
}
/*
bit I2C_Gets
(
unsigned char SlaveAddr
unsigned char SubAddr
unsigned char *dat
unsigned char Size
)
{
//定义临时变量
unsigned char a;
// char a[3];
//检查长度
if ( Size == 0 ) return 0;
i2c_start();
a=SlaveAddr&0xfe;
i2c_write(a);
if(i2c_getack())
{
i2c_stop();
return 1;
}
i2c_write(SubAddr);
if(i2c_getack())
{
i2c_stop();
return 1;
}
i2c_start();
i2c_write(a+1);
if(i2c_getack())
{
i2c_stop();
return 1;
}
//接收数据
for (;;)
{
*dat++ = i2c_read();
if ( --Size == 0 )
{
i2c_putack(1);
break;
}
i2c_putack(0);
}
//接收完毕,停止I2C总线,并返回结果
i2c_stop();
return 0;
} */
bit i2c_gets
( unsigned char SlaveAddr
unsigned char SubAddr
unsigned char *datt
unsigned char Size
)
{
unsigned char a;
i2c_start();
a=SlaveAddr&0xfe;
i2c_write(a);
if(i2c_getack())
{
i2c_stop();
return 1;
}
i2c_write(SubAddr);
if(i2c_getack())
{
i2c_stop();
return 1;
}
i2c_start();
i2c_write(a+1);
if(i2c_getack())
{
i2c_stop();
return 1;
}
do
{
*datt++=i2c_read();
i2c_putack(0);
}while(--Size!=0);
i2c_putack(1);
i2c_stop();
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2009-07-21 23:09 1602lcd\程序\
文件 652 2009-07-20 16:13 1602lcd\程序\main
文件 942 2009-07-20 16:13 1602lcd\程序\main.asm
文件 304 2009-07-20 16:13 1602lcd\程序\main.hex
文件 25 2009-07-20 16:13 1602lcd\程序\main.lnp
文件 5244 2009-07-20 16:13 1602lcd\程序\main.LST
文件 3189 2009-07-20 16:13 1602lcd\程序\main.M51
文件 662 2009-07-20 16:13 1602lcd\程序\main.OBJ
文件 1331 2009-07-21 23:09 1602lcd\程序\main.Opt
文件 164 2009-07-21 23:09 1602lcd\程序\main.plg
文件 2119 2009-07-20 15:16 1602lcd\程序\main.Uv2
文件 1325 2009-07-20 16:15 1602lcd\程序\main_Opt.Bak
目录 0 2009-07-21 12:23 1602lcd\仿真\
文件 151 2009-07-21 09:17 1602lcd\仿真\1602lcd.DO
文件 69986 2009-07-21 12:23 1602lcd\仿真\1602lcd.DSN
文件 4668 2009-07-21 09:17 1602lcd\仿真\1602lcd.EDF
文件 1054 2009-07-21 12:23 1602lcd\仿真\1602lcd.PWI
文件 1054 2009-07-20 16:15 1602lcd\仿真\DS18B20.PWI
文件 68104 2009-07-21 09:17 1602lcd\仿真\Last Loaded 1602lcd.DBK
文件 75515 2009-07-20 14:04 1602lcd\仿真\Last Loaded DS18B20.DBK
目录 0 2009-07-20 13:00 proteus_2402\51仿真\
文件 130594 2009-07-20 13:00 proteus_2402\51仿真\51.DSN
文件 2291 2009-07-20 13:00 proteus_2402\51仿真\51.PWI
文件 130886 2009-07-20 13:00 proteus_2402\51仿真\Last Loaded 51.DBK
目录 0 2009-07-20 12:09 proteus_2402\i2c\
文件 17125 2009-07-20 11:53 proteus_2402\i2c\2402
文件 3490 2009-07-20 11:53 proteus_2402\i2c\2402.hex
文件 66 2009-07-20 11:53 proteus_2402\i2c\2402.lnp
文件 22869 2009-07-20 11:53 proteus_2402\i2c\2402.M51
文件 2535 2009-07-20 12:09 proteus_2402\i2c\2402.Opt
文件 1445 2009-07-20 12:09 proteus_2402\i2c\2402.plg
............此处省略17个文件信息
- 上一篇:12864DDRAM入门
- 下一篇:粗糙集属性约简及代码
相关资源
- proteus+8086 8255并行I/O扩展实验
- 矩阵键盘数码管显示+protues仿真源程序
- 基于单片机万年历+温度+LCD12864 prote
- 一个用proteus仿真的数码管显示键盘按
- 51密码锁+proteus仿真
- 基于AT89C51_DS18B20的数字温度计设计
- PID控制直流电机调速含proteus仿真
- AVR ATMEGA16 SPI双机通信的PROTEUS仿真 双
- proteus仿真 电机驱动电路
- 8253产生方波和中断Proteus8086
- 使用DAC0832的DA转换实验Proteus8086
- 8259的8LED显示按键中断
- 8255的8LED显示矩阵键盘Proteus8086
- 8251串行口通讯仿真Proteus8086
- 51单片机驱动DS1302时间模块+DS18B20温度
- STC89C52 LCD1602 DS18B20 LED
- arduino_LiquidCrystal_I2C库及proteus仿真LC
- 频率电压电流仿真检测_Proteus仿真单片
- proteus纯数字电路数字钟
- proteus中51单片机制作的计算器
- 走马灯,流水灯,KEIL,PROTEUS
- ADC0832 Proteus仿真及C51驱动源码
- 74HC165 并转串 例程,带proteus仿真
- DS18B20 Verilog驱动程序
- 基于DS18B20的DSP温度测量并用液晶显示
- 基于ARM的DS18B20程序
- 51单片机PROTEUS超值仿真 附源程序
- 4511做的八路抢答器 proteus
- 可调时钟+闹钟——基于DS1302
- GPS卫星定位proteus仿真.rar
评论
共有 条评论