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

📄 复件 daxian.c

📁 4位数码显示程序。 静态显示
💻 C
字号:
#include <REG2051.H>
unsigned char code seg[]={
   		  63,  6, 91, 79, 102,109,125,  7,127,111 ,//;0,1,2,3,4,5,6,7,8,9
			  191,134,219, 207,230,237,253,135,255,239 ,//0.,1.,....    8.,9.
	  		  0x11,0xC1, 0x63, 0x85,  0x61,0x71,0x91,0x30,0x1F,0x1D ,//A,b, C,d,E,F,H,P.,_,=
			  0x00,	
			  0xC0,0x40
			  };
bit COMOK;
sbit NRE = 0xB2;//max485.re#
sbit WDI = 0xB5;//watchdog
sbit CE  = 0xB7;//led
sbit CLK = 0x91;//led
sbit DAT = 0x90;//led
unsigned char pointer,com[5],dom[5],addr;long int a,b;
void display(unsigned char* dis);

main()
{
 int i,j,k,x; 
 bit sw;
 unsigned char l;
 unsigned char dis[4];
 P1_7 = 1; P1_6 = 1;
 P1_5 = 1; P1_4 = 1;//回读信号须先 setb 1
 SP = 0x60; //stack head addr
 WDI  = 0;
 COMOK= 0;
 x=1;
 for(i=0;i<20000;i++)WDI  = !WDI;
 dis[3]=P1_7;dis[2]=P1_6;dis[1]=P1_5;dis[0]=P1_4;
 display(dis);
 addr=P1;
 addr=((addr&0xf0)|0x0a);
 //addr=0xaa; //old
 for(j=0;j<400;j++)
 	for(i=0;i<1000;i++)WDI  = !WDI;

 TMOD = 0x20;
 TH1  = 0xff;
 TL1  = 0xff; 
 TR1  = 1;
 SCON = 0xf0;
 PCON = 0x80;
 NRE = 0;
 ET1  = 0;
 
 ES   = 1;
 EA   = 1;
 pointer = 0;
 i=0;l=10;
 do {
	if(i<6){
		if(COMOK==0){
			TH1=0xfd;//255-i;//fd:19200    fc:9600      fe:38400, ff:76800
			TL1=0xfd;//255-i;//fb:4800     fa:2400
			}
		dis[3] = i;   dis[2] = i+1;
		dis[1] = i+2; dis[0] = i+3;
		i++;//1234567890123456 <---
		}
	else{
	    if(COMOK==0){
			TH1=0xfd;//255-l;//	   
			TL1=0xfd;//255-l;//
			if(l>15)l=0;
			else l++;
			}
		if(sw)dis[3] = 10;
 	    else dis[3]  = 0;
		dis[2] = 0;		dis[1] = 0;  dis[0] = COMOK;
		sw=!sw;
		}
 	WDI  = !WDI;
	display(dis);
	for(j=0;j<10000;j++){ k=i*j; WDI  = !WDI;}
 	}while(pointer<4);

 while(x){
 	WDI  = !WDI;
 	if(pointer>=4)
	a=com[0]+com[1]*10+com[2]*100+com[3]*1000;
       b=a;x=0; pointer=0;
       display(com);}
 while(1){
 	WDI  = !WDI;
 	if(pointer>=4){
	        	
                a=com[0]+com[1]*10+com[2]*100+com[3]*1000;
                if((b-a>-50)&(b-a<50)!=0)
                display(com);
                b=a;
			   pointer=0;
		}
}
      
}     

      

void display(unsigned char * dis)
{
 unsigned char i,j,k;
 
 CLK = 0;CE  = 0;
 for(i=0;i<4;i++){
 	k=seg[dis[i]];
 	for(j=0;j<8;j++){
		//if((seg[dis[i]]&(0x80>>j))==0) DAT = 1;
		//else DAT = 0;
		DAT = (k&0x80);
		DAT = !DAT;
		k = k<<1;
		CLK = 0;
		CLK = 1;CLK = 0;
		}
	}
 CE = 1;
 P3_4=!P3_4;
}
void receive(void) interrupt 4 using 3
{
 
 unsigned char uc;
 RI=0;
 P3_4=!P3_4;
 if(RB8==1){
	uc=SBUF;
	 if(addr==0xaa|addr==0xba){
 	    if(uc==addr){SM2=0;COMOK=1;}
	       return;
			 }
	  else
	  {
	    if(uc==0xaa|uc==0xac){SM2=0;COMOK=1;}
	       return;
	 }
	}
if(pointer<4)
  com[pointer++] = SBUF;//comtimes++%10;
  if(pointer>3)SM2=1;
}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -