📄 max504.c
字号:
/*test tempreture and humidity use LTM8901*/
/*Date 2003.1.2 VER1.0 */
#include <reg51.h>
#include <absacc.h>
#define uchar unsigned char
#define schar signed char
#define uint unsigned int
#define sint signed int
#define DSA XBYTE[0x800a]
#define DSB XBYTE[0x800b]
#define DSC XBYTE[0x800c]
#define DSD XBYTE[0x800d]
#define CHOUR XBYTE[0x8000+0x04]
#define CMINUTE XBYTE[0x8000+0x02]
#define CSECOND XBYTE[0x8000+0x00]
#define DA273 XBYTE[0xa000]
#define DISP273 XBYTE[0xb000]
#define CTRL273 XBYTE[0xc000]
#define KEY373 XBYTE[0xd000]
uint delayl,delay,flashflag,intflag;
sbit PSW_5=PSW^5;
uchar i,j,k;
uchar point,delays;
bdata uchar a,b,sendata,serialdata;
uint ad16data,tensiontest,testuse,testmax,testmin; /*0~65535*/
sint da16data,da16new,daset1; /*-32768~32767*/
bdata uchar adword0,adword,ad8data,da8data;
sbit ad0bit=ad8data^0; sbit adw7bit=adword^7;sbit da7bit=da8data^7;
sbit a_0=a^0;sbit a_7=a^7;
sbit xcs=P1^0 ;sbit xso=P1^1 ;sbit xsck=P1^2;sbit xsi=P1^3;
sbit adck=P3^5; sbit addi=P1^6; sbit addo=P1^5; sbit adcs=P1^4;
sbit P3_1=P3^1;
sbit PC_MC=P1^7;
sbit RTCON=P3^4; /* receive=0; send=1 */
uchar tempbyte;
uint tempadd;
uchar adddelayl;
sbit sendbit_0=sendata^0;
uchar dispa;
uchar t_hour,t_minute,t_second;
uchar dispbit,disptime,dispcount;
uchar keyvalue; /*receive key data*/
uchar funkeystatus; /*fun key data*/
uchar keyflag; /*key flag*/
uchar new,comerror;
sint tvalue,hvalue,tvaluenew;
float tvalueexact;/*exact 0.1 c*/
uchar idata receivedata[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00};
uchar idata receive[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00};
uchar disbuf1[14]={0x01,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00}; /*old display*/
uchar code disptab[25]={0x88,0xeb,0x4c,0x49,0x2b,0x19,0x18,0xcb,0x08,0x0b,
0x7f,0x0e,0xff,0x80,0xe3,0x44,0x41,0x23,0x11,0x10,
0xc3,0x00,0x03,0x2a,0xbc};
/*88H-"0",ebH-"1",4cH-"2",49H-"3",2bH-"4",19H-"5",18H-"6",cbH-"7",08H-"8"*/
/*0bH-"9",7fH-"-",0eH-"P",ffH-" ",2a-"H",bc-"L" because add not-gat no-logic */
/*g f a b dp c d e*/
void rst_wdog(void);
void outbyt(void);
void inbyt(void);
void rdsr_cmd(void);
void wren_cmd(void);
void wip_p(void);
void wrsr_cmd(void);
void wreep(uchar value);
void rdeep(void);
void da(void);
void tlc2543(void);
void ad0(void);
void datatowd(void);
void sendchar(void);
void main()
{ EA=0;
rdsr_cmd();
if((a&0x30)!=0) wrsr_cmd();
rst_wdog();
DSB=0x82;
DSA=0xA0;
DSA=0x20;
DSB=0x06;
dispcount=0; intflag=0; CTRL273=0xff;
IP=0x01; /*00000001--INT0 LEVEL high*/
IE=0x00; /*ALL INT DISABLE*/
TCON=0x01; /*IT0=1 INT0 FOLLOW EDGE*/
SCON=0x70; PCON=0x00; TMOD=0x20; TH1=0xE8;TL1=0xE8;
TR1=1;
EX0=1; /*ENABLE INT0 INTRRUPT*/
ES=0; /*close serial int*/
RTCON=0; /*FOR 75176 RECEVICE */
sendchar();
rst_wdog();
while(1)
{/* daset1=510;*/
dispa=0xff;
dispa=dispa&0xdf;
DA273=dispa;
da16data=1023;
dispa=dispa&0xfe;
DA273=dispa;
da();
dispa=dispa|0x01;
DA273=dispa;
dispa=0xff;
dispa=dispa&0xdf;
DA273=dispa;
da16data=0;
dispa=dispa&0xfd;
DA273=dispa;
da();
dispa=dispa|0x02;
DA273=dispa;
dispa=0xff;
dispa=dispa&0xdf;
DA273=dispa;
da16data=1023;
dispa=dispa&0xfb;
DA273=dispa;
da();
dispa=dispa|0x04;
DA273=dispa;
dispa=0xff;
dispa=dispa&0xdf;
DA273=dispa;
da16data=0;
dispa=dispa&0xf7;
DA273=dispa;
da();
dispa=dispa|0x08;
DA273=dispa;
dispa=0xff;
dispa=dispa&0xdf;
DA273=dispa;
da16data=1023;
dispa=dispa&0xef;
DA273=dispa;
da();
dispa=dispa|0x10;
DA273=dispa;
}
}
void sendchar(void)
{ dispa=0xff;
dispa=dispa&0xfd;
DISP273=dispa;
for(dispbit=0;dispbit<14;dispbit++)
{sendata=disptab[disbuf1[dispbit]];
for(disptime=0;disptime<8;disptime++)
{dispa=dispa&0xfb;
DISP273=dispa;
if((sendata&0x01)==0x01)
{ dispa=dispa|0x01;
DISP273=dispa;
}
else
{ dispa=dispa&0xfe;
DISP273=dispa;
}
dispa=dispa|0x04;
DISP273=dispa;
sendata=sendata>>1;
}
}
dispa=dispa|0x02;
DISP273=dispa;
}
void datatowd(void)
{ disbuf1[12]=dispcount+1;
disbuf1[13]=10;
if((receive[dispcount*3+2]&0x08)==0) /*tempreture>=0*/
{tvaluenew=(sint)((receive[dispcount*3+2]&0x07)*256+receive[dispcount*3+1]);
tvalueexact=(float)(tvaluenew*0.625);
tvaluenew=(sint)(tvalueexact);
if(tvaluenew>1250) tvaluenew=1250;
tvalue=tvaluenew;
}
else /*tempreture<0*/
{tvaluenew=(sint)(-1*((8-(receive[dispcount*3+2]&0x07))*256-receive[dispcount*3+1]));
tvalueexact=(float)(tvaluenew*0.625);
tvaluenew=(sint)(tvalueexact);
if(tvaluenew<=-550) tvaluenew=-550; /*if <-55 display =-55*/
tvalue=tvaluenew;
}
if(tvalue>=0)
{disbuf1[8]=(uchar)(tvalue/1000);
disbuf1[9]=(uchar)((tvalue-disbuf1[8]*1000)/100);
disbuf1[10]=(uchar)((tvalue-disbuf1[8]*1000-disbuf1[9]*100)/10);
disbuf1[11]=(uchar)(tvalue-disbuf1[8]*1000-disbuf1[9]*100-disbuf1[10]*10);
if(disbuf1[8]==0) disbuf1[8]=12; /*test DISplay " "*/
if(disbuf1[9]==0) {if(disbuf1[8]==12) disbuf1[9]=12;}
}
else /*tvalue<0*/
{tvalue=-1*tvalue;
disbuf1[9]=(uchar)(tvalue/100);
disbuf1[10]=(uchar)((tvalue-disbuf1[9]*100)/10);
disbuf1[11]=(uchar)(tvalue-disbuf1[9]*100-disbuf1[10]*10);
if(disbuf1[9]==0) /*test display "-"*/
{disbuf1[8]=12; disbuf1[9]=10;}
else
disbuf1[8]=10;
}
disbuf1[10]=disbuf1[10]+13; /*add "."*/
hvalue=receive[dispcount*3]*5;
disbuf1[4]=(uchar)(hvalue/1000);
disbuf1[5]=(uchar)((hvalue-disbuf1[4]*1000)/100);
disbuf1[6]=(uchar)((hvalue-disbuf1[4]*1000-disbuf1[5]*100)/10);
disbuf1[7]=(uchar)(hvalue-disbuf1[4]*1000-disbuf1[5]*100-disbuf1[6]*10);
if(disbuf1[4]==0) disbuf1[4]=12;
if(disbuf1[5]==0) {if(disbuf1[4]==12) disbuf1[5]=12;}
disbuf1[6]=disbuf1[6]+13;
if((DSA&0x80)==0)
{ t_hour=CHOUR;
t_minute=CMINUTE;
t_second=CSECOND;
}
disbuf1[0]=(uchar)(t_hour/10);
disbuf1[1]=(uchar)(t_hour-disbuf1[0]*10);
disbuf1[2]=(uchar)(t_minute/10);
disbuf1[3]=(uchar)(t_minute-disbuf1[2]*10);
}
void rst_wdog(void)
{xcs=0;
PSW_5=0;PSW_5=0;
xcs=1;
}
void outbyt(void)
{for(i=0;i<8;i++)
{xsck=0;
PSW_5=0;
xsi=a_7;
a=a<<1;
PSW_5=0;
xsck=1;
PSW_5=0;
}
xsi=0;
}
void inbyt(void)
{for(i=0;i<8;i++)
{xsck=1;
PSW_5=0;
xsck=0;
PSW_5=0;
a_0=xso;
PSW_5=a_7;
a=a<<1;
}
a=a>>1;
a_7=PSW_5;
}
void rdsr_cmd(void)
{xsck=0;
PSW_5=0;
xcs=0;
a=0x05;
PSW_5=0;
outbyt();
PSW_5=0;
inbyt();
PSW_5=0;
xsck=0;
xcs=1;
}
void wren_cmd(void)
{xsck=0;
PSW_5=0;
PSW_5=0;
xcs=0;
PSW_5=0;
a=0x06;
PSW_5=0;
outbyt();
xsck=0;
xcs=1;
}
void wip_p(void)
{for(i=0;i<0xef;i++)
{rdsr_cmd();
if(a_0==0) i=0xef;
}
}
void wrsr_cmd(void)
{wren_cmd();
xsck=0;
xcs=0;
a=0x01;
outbyt();
a=0x00;
outbyt();
xsck=0;
xcs=1;
wip_p();
}
void rdeep(void)
{ xcs=1; /*cs to high*/
PSW_5=0; /*for delay 1us*/
PSW_5=0; /*for delay 1us*/
xsck=0; /*BRING SCK LOW */
xcs=0; /*BRING /CS LOW */
a=0x03; /*READ INSTRUCTION "00000011"*/
outbyt(); /*SEND READ INSTRUCTION AND MSB OF ADDRESS*/
a=b; /*read address*/
outbyt(); /*SEND 8 LSBS OF ADDRESS */
inbyt(); /*READ 1ST DATA BYTE*/
b=a; /*SAVE READ TO B*/
xsck=0; /*BRING SCK LOW*/
xcs=1; /*BRING /CS HIGH*/
}
void wreep(uchar value)
{PSW_5=0; /*NOP*/
xcs=1; /*cs*/
PSW_5=0; /*NOP*/
PSW_5=0; /*NOP*/
PSW_5=0; /*NOP*/
wren_cmd();
PSW_5=0; /*NOP*/
xsck=0; /*sck*/
PSW_5=0; /*NOP*/
PSW_5=0; /*NOP*/
PSW_5=0; /*NOP*/
xcs=0; /*cs*/
PSW_5=0; /*NOP*/
PSW_5=0; /*NOP*/
PSW_5=0; /*NOP*/
a=0x02;
outbyt();
a=b;
PSW_5=0; /*NOP*/
PSW_5=0; /*NOP*/
outbyt();
PSW_5=0; /*NOP*/
PSW_5=0; /*NOP*/
a=value;
PSW_5=0; /*NOP*/
PSW_5=0; /*NOP*/
outbyt();
PSW_5=0; /*NOP*/
PSW_5=0; /*NOP*/
xsck=0; /*sck*/
PSW_5=0; /*NOP*/
PSW_5=0; /*NOP*/
PSW_5=0; /*NOP*/
xcs=1; /*cs*/
PSW_5=0; /*NOP*/
PSW_5=0; /*NOP*/
wip_p();
}
void ad0(void)
{ testmin=4096; testmax=0;
adword0=0x00;
adck=0; /*ck to low*/
adcs=1; /* cs to high*/
tlc2543();
adword0=0x00;
tlc2543();
if(testmin>ad16data) testmin=ad16data;
if(testmax<ad16data) testmax=ad16data;
tensiontest=ad16data;
adword0=0x00 ; /*12 bit control word*/
tlc2543();
if(testmin>ad16data) testmin=ad16data;
if(testmax<ad16data) testmax=ad16data;
tensiontest=tensiontest+ad16data;
adword0=0x00 ; /*12 bit control word*/
tlc2543();
if(testmin>ad16data) testmin=ad16data;
if(testmax<ad16data) testmax=ad16data;
tensiontest=tensiontest+ad16data;
adword0=0x00 ; /*12 bit control word*/
tlc2543();
if(testmin>ad16data) testmin=ad16data;
if(testmax<ad16data) testmax=ad16data;
tensiontest=tensiontest+ad16data;
adword0=0x00 ;
tlc2543();
if(testmin>ad16data) testmin=ad16data;
if(testmax<ad16data) testmax=ad16data;
tensiontest=tensiontest+ad16data;
tensiontest=tensiontest-testmin-testmax;
tensiontest=(uint)(tensiontest/3);
}
void tlc2543(void)
{ adword=adword0;
adcs=0; /*cs*/
for(j=0;j<7;j++)
{ad0bit=addo; /*do*/
ad8data=ad8data<<1;
addi=adw7bit; /*di*/
adword=adword<<1;
adck=1; /*ck high*/
adck=0; /*ck low */
}
ad0bit=addo; /*do*/
addi=adw7bit;
adck=1;
adck=0;
ad16data=(uint)ad8data;
ad16data=ad16data<<4; /*get high 8 bit*/
adword=0x00;
ad8data=0x00; /*clear 0*/
for(j=0;j<3;j++)
{ad0bit=addo; /*do*/
ad8data=ad8data<<1;
addi=adw7bit; /*di*/
adword=adword<<1;
adck=1; /*ck high*/
adck=0; /*ck low */
}
ad0bit=addo; /*do*/
addi=adw7bit;
adck=1; /*ck*/
adck=0;
adcs=1; /*cs to high*/
ad16data=ad16data|(uint)ad8data; /*get 12 bit*/
/*need delay 10 us for A/D conversion,for(delays=0;delays<2;delays++){;} delay 10us*/
}
void da(void) /*D/A CHANGE */
{da16new=da16data;
da16new=da16new<<2; /*left mov 2 bit */
da8data=(uchar)(da16new>>8);
for(i=0;i<8;i++)
{if(da7bit==0) /* dain=da7bit; */
{dispa=dispa&0xbf;
DA273=dispa;
}
else
{dispa=dispa|0x40;
DA273=dispa;
}
PSW_5=0; /*NOP*/
dispa=dispa|0x20;
DA273=dispa; /* dack=1; SET SCLK high*/
PSW_5=0; /*NOP*/
PSW_5=0; /*NOP*/
dispa=dispa&0xdf;
DA273=dispa; /* dack=0;SET SCLK LOW*/
da8data=da8data<<1;
}
da8data=(uchar)(da16new&0x00ff);
for(i=0;i<8;i++)
{if(da7bit==0) /* dain=da7bit; */
{dispa=dispa&0xbf;
DA273=dispa;
}
else
{dispa=dispa|0x40;
DA273=dispa;
}
PSW_5=0; /*NOP*/
dispa=dispa|0x20;
DA273=dispa; /* dack=1; SET SCLK high*/
PSW_5=0; /*NOP*/
PSW_5=0; /*NOP*/
dispa=dispa&0xdf;
DA273=dispa; /* dack=0; SET SCLK low*/
da8data=da8data<<1;
}
}
/*void control(void)
{if(autoset<2047) da16data=(sint)(autoset>>1);
else da16data=1023;
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -