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

📄 hanzi2.c

📁 c8051f020单片机控制三星高亮192*128型汉字屏动画汉字显示
💻 C
📖 第 1 页 / 共 2 页
字号:

   for (i=0; i < 2560; i++) ;           // XTLVLD blanking interval (>1ms)

   //while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle

   OSCICN = 0x88;                      // select external oscillator as SYSCLK
                                       // source and enable missing clock
                                       // detector
}

//------------------------------------------------------------------------------------
// Timer3_Init
//------------------------------------------------------------------------------------
//
// Configure Timer3 to auto-reload and generate an interrupt at interval
// specified by <counts> using SYSCLK/12 as its time base.
//
void Timer3_Init (int counts)
{
   TMR3CN = 0x00;                      // Stop Timer3; Clear TF3;
                                       // use SYSCLK/12 as timebase
   TMR3RL  = -counts;                  // Init reload values
   TMR3    = 0xffff;                   // set to reload immediately
   EIE2   |= 0x01;                     // enable Timer3 interrupts
   TMR3CN |= 0x04;                     // start Timer3
}

void Timer3_ISR (void) interrupt 14
{
   TMR3CN &= ~(0x80);                     // clear TF3
   msnum++;
   if(msnum==200)
   {
   msnum=0;
   sec++;
   }
   if(sec>=60)
   min++;

   
}

//------------------------------------------------------------------------------------------
//以下为液晶显示初始化控制
//---------------------------------------------------------------------------------------
void lcd_init(void)                       // initialize lcd
     {
     int i;
      DSPE=0; 


     WP0=0;
     WP1=0; //选择显示第0页
      DP0=0;
     DP1=0; //选择显示第0页
     READY_=0;
    CLEAR_=1;
    for (i=0; i <1; i++) ; 
   CLEAR_=0; //置清空RAM模式
   for (i=0; i <10; i++) ;  
    CLEAR_=1;
   do {}
    while(READY_==1); //等待清空响应



     WP0=1;
     WP1=0; //选择显示第0页
      DP0=1;
     DP1=0; //选择显示第0页
     READY_=0;
    CLEAR_=1;
    for (i=0; i <1; i++) ; 
   CLEAR_=0; //置清空RAM模式
   for (i=0; i <10; i++) ;  
    CLEAR_=1;
   do {}
    while(READY_==1); //等待清空响应

    WP0=0;
     WP1=1; //选择显示第0页
      DP0=0;
     DP1=1; //选择显示第0页
     READY_=0;
    CLEAR_=1;
    for (i=0; i <1; i++) ; 
   CLEAR_=0; //置清空RAM模式
   for (i=0; i <10; i++) ;  
    CLEAR_=1;
   do {}
    while(READY_==1); //等待清空响应


    WP0=1;
     WP1=1; //选择显示第0页
      DP0=1;
     DP1=1; //选择显示第0页
     READY_=0;
    CLEAR_=1;
    for (i=0; i <1; i++) ; 
   CLEAR_=0; //置清空RAM模式
   for (i=0; i <10; i++) ;  
    CLEAR_=1;
   do {}
    while(READY_==1); //等待清空响应





 
     }
//---------------------------------------------------------------------------------//---------------------------------------------------------------------------------------

//---------------------------------------------------------------------------------
void display(void)                       // 动画显示
     {
     int i,j,time;  
   

      


     
     BRAD_=1; //置写数据模式
     DSPE=1; //置显示允许
     WP0=0; //选择写第0页
     WP1=0; //选择写第0页
     CLEAR_=0;
        for(j=0;j<26;j++)
        {
     
         time=sec; 
         while(sec<=time+1);
         
         clearlcd();
         for(i=0;i<5;i++)
        {
      
        
       disword(16,8,-96+24+i*16+8*j,tab,i*32);
       }
       for(i=0;i<6;i++)
        {
       disword(16,6,-96+16+i*16+8*j,tab,i*32+32*5);
       } 
        


        
        if(j<=16)
        {
        disword(16,3,96-8*j,tab2,0);
        disword(16,3,112-8*j,tab2,32);
        }
        

        
        if(j>=6)
        {
        disword(16,3,96-8*(j-6),tab2,32*2);
        disword(16,3,112-8*(j-6),tab2,32*3);
        }
        

        if(j>=12)
        {
        disword(16,3,96-8*(j-12),tab2,32*4);
        disword(16,3,112-8*(j-12),tab2,32*5);
        }
        if(j>=18)
        {
        disword(16,3,96-8*(j-18),tab2,32*6);
        disword(16,3,112-8*(j-18),tab2,32*7);
        }
   
          }


          
     
      // for(i=0;i<10;i++)
       // {
      // disword(7,2,i*7,tab3,i*14);
      // }
      
       
      //  for(i=0;i<6;i++)
       // {
      // disword(9,4,i*9,tab4,i*18);
      // }

      //disword(9,3,122,tab4,9*2*5);
   
       DP0=0;
       DP1=0; //选择显示第0页
	  }
//---------------------------------------------------------------- 
 void display1(void)                       // initialize lcd
     {
     int i;  
   

      


     
     BRAD_=1; //置写数据模式
     DSPE=1; //置显示允许
     WP0=0; //选择写第0页
     WP1=0; //选择写第0页
     CLEAR_=0; 
       
      

       for(i=0;i<5;i++)
       {
       disword(16,8,24+i*16,tab,i*32);
         }
       for(i=0;i<6;i++)
       {
      disword(16,6,16+i*16,tab,i*32+32*5);
          }
      
       

       


          for(i=0;i<8;i++)
        {
       disword(16,3,i*16,tab2,i*32);
       } 

     
      // for(i=0;i<10;i++)
       // {
      // disword(7,2,i*7,tab3,i*14);
      // }
      
       
      //  for(i=0;i<6;i++)
       // {
      // disword(9,4,i*9,tab4,i*18);
      // }

      //disword(9,3,122,tab4,9*2*5);
   
       DP0=0;
       DP1=0; //选择显示第0页
	  }
 
//----------------------------------------------------------
////写数据函数
void writedata(uchar wdata,uchar a0_7,uchar a2_0)     //write 写指令,注意时序
	{
    int i;
    while(READY_);
     //delay(2500);
     WRITE_=1;
     dataport=wdata;
     highadress=a0_7;
     ADR2=a2_0&0x04;
     ADR1=a2_0&0x02;
     ADR0=a2_0&0x01;
     WRITE_=0;
      for (i=0; i <1; i++) ; 
     WRITE_=1;
     }
     

//----------------------------------------------------------
//--------------------------------------------------------- 
//----分辨率/wideth×16的字符(wideth*16)------------------
//wideth为字符宽度(0-128),highth为显示所处高度(1-8),每字符占两行,
//adress为起始地址0x00-0xff),纵向取膜,字节倒序
//displace为所显示字符在表中的偏移量,ttab[]为所在的表
//---------------------------------------------------------
 void disword(int wideth,int highth,uchar adress,char ttab[],int displace)        //wideth×highth的图形
    {
     int i;
     p=ttab;
    

      for(i=0;i<wideth;i++)
      {
      writedata(*(p+i+displace),adress+i,highth-1) ;
      }
      for(i=0;i<wideth;i++)
      {
      writedata(*(p+i+displace+wideth),adress+i,highth-2) ;
      }
 }
   


 //----------------------------------------------------------

//-----------------------------------------------------
void clearlcd(void)
{  int i;
        WP0=0;
     WP1=0; //选择显示第0页
      DP0=0;
     DP1=0; //选择显示第0页
     READY_=0;
    CLEAR_=1;
    for (i=0; i <1; i++) ; 
   CLEAR_=0; //置清空RAM模式
   for (i=0; i <10; i++) ;  
    CLEAR_=1;
   do {}
    while(READY_==1); //等待清空响应  
    } 	
//----------------------------------------------------------

//-----------------------------------------------------
void delay(int dtime)
{while(dtime--);
}

⌨️ 快捷键说明

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