📄 信息显示系统.c
字号:
#include <AT89X52.H>// #include <REGx52.H>
//#include <INTRINS.h>
unsigned char code Tab[]={0xff,0Xfd,0xff,0xfe,0xff,0xf7,0xff,0xfb,0xff,0xdf,0xff,0xef,0xff,0x7f,0xff,0xbf,
0Xfd,0xff,0xfe,0xff,0xf7,0xff,0xfb,0xff,0xdf,0xff,0xef,0xff,0x7f,0xff,0xbf,0xff};
unsigned char idata display_buff[144]={0};
extern bit resetpulse(void);
extern void writecommandtods18b20(unsigned char command);
extern unsigned char readdatafromds18b20(void);
extern unsigned char displaybuf[8];
extern unsigned char readdata[8];
extern unsigned char time_out[20];
extern unsigned char code codedisplay[];
extern unsigned char second;
extern bit sign3;
extern bit second_sign;
unsigned char n,sign2=0,yy,xx,k,kkk=0,xingqi_l,xingqi_h;
signed char m;
unsigned long a;
unsigned int count=0,count_move=0;
bit sign1=0,sign4=0;
void delay(void)
{ unsigned char i,j;
for(i=0;i<15;i++){ for(j=0;j<50;j++) ; }
}
void main(void)
{ SCON=0; P1=0;IT0=0;EX0=1;EA=1;
for(a=0;a<145;a++) //初始化显示单元全灭代码
{display_buff[a]=0xff;}
while(1)
{ if(sign1==1)
{ sign1=0;
for(n=0;n<16;n++)
{ display_buff[128+n]<<=1;
yy=CY;display_buff[112+n]<<=1;xx=CY;display_buff[112+n]|=yy;
yy=xx;display_buff[96+n]<<=1;xx=CY;display_buff[96+n]|=yy;
yy=xx;display_buff[80+n]<<=1;xx=CY;display_buff[80+n]|=yy;
yy=xx;display_buff[64+n]<<=1;xx=CY;display_buff[64+n]|=yy;
yy=xx;display_buff[48+n]<<=1;xx=CY;display_buff[48+n]|=yy;
yy=xx;display_buff[32+n]<<=1;xx=CY;display_buff[32+n]|=yy;
yy=xx;display_buff[16+n]<<=1;xx=CY;display_buff[16+n]|=yy;
yy=xx;display_buff[n]<<=1; xx=CY;display_buff[n]|=yy;}
sign2++;
if(sign2==8)
{ sign2=0;
for(n=0;n<16;n++)
{ switch(k)
{ case 0:display_buff[128+n]=codedisplay[528+n];break;
case 1:display_buff[128+n]=codedisplay[496+n];break;
case 2:display_buff[128+n]=codedisplay[496+time_out[0]*16+n];break;
case 3:display_buff[128+n]=codedisplay[496+time_out[1]*16+n];break;
case 4:display_buff[128+n]=codedisplay[n];break;
case 5:display_buff[128+n]=codedisplay[16+n];break;
case 6:display_buff[128+n]=codedisplay[496+time_out[2]*16+n];break;
case 7:display_buff[128+n]=codedisplay[496+time_out[3]*16+n];break;
case 8:display_buff[128+n]=codedisplay[32+n];break;
case 9:display_buff[128+n]=codedisplay[48+n];break;
case 10:display_buff[128+n]=codedisplay[496+time_out[4]*16+n];break;
case 11:display_buff[128+n]=codedisplay[496+time_out[5]*16+n];break;
case 12:display_buff[128+n]=codedisplay[64+n];break;
case 13:display_buff[128+n]=codedisplay[80+n];break;
case 14:display_buff[128+n]=codedisplay[480+n];break;
case 15:display_buff[128+n]=codedisplay[96+n];break;
case 16:display_buff[128+n]=codedisplay[112+n];break;
case 17:display_buff[128+n]=codedisplay[128+n];break;
case 18:display_buff[128+n]=codedisplay[144+n];break;
case 19:display_buff[128+n]=codedisplay[128+time_out[7]*32+n];
if(time_out[7]==7){display_buff[128+n]=codedisplay[64+n];} break;
case 20: display_buff[128+n]=codedisplay[144+time_out[7]*32+n];
if(time_out[7]==7){display_buff[128+n]=codedisplay[80+n];} break;
case 21:display_buff[128+n]=codedisplay[480+n];break;
case 22:display_buff[128+n]=codedisplay[352+n];kkk=1;break;
case 23:display_buff[128+n]=codedisplay[368+n];break;
case 24:display_buff[128+n]=codedisplay[384+n];break;
case 25:display_buff[128+n]=codedisplay[400+n];break;
case 26:display_buff[128+n]=codedisplay[416+n];break;
case 27:display_buff[128+n]=codedisplay[432+n];break;
case 28:display_buff[128+n]=codedisplay[448+n];kkk=2;break;
case 29:display_buff[128+n]=codedisplay[464+n];kkk=3;break;
case 30:display_buff[128+n]=codedisplay[496+displaybuf[0]*16+n];break;
case 31:display_buff[128+n]=codedisplay[496+displaybuf[1]*16+n];break;
case 32:display_buff[128+n]=codedisplay[688+n];break;
case 33:display_buff[128+n]=codedisplay[496+displaybuf[2]*16+n];break;
case 34:display_buff[128+n]=codedisplay[496+displaybuf[3]*16+n];break;
case 35:display_buff[128+n]=codedisplay[656+n];break;
case 36:display_buff[128+n]=codedisplay[672+n];break;
case 37:display_buff[128+n]=codedisplay[480+n];break;
default:display_buff[128+n]=codedisplay[112+16*k+n];break;
}
}
k++;
if(k==63){ k=0;sign3=0;second=0;for(a=0;a<144;a++) //初始化显示单元全灭代码
{display_buff[a]=0xff;}
}
}
}
for(m=15;m>-1;m--)
{ if(sign3==1)
{
SBUF=display_buff[m]; while(!TI) ; TI=0;
SBUF=display_buff[m+16]; while(!TI) ; TI=0;
SBUF=display_buff[32+m]; while(!TI) ; TI=0;
SBUF=display_buff[32+m+16]; while(!TI) ; TI=0;
SBUF=display_buff[64+m]; while(!TI) ; TI=0;
SBUF=display_buff[64+m+16]; while(!TI) ; TI=0;
SBUF=display_buff[96+m]; while(!TI) ; TI=0;
SBUF=display_buff[96+m+16]; while(!TI) ; TI=0;
SBUF=Tab[2*m]; while(!TI) ; TI=0;
SBUF=Tab[2*m+1];while(!TI) ; TI=0;
count_move++;if(count_move==15) {count_move=0;sign1=1;} //移位速度
}
else
{ SBUF=codedisplay[time_out[10]*16+496+m]; while(!TI) ; TI=0;
SBUF=codedisplay[time_out[11]*16+496+m]; while(!TI) ; TI=0;
SBUF=codedisplay[704+m]; while(!TI) ; TI=0;
SBUF=codedisplay[time_out[14]*16+496+m]; while(!TI) ; TI=0;
SBUF=codedisplay[time_out[15]*16+496+m]; while(!TI) ; TI=0;
SBUF=codedisplay[704+m]; while(!TI) ; TI=0;
SBUF=codedisplay[time_out[18]*16+496+m]; while(!TI) ; TI=0;
SBUF=codedisplay[time_out[19]*16+496+m]; while(!TI) ; TI=0;
SBUF=Tab[2*m]; while(!TI) ; TI=0;
SBUF=Tab[2*m+1];while(!TI) ; TI=0;
}
if(sign3==0) { if(second_sign==0) { P1_5=1;P1_2=1;} }
else { P1=0;}
P3_4=0;P3_4=1; P3_4=0;
if(second_sign==1){count++;}
if(count==333){second_sign=0;}
switch(kkk)
{ case 2: EA=0;kkk=0;
while(resetpulse()); //写前调用初始化程序对DS18B20复位
writecommandtods18b20(0xcc); //单片DS18B20工作,跳过读ROM中64位地址的过程
writecommandtods18b20(0xbe); EA=1;break; // 读DS18B20RAM中温度数据
case 3: EA=0;kkk=0;
readdata[0]=readdatafromds18b20(); //温度数据低8位赋值
readdata[1]=readdatafromds18b20();
readdata[1]=readdata[1]&0x07; //将代表符号的高5位数屏蔽
EA=1;
a=(readdata[1]*256+readdata[0]); //计算实际温度值
a=a*625;
displaybuf[0]=a/100000; //给各显示位赋温度值
displaybuf[1]=a%100000/10000;
displaybuf[2]=a%10000/1000;
displaybuf[3]=a%1000/100;
break;
case 1: EA=0; kkk=0;
while(resetpulse());
writecommandtods18b20(0xcc);
writecommandtods18b20(0x44); EA=1;
break;
default : delay();
}
}}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -