📄 s52.c
字号:
#include<reg51.h>
#include<intrins.h>
#include<dis18b20.c>
#include<AT24C01A.c>
#include<lcd.c>
#define ulint unsigned long int
#define uchar unsigned char
#define uint unsigned int
void DisplayTemper();
void Temp();
void circle();
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
uchar flag;
uchar v ;
ulint tt;
//sbit spk=P0^0;
uchar rev1,rev2,rev3,rev4,revx;
sbit WP= P1^3; /*硬件写保护*/
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
void delayy(uchar count)
{
uchar i;
for(i=0;i<count;i++);
}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
int key ()
{
int z;
uchar d;
d=P1;
flag=0;
z=0;
P1=0xff;
k1= 0;k2=1;
if (k3==0) z=1;
if (k4==0) z=2;
if (k5==0) z=3;
k2=0;k1=1;
if (k3==0) z=4;
if (k4==0) z=5;
if (k5==0) z=6;
P1=d;
return (z);
}
//????????????????????????????????????????????????????????????????????
unsigned char code led[]={0xC0,0xF9,0xA2,0xB0,0x99, /* 0 1 2 3 4 */
0x94,0x84,0xF8,0x80,0x90, /* 5 6 7 8 9 */
0x88,0x85,0xC6,0xA1,0x86,0x8E,0xff}; /* A B C D E F*/
unsigned char code led1[]={0x40,0x79,0x22,0x30,0x19, /* 0 1 2 3 4 */
0x14,0x04,0x78,0x00,0x10, /* 5 6 7 8 9 */
0x08,0x05,0x46,0x21,0x06,0x0E,0xff}; /* A B C D E F*/
unsigned char code cir2[]={0xfe,0xfe,0xfe,0xfe,0xdf,0xef,0xf7,0xf7,0xf7,0xf7,0xfd,0xfb};
unsigned char code cir3[]={0X7f,0Xbf,0Xdf,0Xef,0Xef,0Xef,0Xef,0Xdf,0Xbf,0X7f,0X7f,0X7f};
//??????????????????????????????????????????????????????????????
void delay(uchar t)
{ uint i,j;
for(i=t;i>0;i--) {for(j=200;j>0;j--); v=key(); if (v!=0) { P2=led[v]; P3=0x0f;} }
}
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
void display(uchar a,uchar b,uchar c,uchar d)
{
if ( a==0) {P2=0xff; P3=0Xef;}else { P2=led[a] ; P3=0Xef;}
delay(2);
if (b==0) { if (a==0) { P2=0xff;P3=0Xdf;} else { P2=led[b] ; P3=0Xdf;}}else { P2=led[b] ;P3=0Xdf;}
delay(2);
if (c==0) { if (b==0) { if (a==0) {P2=0xff; P3=0Xbf;delay(2);}else { P2=led[c] ; P3=0Xbf;delay(2);} }
else { P2=led[c] ; P3=0Xbf;delay(2);} }
else { P2=led[c] ; P3=0Xbf;delay(2);}
P2=led[d] ;P3=0X7f; delay(2);
}
//$$$$$$$$$$$$$$$displat$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
void displat(uchar a,uchar b,uchar c,uchar d)
{
if ( a==0) {P2=0xff; P3=0Xef;}else { P2=led[a];P3=0Xef;}
delay(2);
if (b==0) { if (a==0) { P2=0xff;P3=0Xdf;} else { P2=led[b];P3=0Xdf;}}else { P2=led[b];P3=0Xdf;}
delay(2);
if (c==0) { if (b==0) { if (a==0) {P2=0xff; P3=0Xbf;delay(2);}else { P2=led1[c]; P3=0Xbf;delay(2);} }
else { P2=led1[c] ; P3=0Xbf;delay(2);} }
else { P2=led1[c];P3=0Xbf;delay(2);}
P2=led[d];P3=0X7f;delay(2);
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
void displar(uchar a,uchar b,uchar c,uchar d)
{
P2=led[a] ; P3=0Xef;
delay(2);
P2=led[b] ; P3=0Xdf;
delay(2);
P2=led[c] ; P3=0Xbf;
delay(2);
P2=led[d] ; P3=0X7f;
delay(2);
}
//================main==============
int main()
{
uchar Number[4]={8,8,8,8};
uchar i,o,w,m ;
char a,b,c,d;
uint h,h1;
int P;
h=0;h1=0;
SCON=0xd0;PCON=0x80;TMOD=0x21;TL1=0xfc;TH1=0xfc;
EA=0;TR1=1;
P=0;P1=0xff;
rev1=0x00;
rev2=0x00;
rev3=0x00;
rev4=0x00;
revx=0x00;
for(i=0;i<5;i++) { P2=0x00;P3=0x00;delay(200);P2=0x00;P3=0xff;delay(200);}
init_1602();clear_1602();dis_1602str(" AVR-S51");
send_cmd(second);dis_1602str("Welcome to 615");
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Y:
if (revx == 0x05)
{EA=0;
w=rev1;m=rev2; w=w>>4; a=w;w=rev1&0x0f;b=w;w=rev2; w=w>>4; c=w; w=m&0x0f; d=w;
for (i=50;i>0;i--) displar(a,b,c,d);
P2=0xff;P3=0xff;
delay(500);
w=rev3;m=rev4; w=w>>4; a=w;w=rev3&0x0f;b=w;w=rev4; w=w>>4; c=w; w=m&0x0f; d=w;
for (i=50;i>0;i--) displar(a,b,c,d);
init_1602();clear_1602();dis_1602str(" Receiver:");
send_cmd(second);dis_hex(rev1);dis_1602str(" "); dis_hex(rev2);dis_1602str(" ");dis_hex(rev3);dis_1602str(" "); dis_hex(rev4);
rev1=0x00;rev2=0x00;rev3=0x00;rev4=0x00;revx=0;ES=1;EA=1;
}
if (P==20) P=0 ;else P++;
delay(1);
//22222222222222222222222222222222222222222222222222222222222222222
switch (h)
{case 0 : {if (h1==0) { if (P1==0x00) {w=0Xff;h1=1;}else P1=P1<<1; }
else { if (P1==0xff) {P1=0xff; h=1;h1=0; } else { w=w<<1; m=~w; P1=P1|m; } }
} break;
case 1 : {if (h1==0) {if (P1==0x00) {w=0Xff;h1=1; } else P1=P1>>1; }
else { if (P1==0xff) {P1=0xff; h=0;h1=0;a=0x00;b=0x06;c=0x01;d=0x05;for (i=0;i<20;i++) display(a,b,c,d);}
else { w=w>>1; m=~w; P1=P1|m; } }
}break;
default : delay(10);
}
delay(20);
//333333333333333333333333333333333333333333333333333333333333333333333
o=P1;
if (P==0)
{
EA=0;
P3=0xff;
Temp();
a=tt/1000;b=(tt-a*1000)/100;c=(tt-a*1000-b*100)/10;d=tt%10;
if (flag==0x01) a=0xbf;else a=tt/1000;
SBUF= a;delay(1);while(TI == 0){;} TI = 0;
SBUF= b;delay(1);while(TI == 0){;} TI = 0;
SBUF= c;delay(1);while(TI == 0){;} TI = 0;
SBUF= d;delay(1);while(TI == 0){;} TI = 0;
}
//44444444444444444444444444444444444444444444444444444444444444444444
delayy(1);
v=key();
if (v!=0)
{
while(key());
switch (v)
{case 6: {DisplayTemper();} break;
case 5 : {for(i=0;i<10;i++) { P2=0x00;P3=0x00;delay(200);P2=0x00;P3=0xff;delay(200);}} break;
case 4 : {for(i=20;i>0;i--){circle();} } break;
case 3 : {k3=0 ; WP=0; delayy(30);
Temp();
a=tt/1000;b=(tt-a*1000)/100;c=(tt-a*1000-b*100)/10;d=tt%10;
if (flag==0x01) a=0xbf;
else a=tt/1000;
Number[0]=a;Number[1]=b;Number[2]=c;Number[3]=d;
WrToROM(Number,4,4); /*将初始化后的数值写入EEPROM*/
for(i=20;i>0;i--) displat(a,b,c,d);
} break;
case 2 : { k3=0 ; WP=1; delayy(30);
RdFromROM(Number,4,4);
a=Number[0];b=Number[1];c=Number[2];d=Number[3];
for(i=20;i>0;i--) displat(a,b,c,d);
init_1602();clear_1602();dis_1602str(" AVR-S51");
send_cmd(second);dis_1602str(" glzff@126.com");
} break;
case 1 : {
k3=0 ;WP=1; delayy(30);
RdFromROM(Number,4,4);
a=Number[0];b=Number[1];c=Number[2];d=Number[3];
init_1602();clear_1602();dis_1602str("read AT24C01A");;
send_cmd(second);dis_1602str(" ");
if (a!=0)
dis_1602num(a);
if ((a!=0)||(b!=0)) dis_1602num(b);
dis_1602num(c);dis_1602str(".");dis_1602num(d);dis_1602str(" C");
delay(500);
init_1602();clear_1602();dis_1602str(" AVR-S51");
send_cmd(second);dis_1602str("Welcome to 615");
delay(1); } break;
default : {_nop_ ();};
}
}
P3=0xff;
v=0;
ES=1;
EA=1;
//??????????????????????????????????????????????????
//Y1:
P1=o;
goto Y ;
}
//00000000000000000000000000000000000000000000000000000000000
void DisplayTemper() //读取并显示温度
{
uchar i;
uchar a,b,c,d;
Temp();
a=tt/1000;b=(tt-a*1000)/100;c=(tt-a*1000-b*100)/10;d=tt%10;
if (flag==0x01) a=0xbf;
else a=tt/1000;
for(i=100;i>0;i--) displat(a,b,c,d);
}
//0000000000000000000000000000000000000000000000000000000000000
void circle()
{uchar i;
for (i=0;i<12;i++)
{P2=cir2[i];P3=cir3[i];delay(20);}
}
//11111111111111111111111111111111111111111111111111111111111
void rev() interrupt 4 using 1
{
ES=0;
while(RI==0);
switch (revx)
{
case 0 : {rev1=SBUF;revx=1;}break;
case 1 : {rev2=SBUF;revx=2;}break;
case 2 : {rev3=SBUF;revx=3;}break;
case 3 : {rev4=SBUF;revx=5;}break;
default : revx=0;
}
RI=0;
ES=1;
}
//222222222222222222222222222222222222222222222222222222222222222
void Temp()
{
tt=ReadTemperature();
if (tt>16384)
{ tt=~tt+1;tt=tt*0.625;flag=0x01;} //负温度处理
else
{tt=tt*0.625;flag=0x00;} //正温度 //得到真实十进制温度值,因为DS18B20
//可以精确到0.0625度,所以读回数据的最低位代表的是
//0.0625度,因为定义为INT型,乘0.625可精确到0.1度。
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -