📄 ds.c
字号:
#include<reg2051.h>
#include<absacc.h>
#define unchar unsigned char
unchar tim;
unchar code table[]={0X30,0X31,0X32,0X33,0X34,0X35,0X36,0X37,0X38,0X39,0X41,0X42,0X43,0X44,0X45,0X46};
unchar code tabl1[]={0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d ,0x7d , 0x07 , 0x7f , 0x6f };
sbit e=P1^3;
sbit rs=P1^4;
sbit sck=P1^6;
sbit sda=P1^5;
sbit ress=P3^2;
sbit sclk=P3^3;
sbit io=P3^4;
void init_18b20();
void write_18b20(unchar datt);
void read_18b20();
void asm(unchar com);
void see();
void delay();
void time();
void lcd();
void lcd_com(unchar com);
void lcd_write(unchar write);
void m_18b20();
void ad_1();
void i2c_nop();
void i2c_start();
void i2c_stop();
void i2c_write(unchar wrtie);
void i2c_init();
unchar i2c_read_byte();
unchar i2c_read(unchar address);
void i2c_write_add_date(unchar add,date);
void i2c_respons();
unchar ds1302_read(unchar read);
void ds1302_see();
void ds1302_write(unchar com,date);
void main()
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
lcd_com(0x38);
lcd_com(0x09);
lcd_com(0x0c);
lcd_com(0x01);
DBYTE[0X63]=0xff;
ds1302_write(0x8e,0x80);
while(1)
{
if(tim==20)
{
// ds1302_see();
tim=0;
EA=0;
init_18b20();
write_18b20(0xCC);
/// ad_1();
write_18b20(0x44);
delay();
init_18b20();
write_18b20(0xCC);
// ad_1();
write_18b20(0xbe);
read_18b20();
see();
EA=1;
}
}
}
void init_18b20()
{
#pragma asm
CLR 50H
MOV R7,#250
CLR P1.0
DJNZ R7,$
SETB P1.0
MOV R7,#6
DJNZ R7,$
JB P1.0,$
MOV R7,#200
DJNZ R7,$
MOV R5,#60
DJNZ R5,$
#pragma endasm
}
void write_18b20(unchar datt)
{
DBYTE[0X51]=datt;
#pragma asm
MOV R6,#8
MOV A,51H
DEL: RRC A
LCALL WRITE
DJNZ R6,DEL
MOV R5,#60
DJNZ R5,$
RET
WRITE: MOV R7,#28
CLR P1.0
NOP
NOP
NOP
NOP
NOP
MOV P1.0,C
DJNZ R7,$
SETB P1.0
RET
#pragma endasm
}
void m_18b20()
{
#pragma asm
MOV R5,#8
LOOP3: LCALL DD
RRC A
DJNZ R5,LOOP3
RET
DD: MOV R7,#23
MOV R6,#8
CLR P1.0
NOP
NOP
NOP
NOP
NOP
SETB P1.0
DJNZ R6,$
MOV C,P1.0
DJNZ R7,$
RET
#pragma endasm
}
void read_18b20()
{
#pragma asm
MOV R5,#8
LOOP: LCALL DEL1
RRC A
DJNZ R5,LOOP
MOV 60H,A
MOV R5,#60
DJNZ R5,$
MOV R5,#8
LOOP1: LCALL DEL1
RRC A
DJNZ R5,LOOP1
MOV 61H,A
MOV R5,#60
DJNZ R5,$
RET
DEL1: MOV R7,#23
MOV R6,#8
CLR P1.0
NOP
NOP
NOP
NOP
NOP
SETB P1.0
DJNZ R6,$
MOV C,P1.0
DJNZ R7,$
RET
#pragma endasm
}
void asm(unchar com)
{
DBYTE[0X66]=com;
#pragma asm
CK EQU P1.1
DATE EQU P1.2
SETB CK
MOV R7,#8
MOV A,66H
SS: RLC A
MOV DATE,C
CLR CK
SETB CK
DJNZ R7,SS
#pragma endasm
}
void delay()
{
unchar x,y;
for(x=100;x>0;x--)
for(y=6;y>0;y--);
}
void see()
{
unchar shi,ge;
DBYTE[0X65]=DBYTE[0X60];
if(DBYTE[0X63]!=DBYTE[0X60])
{
DBYTE[0X63]=DBYTE[0X60];
if(DBYTE[0X61]==0XFF)
{
DBYTE[0X60]=256-DBYTE[0X60];
DBYTE[0X60]=DBYTE[0X60]/2;
shi=DBYTE[0X60]/10;
ge=DBYTE[0X60]%10;
lcd_com(0x01);
time();
time();
time();
time();
time();
time();
asm(tabl1[ge]);
asm(tabl1[shi]);
//lcd_write('-');
//lcd_write(table[shi]);
//lcd_write(table[ge]);
//lcd_write(0xdf);
//lcd_write('C');
}
else{
lcd_com(0x01);
time();
time();
time();
time();
time();
time();
lcd_write('+');
if(DBYTE[0X65]>=200)
{
DBYTE[0X60]=DBYTE[0X60]/2;
DBYTE[0X60]=DBYTE[0X60]-100;
shi=DBYTE[0X60]/10;
ge=DBYTE[0X60]%10;
/* lcd_write('1');
lcd_write(table[shi]);
lcd_write(table[ge]);
lcd_write(0xdf);
lcd_write('C'); */
asm(tabl1[ge]);
asm(tabl1[shi]);
}
else{
DBYTE[0X60]=DBYTE[0X60]/2;
DBYTE[0X65]=DBYTE[0X60];
shi=DBYTE[0X60]/10;
ge=DBYTE[0X60]%10;
/* lcd_write(table[shi]);
lcd_write(table[ge]);
lcd_write(0xdf);
lcd_write('C'); */
asm(tabl1[ge]);
asm(tabl1[shi]);
}
}
}
}
void time()
{
unchar x1;
for(x1=100;x1>0;x1--);
}
void lcd_com(unchar com)
{
rs=0;
e=0;
asm(com);
time();
e=1;
time();
e=0;
time();
}
void lcd_write(unchar write)
{
rs=1;
e=0;
asm(write);
time();
e=1;
time();
e=0;
time();
}
void time_0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tim++;
}
void ad_1()
{
write_18b20(0x11);
write_18b20(0x11);
write_18b20(0x11);
write_18b20(0x11);
write_18b20(0x11);
write_18b20(0x11);
write_18b20(0x11);
write_18b20(0x11);
}
void i2c_nop()
{
#pragma asm
MOV R3,#6
DJNZ R3,$
#pragma endasm
}
void i2c_start()
{
sda=1;
i2c_nop();
sck=1;
i2c_nop();
sda=0;
i2c_nop();
}
void i2c_stop()
{
sda=0;
i2c_nop();
sck=1;
i2c_nop();
sda=1;
i2c_nop();
}
void i2c_write(unchar write)
{
DBYTE[0X70]=write;
#pragma asm
MOV R6,#8
DEL5: RLC A
CLR P1.6 //SCK
LCALL TP
MOV P1.5,C
LCALL TP
SETB P1.6
LCALL TP
CLR P1.6
DJNZ R6,DEL5
RET
TP: NOP
NOP
NOP
NOP
NOP
RET
#pragma endasm
}
void i2c_init()
{
sck=1;
sda=1;
i2c_nop();
}
unchar i2c_read_byte()
{
unchar i;
sck=0;
i2c_nop();
sda=1;
i2c_nop();
for(i=0;i<8;i++)
{
sck=1;
i2c_nop();
DBYTE[0X71]=(DBYTE[0X71]<<1)|sda;
sck=0;
i2c_nop();
}
return DBYTE[0X71];
}
void i2c_respons()
{
unchar i;
sck=1;
i2c_nop();
while((sda==1)&&(i<200))i++;
sck=0;
i2c_nop();
}
void i2c_add_write(unchar add,date)
{
i2c_start();
i2c_write(0xa0);
i2c_respons();
i2c_write(add);
i2c_respons();
i2c_write(date);
i2c_respons();
i2c_stop();
}
unchar i2c_read(unchar address)
{
i2c_start();
i2c_write(0xa0);
i2c_respons();
i2c_write(address);
i2c_respons();
i2c_start();
i2c_write(0xa1);
i2c_respons();
DBYTE[0X72]=i2c_read_byte();
i2c_stop();
return DBYTE[0X72];
}
unchar ds1302_read(unchar read)
{
DBYTE[0X73]=read;
ress=1;
#pragma asm
MOV R6,#8
MOV A,73H
EEL0: CLR P3.3
LCALL EEL
RRC A
MOV P3.2,C
SETB P3.3
LCALL EEL
DJNZ R6,EEL0
MOV R6,#8
EEL1: CLR P3.3
LCALL EEL
MOV C,P3.2
RLC A
SETB P3.3
LCALL EEL
DJNZ R6,EEL1
MOV 74H,A
RET
EEL: MOV R5,#20
DJNZ R5,$
RET
#pragma endasm
return DBYTE[0X74];
}
void ds1302_write(unchar com,date)
{
DBYTE[0X74]=com;
DBYTE[0X75]=date;
ress=1;
#pragma asm
MOV R6,#8
MOV A,74H
AEL0: CLR P3.3
LCALL AEL
RRC A
MOV P3.2,C
SETB P3.3
LCALL AEL
DJNZ R6,AEL0
MOV R6,#8
MOV A,75H
AEL1: CLR P3.3
LCALL AEL
RRC A
MOV P3.2,C
SETB P3.3
LCALL AEL
DJNZ R6,AEL1
RET
AEL: MOV R5,#20
DJNZ R5,$
RET
#pragma endasm
}
void ds1302_see()
{
unchar shi,ge,temp;
temp=ds1302_read(0x81);
shi=temp/10;
ge=temp%10;
lcd_com(0x80+0x04);
lcd_write(table[shi]);
lcd_write(table[ge]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -