⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 信息显示系统.c

📁 采用DS12C887做时钟
💻 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 + -