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

📄 main.c~

📁 该设备是一款基于AVR mega16L单片机的电子书阅读器
💻 C~
📖 第 1 页 / 共 2 页
字号:
                       lcd_set_xy(7,menuY);    
                    }                    
                    }               
            break;
            }       
            default:
               // Either no buttons are pressed or mulitple buttons are pressed. 
               break;
         }// end case      
      }//end ( if buttons are presed )       
       check_key ();
       //判断是否连接电脑,下载程序
       check_download();     
} //end while( 1 ) 

}

void ShowMenu(void)
{
   unsigned char n; 
    
  if ( userchoose%ShowCount==0)
     {
      displaystart = userchoose;
     }
    else if ((userchoose+1)%ShowCount==0)
            displaystart = userchoose-2;
         else if ((userchoose-1)%ShowCount==0)
                  displaystart = userchoose-1;
    lcd_clear();
    displaypoint=displaystart;
  for ( n=0;displaypoint<16 && n< ShowCount; n++)
  {
    lcd_set_xy(1,n+1);
    lcd_write_string(&menuBuffer[displaypoint][0]);
    if (displaypoint==userchoose)
       { 
         menuY=(int)n+1;
         lcd_set_xy(0,n+1);
         lcd_write_stringf("->");
       }
    displaypoint++;
  } 
  lcd_set_xy(3,0);
  lcd_write_stringf("目录");                
}

void check_download(void)
{ 
   unsigned char i;
   unsigned char temp;
   while(start_flag)
    { 
      if(address_get)
    { 
      for (i=0;i<4;i++)
      {     
        if(Buffer[i]=='*')
        {
        temp=Buffer[i];
        i++;
         if(temp!=Buffer[i])
         {
           switch(Buffer[i])
           {
            case 'A': 
            currentMemoryPage=0x0002;            
            break;
            case 'B': 
            currentMemoryPage=0x0041;
            break;
            case 'C': 
            currentMemoryPage=0x0081;
            break;
            case 'D': 
            currentMemoryPage=0x00C1;
            break;
            case 'E': 
            currentMemoryPage=0x00FF;
            break;
            case 'F': 
            currentMemoryPage=0x013E;
            break;
            case 'G': 
            currentMemoryPage=0x017D;
            break;
            case 'H': 
            currentMemoryPage=0x01BC;
            break;
            case 'I': 
            currentMemoryPage=0x01FB;
            break;
            case 'J': 
            currentMemoryPage=0x023A;
            break;
            case 'K': 
            currentMemoryPage=0x0279;
            break;
            case 'L': 
            currentMemoryPage=0x02B8;
            break;
            case 'M': 
            currentMemoryPage=0x02F7;
            break;
            case 'N': 
            currentMemoryPage=0x0336;
            break;
            case 'O': 
            currentMemoryPage=0x0375;
            break;
            case 'P': 
            currentMemoryPage=0x03B4;
            break;
            default:
            start_flag=0;
            break;
            }          
           }           
          }
         }
         if(start_flag)
           {
           address_get=0;
            for(i=0;i<buffersize;i++)
            Buffer[i]=' ';
            lcd_clear();
            lcd_set_xy(0,1);
            lcd_write_stringf("文档下载中.....");      
           USART_Transmit('#');
           USART_Transmit('#');
           }
         }                
          if(buffer_overflow)
         { 
          //关USART中断
          UCSRB=0x00;
          //判断BUFFER内容***号吗,若是就停止接受。         
            if (Buffer[2]=='*') //一个奇怪的符号  
            {
             lcd_clear(); 
             lcd_set_xy(0,1);
             lcd_write_stringf("文档下载完毕!"); 
             for(i=0;i<buffersize;i++)
             Buffer[i]=' ';                    
             delay_ms(1000);
             delay_ms(1000);
             start_flag=0; 
             address_get=1;  //此标志位很重要 确定下载地址
             ShowMenu();
             UCSRB=0x98;            
             }
         if( start_flag)
          {                    
         WriteBufferToMemory( Buffer, BUFFER_SIZE,currentMemoryPage); 
         buffer_overflow=0;
         currentMemoryPage++;
         for(i=0;i<buffersize;i++)
          Buffer[i]=' '; 
          UCSRB=0x98;
          delay_us(10);                                 
          USART_Transmit('#');
         USART_Transmit('#'); 
           } 
         }                 
    } 
    start_flag=0; 
}
/******************************************************************************
 * Initialize()
 *
 * Initializes the AVR microcontroller by setting up port I/O, etc.
******************************************************************************/

void Initialize( void )
{
   unsigned char	i	= 0;
   menuX=7;
   menuY=0;
   textY=3;
   textX=7;   
    PORTD = 0x03;       // TXD(PD1)输出
    DDRD = 0x02;        // RXD(PD0)输入,上拉有效  
    /* InitializeButtons */   
    DDRB&=0xF0;
    PORTB=(0xF0&PINB);     
    UCSRA = 0x00;       // USART初始化       
    UCSRB = 0x98; // 允许RXC中断,接收允许,发送允许
    UCSRC = 0x86; // 8 Data, 1 Stop, No Parity
    UBRRH = BAUD_H;     // 设置波特率
    UBRRL = BAUD_L;
    lcd_init();
    InitializeKeyboard();    
    Initi_Flash(); 
    lcd_clear(); 
	mode = MENU;
	endOfmenuBuffer=15;
	currentMemoryPage = 0;
        endOfBuffer = 63;
	userchoose=0;
	displaypoint=0;
	displaystart=0;
	for( i = 0; i < BUFFER_SIZE; i++ )
	{
	Buffer[i] = ' ';
	}
     lcd_clear(); 
    #asm("sei")         // 开中断   
  //  menuBufferTOBuffer(); 
  //  WriteBufferToMemory( Buffer, BUFFER_SIZE,0 ); 
  // ReadMemoryToBuffer( Buffer, BUFFER_SIZE,0 );
   //BufferTOmenuBuffer();  
    ShowMenu(); 
	return;
}

/******************************************************************************
 * interrupt [EXT_INT0] void ext_into_isr (void)
 * Interrupt subroutine triggered by INT0, which is an external interrupt.
 * The keyboard clock pin is attached to INT0, so whenever the keyboard has
 * data to send this interrupt is triggered.
******************************************************************************/
void check_key(void)
{  
  if(EDIT==1)
   {     
   if( key != 0 )    
   {        
      // A valid scancode was found 
      //lcd_set_xy(0,0);
     // lcd_write_data( key );
      if( key == 8 )
      {
         // backspace 
         if (mode==MENU)
       {
         endOfmenuBuffer--;
         if( endOfmenuBuffer <=2 )
         {
            endOfmenuBuffer = 2;
         }
         menuBuffer[userchoose][endOfmenuBuffer] = ' ';
          if (++negative_counter>1)
             { negative_counter=0;
             menuX--;}             
         if( menuX <= 2 )
         {
            menuX = 2;
         }
        }
        else {//mode=TEXT
           endOfBuffer--;
         if( endOfBuffer < 0 )
         {
            endOfBuffer = 0;
         }
         *(screenBuffer+endOfBuffer) = ' ';
          if (++negative_counter>1)
             { negative_counter=0 ;
             textX--;
             }             
         if( textX < 0 )
         {
            textX = 7;
            textY--;            
            if(textY<0)
            {
              textX = 0;
              textY=0; 
             }           
         }
         SetLCDCursor(textX,textY);
       }
      }
      else
      {     
            if (mode==MENU)
            {
            menuBuffer[userchoose][endOfmenuBuffer]=key;
            endOfmenuBuffer++;
            if( endOfmenuBuffer >=13)
              {
               endOfmenuBuffer = 13;
              }
              if (negative_counter++>1)
              { negative_counter=0;
                menuX++;
               }             
              if( menuX >7 )
                {
                 menuX = 7;
                
                }  
            }
            else// mode == TEXT )
            { 
             *(screenBuffer+endOfBuffer) = key;              
            endOfBuffer++;
            if( endOfBuffer >= 63 )
              {
               endOfBuffer = 63;
              }
                if (++negative_counter>1)
                  { negative_counter=0 ;
                    textX++;
                  }             
                if( textX >7 )
                   {
                    textX = 0;
                    textY++;            
                     if(textY>3)
                        {
                         textX = 7;
                         textY=3; 
                        }           
                    }             
            }            
      } 
       if (mode==TEXT)
     {
     lcd_write_full( screenBuffer );     
    SetLCDCursor( textX, textY );
     }
     else 
     {
     ShowMenu();     
     SetLCDCursor( menuX, menuY );
     }          
   }    
}
key=0; 
}

⌨️ 快捷键说明

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