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

📄 display.c

📁 该程序完成了在3566驱动下液晶显示的功能 (REG764单片机)
💻 C
字号:


#include<reg764.h>
#include<intrins.h>
#define dissda P1_7
#define disscl P1_6
unsigned char str_table[10]={0x5F,0x06,0x3D,0x2F,0x66,0x6B,0x7B,0x0E,0x7F,0x6F};

unsigned char  error;
unsigned char  turn;
unsigned char  x1_4;
//unsigned char  timer0=107;
unsigned char  cell;
unsigned char  hour;
unsigned char  min;
unsigned char  sec;
unsigned char  timer1=200;

struct store
{
   unsigned char power_gross[8];
   unsigned char year_month_date[8];
   unsigned char ammeter_number[8];    
}ddsd22j={"00700903","20060928","19830904"};

void delay5()
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}

void stop3566()
{
	disscl=1;
	delay5();
	dissda=1;
	delay5();
	disscl=0;
	delay5();
}
void start3566()
{
    disscl=1;
    delay5();
    dissda=1;
	delay5();
	dissda=0;
	delay5();
	disscl=0;
	delay5();
}

void write3566(unsigned char disdata)
{
   unsigned char i;
   unsigned char disdata0;
   for (i=0;i<8;i++)
   {    
        disdata0=disdata; 
		dissda=0;
		if((disdata0&0x80)!=0)
		dissda=1;
		delay5();
		disscl=1;
		delay5();
		disscl=0;
		delay5();
		disdata=disdata<<1;
    }
	    disscl=1;
	    delay5();
	    disscl=0;
	    delay5();
 }


void dis_inter() interrupt 3
 {
    timer1=timer1-1;
	if(timer1>=1)
	  {
       ;
	  }
	else
      {
 //      turn=turn+1;
//	   if(turn>=0x05)
//	     turn=0x00;
	   sec=sec+1;
	   timer1=200;
	  }
	TH1=0x3C;
	TL1=0xB0;
 }


void latent(unsigned char null)
{
 write3566(null);    
}

void dis_number()
{
   unsigned char num;
   if(x1_4 != 0x00)
     write3566(0x5F | 0x80);//display "0" and "OFF"
   else 
	 write3566(0x5F);//display "0"
     num=turn;
	 num=num & 0x0F;
	 if(num>=0x05)
	  write3566(0x5F);
	 else
	  write3566(str_table[num]);

}

void dis_power_gross()
{
   unsigned char k;
   unsigned char mid1;
   unsigned char comp=0;

   dis_number();
   for(k=0;k<8;k++)
   {
     if(ddsd22j.power_gross[k]==0x30 && comp==k)    
	   {
	   if((k==0 && x1_4 !=0x00)||(k==7 && cell != 0x00)) //latent the unused "0"
		   latent(0x00 | 0x80);
	   else
		   latent(0x00);
		   comp=comp+1;
	   }
     else 
	     {

           mid1=(ddsd22j.power_gross[k] & 0x0F);//latent the high 4 bits
           if((k==0 && x1_4 !=0x00) || k==5 || (k==7 && cell != 0x00))
             write3566(str_table[mid1] | 0x80);
		   else
		     write3566(str_table[mid1]);
		 }
	}    
}
void dis_year_month_date()
{ 
    unsigned char mid1;
    unsigned char k;

   dis_number(); 
   for(k=0;k<8;k++)
   {
         mid1=ddsd22j.year_month_date[k] & 0x0F;//latent the high 4 bits
		 if((k==0 && x1_4 != 0x00) || (k==7 && cell != 0x00))
	       write3566(str_table[mid1] | 0x80);
		 else if((k==3) || (k==5))
		   write3566(str_table[mid1] | 0x80);
	     else 
            write3566(str_table[mid1]);
	}    
}

void dis_time()
{
   unsigned char h;
   unsigned char mid1;
          if(sec==0x0A || sec==0x1A || sec==0x2A || sec==0x3A || sec==0x4A || sec==0x5A)
         {
           sec=sec & 0xF0;
           sec=sec+0x10;
         }
       if(sec>=0x60)
         {
           sec=0x00;
	       min=min+1;
           if(min==0x0A || min==0x1A || min==0x2A || min==0x3A || min==0x4A || min==0x5A)       
	         {
               min=min & 0xF0;
               min=min+0x10;
             }
               if(min>=0x60)
	             {
                  min=0x00;
		          hour=hour+1;
				  if(hour==0x0A || hour==0x1A)
				    {
                      hour=hour & 0xF0;
					  hour=hour+0x10;
					}
		              if(hour>=0x24)
		               hour=0x00;
		    }
	     }


   dis_number();
   if(x1_4 !=0x00)
     latent(0x00 | 0x80);
   else
	 latent(0x00);
	 latent(0x00);
     mid1=hour;
	 h=hour;
     mid1=mid1>>4;
     write3566(str_table[mid1 & 0x0F]);
	 write3566(str_table[h & 0x0F] | 0x80);
	 mid1=min;
	 h=min;
	 mid1=mid1>>4;
     write3566(str_table[mid1 & 0x0F]);
	 write3566(str_table[(h & 0x0F)]  | 0x80);
	 mid1=sec;
	 h=sec;
	 mid1=mid1>>4;
     write3566(str_table[mid1 & 0x0F]);
	 if(cell != 0x00)
	   write3566(str_table[h & 0x0F]  | 0x80 );
	 else
	   write3566(str_table[h & 0x0F]);
     
}
void dis_ammeter_number()
{
   unsigned char k;
   unsigned char mid1;

   dis_number();
   for(k=0;k<8;k++)
   {
       mid1=(ddsd22j.ammeter_number[k] & 0x0F);//latent the high 4 bits
	   if((k==0 && x1_4 !=0x00) ||(k==7 && cell !=0x00))
	    write3566(str_table[mid1] | 0x80);
	   else
	    write3566(str_table[mid1]);
   }

}

void dis_error()
{
  unsigned char k;
  unsigned char mid1;
  unsigned char err1=error;
  unsigned char err2=error;
  err1=err1>>4;
  err1=err1 & 0x0F;
  err2=err2 & 0x0F;
  mid1=turn;
  if(x1_4 != 0x00)
     write3566(0x5F | 0x80);//display the first NO. and "OFF"
  else
     write3566(0x5F);
     mid1=mid1 & 0x0F;
     write3566(str_table[mid1] | 0x80);//display the second and NO.
    for(k=0;k<8;k++)
	{
      if((k==0 && x1_4 !=0x00)||(k==2))
	    latent(0x00 | 0x80);
	  else if(k==6)
        write3566(str_table[err1]);
	  else if(k==7 && cell!=0x00)
	    write3566(str_table[err2] | 0x80);
	  else if(k==7 && cell==0x00)
	    write3566(str_table[err2]);	     
	  else
	    latent(0x00);
    } 


}

void display()
{ 

	   start3566();    //condition of start
	   
	   write3566(0x7C);// address of controller: 01111100
	   write3566(0xC8);//1:4 duo ji,1/3 pian zhi 11001000
	   write3566(0x80);//display from s0         10000000
	   write3566(0xE0);//A2/A1/A0:000            11100000
	   write3566(0x70);//colse lcd-fre.          01110000

  	   switch(turn)
	   {
	      case 00: dis_power_gross();break;
		  case 01: dis_year_month_date();break;
		  case 02: dis_time();break;
		  case 03: dis_ammeter_number();break;
		  case 04: dis_error();break;
          default : dis_power_gross();break;
	   }
    	
	   stop3566();     //condition of stop
}


void main()
{
    TMOD=0x01;
	TH1=0x3c;
	TL1=0x7b0;
	IEN0=0x88;
	TCON=0x40;
	timer1=200;
    turn=0x02;
	error=0x00;
	x1_4=0x01;
	cell=0x01;
	hour=0x23;
	min =0x59;
	sec =0x50;
	while(1)
   	 display();    
}

⌨️ 快捷键说明

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