亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? vt100_menue.c

?? 可用來自做的AVR-USB-ISP的源碼,內(nèi)符電路圖,用AVR M8來模擬USB接口
?? C
字號:
/************************************************************************************************ * Project: generic * Author: Christian Ulrich
 * Contact: christian at ullihome dot de
 * * Creation Date: 2007-03-22 * Copyright: (c) 2007 by Christian Ulrich * License: GPLv2 ***********************************************************************************************/
#include "config.h"

#ifdef HASMENUE  //if not included menue.h dont compile this

#include <stdio.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include "menue.h"
#include "vt100.h"
#include "usb_uart.h"

uint8_t MENUE_entry,MENUE_back;
const char return_str[] PROGMEM = "return";

unsigned int strlen_P (const prog_char *str)
 {
    unsigned int len = 0;
 
    while (1)
    {
       char c = (char) pgm_read_byte (str);
       if ('\0' == c)
          return len;
       len++;
       str++; 
    }
 }

int MENUE_next_entry(int entry)
{
  int n_entry;
  n_entry = entry+1;
  while ((n_entry < MENUE_size) && (pgm_read_byte(&menue[n_entry].level) > pgm_read_byte(&menue[entry].level)))
    n_entry++;
  if ((n_entry < MENUE_size)  && (pgm_read_byte(&menue[n_entry].level) == pgm_read_byte(&menue[entry].level)))
    return n_entry;
  else
    return -1;
}
int MENUE_prev_entry(int entry)
{
  int p_entry;
  p_entry = entry-1;
  while ((p_entry > 0) && (pgm_read_byte(&menue[p_entry].level) > pgm_read_byte(&menue[entry].level)))
    p_entry--;
  if ((p_entry > 0) && (pgm_read_byte(&menue[p_entry].level) == pgm_read_byte(&menue[entry].level)))
    return p_entry;
  else
    return -1;
}

void MENUE_update(void)
{
  unsigned char i,a;
  unsigned char arow;
  unsigned char level_width = 0;
  
  arow = 13;
  i = MENUE_entry;
  while (pgm_read_byte(&menue[i].level) >= pgm_read_byte(&menue[MENUE_entry].level)) i--;
  if (strlen_P(menue[i].name) > level_width)
    level_width = strlen_P(menue[i].name);
  a = i;
  i++;
  while ((i <= MENUE_size) && (pgm_read_byte(&menue[i].level) >= pgm_read_byte(&menue[MENUE_entry].level)))
    {
      if (pgm_read_byte(&menue[i].level) == pgm_read_byte(&menue[MENUE_entry].level))
        {
          arow--;
          if (strlen_P(menue[i].name) > level_width)
		    level_width = strlen_P(menue[i].name);
        }
	  i++; 
    }
  Term_Set_Display_Attribute_Mode(MODE_NONE);
  Term_Erase_Screen();
  Term_Set_Display_Colour(COL_BACKGROUND,COL_BLUE);
  if (pgm_read_byte(&menue[a+1].level) > 1)
    arow--;
  Term_Draw_Window(menue[a].name,39-(level_width/2),arow,(level_width)+2,(13-arow)+2);
  i=a+1;
  arow += 3;
  if (pgm_read_byte(&menue[i].level) > 1)
    {
      Term_Set_Cursor_Position(arow,40-(level_width/2));
	  if (MENUE_back)
        Term_Set_Display_Attribute_Mode(MODE_REVERSED);
	  UART_puts_P(return_str);
	  if (MENUE_back)
	    {
          Term_Set_Display_Attribute_Mode(MODE_NONE);
          Term_Set_Display_Colour(COL_BACKGROUND,COL_BLUE);
		}
      arow++; 
	}
  while ((i <= MENUE_size) && (pgm_read_byte(&menue[i].level) >= pgm_read_byte(&menue[MENUE_entry].level)))
    {
	  if(pgm_read_byte(&menue[i].level) == pgm_read_byte(&menue[MENUE_entry].level)) 
	    {
          Term_Set_Cursor_Position(arow,40-(level_width/2));
     	  if ((i==MENUE_entry) && (MENUE_back==0))
            Term_Set_Display_Attribute_Mode(MODE_REVERSED);
		  UART_puts_P(menue[i].name);
     	  if ((i==MENUE_entry) && (MENUE_back==0))
		    {
              Term_Set_Display_Attribute_Mode(MODE_NONE);
              Term_Set_Display_Colour(COL_BACKGROUND,COL_BLUE);
			}
	      arow++;
	    }
      i++;
    }
}

void MENUE_nofunction(void)
{
  Term_Set_Display_Attribute_Mode(MODE_NONE);
  Term_Erase_Screen();
  Term_Set_Cursor_Position(14,35);
  UART_puts("no function !");
}

void MENUE_clrscr(void)
{
  Term_Set_Display_Attribute_Mode(MODE_NONE);
  Term_Erase_Screen();
}

void MENUE_prevlevel(void)
{
  int tmp_entry;
  MENUE_back = 0;
  tmp_entry = MENUE_entry;
  while ((tmp_entry > 1) && (pgm_read_byte(&menue[MENUE_entry].level)-1 != pgm_read_byte(&menue[tmp_entry].level)))
    tmp_entry--;
  MENUE_entry = tmp_entry;
  MENUE_update();
}

void MENUE_show(int can_exit)
{
  MENUE_update(); 
}

void MENUE_task(unsigned char key)
{
  int tmp_entry;
  switch (MENUE_is_key(key))
    {
      case KEY_back:
	    {
	      if (MENUE_prev_entry(MENUE_entry) != -1)
	  	    {
			  MENUE_entry = MENUE_prev_entry(MENUE_entry);
			  MENUE_update();
			}
		  else if (pgm_read_byte(&menue[MENUE_entry].level) > 1)
		    {
		      MENUE_back = 1;
		      MENUE_update();
		    }   
 	      break;
	    }
      case KEY_next:
	    {
	      if (MENUE_back == 1)
	  	    {
		      MENUE_back = 0;
              MENUE_update();
		    }
          else
  		    if (MENUE_next_entry(MENUE_entry) != -1)
		      {
		        MENUE_entry = MENUE_next_entry(MENUE_entry);
			    MENUE_update();
			  } 
 			break;
		}
      case KEY_ok:
	    {
	      if (MENUE_back == 1)
	        {
              MENUE_prevlevel();
			}
          else 
		    {
   		      if (pgm_read_byte(&menue[MENUE_entry+1].level) == pgm_read_byte(&menue[MENUE_entry].level)+1)
			    {
	   		      MENUE_entry++;
			      MENUE_update();
                }
              else
			    {
                  void (*func)(void);
				  func = (void(*)(void)) pgm_read_word (&menue[MENUE_entry].func);
			      if ((*func) == NULL)
			        {
					  MENUE_nofunction();
					  for (tmp_entry=0;tmp_entry<30;tmp_entry++)
					    {
				          _delay_ms(100);
						}
                      MENUE_update();
   				    }
                  else
				    {
					  MENUE_clrscr();
        		      (*func)();
				      MENUE_update();
					}
			    }
            }
          break;
        }   
	}
}

void MENUE_init(void)
{
  MENUE_entry = 1;
  MENUE_back = 0;
}

unsigned char keyindex = 0;

int MENUE_is_key(unsigned char key)
{
  if (key == 0xD)
    {
	  keyindex = 0;
      return KEY_ok;
	}
  else if ((keyindex == 0) && (key == 27)) keyindex++;
  else if ((keyindex == 1) && (key == '[')) keyindex++;
  else if ((keyindex == 2) && (key == 'A'))
    {
	  keyindex = 0;
      return KEY_back;
	}
  else if ((keyindex == 2) && (key == 'B'))
    {
	  keyindex = 0;
      return KEY_next;
    }
  else keyindex = 0;
  return 0;
}

#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品99久久久| 国产一区二区三区国产| 久久亚洲欧美国产精品乐播| 欧美午夜影院一区| 在线看日韩精品电影| 91久久精品网| 欧美中文字幕亚洲一区二区va在线 | 国产精品剧情在线亚洲| 久久久午夜精品| 国产精品私房写真福利视频| 国产精品进线69影院| 亚洲欧美一区二区久久| 一区二区三区色| 亚洲不卡在线观看| 激情综合一区二区三区| 成人一区二区三区在线观看| 大白屁股一区二区视频| 91国产免费看| 欧美xxxx老人做受| 国产精品卡一卡二卡三| 图片区小说区区亚洲影院| 久久国产精品99精品国产 | 成人av电影在线网| 在线观看91精品国产入口| 欧美一级二级三级蜜桃| 久久久天堂av| 一区二区三区自拍| 麻豆精品蜜桃视频网站| 成人精品国产福利| 欧美喷潮久久久xxxxx| 久久久久久久综合| 亚洲乱码国产乱码精品精98午夜 | 成人污视频在线观看| 欧美日韩三级视频| 中文字幕av免费专区久久| 亚洲与欧洲av电影| 激情综合色播激情啊| 91精品福利视频| xnxx国产精品| 日日夜夜免费精品| 99精品视频一区二区三区| 日韩欧美国产精品| 亚洲一卡二卡三卡四卡无卡久久| 国产在线视视频有精品| 欧美日韩中文字幕一区| 亚洲卡通动漫在线| 免费三级欧美电影| 色综合一个色综合亚洲| 久久精品视频网| 日韩电影在线观看网站| 一本一道综合狠狠老| 中文字幕乱码亚洲精品一区| 日韩精品成人一区二区三区| 91免费观看在线| 国产精品乱码妇女bbbb| 国产九色精品成人porny| 在线不卡的av| 亚洲高清免费观看高清完整版在线观看| 视频一区视频二区在线观看| 国精产品一区一区三区mba视频| 欧洲在线/亚洲| 亚洲色图19p| 9色porny自拍视频一区二区| 中文字幕成人av| 国产精品一级黄| www国产精品av| 国产一区欧美二区| 久久综合色8888| 国产伦精一区二区三区| 久久精品亚洲一区二区三区浴池 | 精品久久久久香蕉网| 日韩电影在线一区二区三区| 精品视频一区三区九区| 亚洲福利一区二区三区| 欧美午夜理伦三级在线观看| 亚洲一区二区三区三| 欧美日韩一级黄| 亚洲福利视频三区| 欧美色综合影院| 丝瓜av网站精品一区二区| 7777精品伊人久久久大香线蕉| 亚洲成av人片在线| 制服丝袜国产精品| 国产一区二区三区香蕉 | 91在线porny国产在线看| 中文字幕亚洲不卡| 91搞黄在线观看| 天天综合色天天综合色h| 91精品在线免费| 狠狠v欧美v日韩v亚洲ⅴ| 久久久五月婷婷| 91麻豆福利精品推荐| 亚洲一区二区三区在线看| 538prom精品视频线放| 奇米色一区二区| 国产欧美一区二区精品婷婷| 91亚洲国产成人精品一区二区三| 亚洲风情在线资源站| 欧美大片在线观看| 91久久精品午夜一区二区| 午夜视频在线观看一区| 欧美va亚洲va在线观看蝴蝶网| 国产乱子伦视频一区二区三区 | 99热精品国产| 亚洲成a天堂v人片| 久久免费视频一区| 在线亚洲一区二区| 精品无人码麻豆乱码1区2区| 国产精品美女久久久久av爽李琼 | 国产美女一区二区| 久久精品一级爱片| 欧美福利视频导航| 成人综合日日夜夜| 日韩精品成人一区二区三区| 精品久久久久久无| 91农村精品一区二区在线| 男人的天堂久久精品| 国产精品久久久久久亚洲毛片| 欧美日本国产一区| 成人少妇影院yyyy| 九九久久精品视频| 亚洲国产精品综合小说图片区| 久久久国产精华| 91精品国产综合久久香蕉的特点 | 国产精品99久久不卡二区| 亚洲一区二区中文在线| 国产网红主播福利一区二区| 欧美日产国产精品| 色狠狠色狠狠综合| 成人爱爱电影网址| 国产成人综合视频| 久久国产精品无码网站| 五月综合激情网| 亚洲自拍与偷拍| 亚洲欧洲精品一区二区三区| 久久久午夜电影| 久久久久久99久久久精品网站| 欧美剧情电影在线观看完整版免费励志电影| 欧美日韩一区成人| 91香蕉国产在线观看软件| 高清在线观看日韩| 高清在线成人网| 成人免费高清在线观看| 国产东北露脸精品视频| 日本麻豆一区二区三区视频| 亚洲成人三级小说| 午夜免费久久看| 日韩精品亚洲一区二区三区免费| 夜夜精品视频一区二区| 亚洲综合在线免费观看| 亚洲欧美色一区| 一区二区三区中文在线| 一区二区三区在线观看视频| 亚洲女与黑人做爰| 亚洲精品乱码久久久久久日本蜜臀| 中文字幕一区免费在线观看| 中文字幕一区免费在线观看| 亚洲女厕所小便bbb| 偷拍一区二区三区| 亚洲电影视频在线| 天堂蜜桃91精品| 日韩黄色免费电影| 久久99久久99| 成人免费av在线| 91麻豆精品秘密| 欧美日韩久久久| 精品国产成人在线影院| 国产亚洲欧美激情| 一区二区三区中文在线| 午夜av区久久| 国产成人免费在线视频| 99久久国产综合精品色伊| 欧美中文一区二区三区| 日韩午夜电影在线观看| 欧美激情一区二区三区蜜桃视频 | 国产精品一区专区| 99精品欧美一区二区蜜桃免费 | 免费欧美高清视频| 国产精品2024| 日本道在线观看一区二区| 日韩一二三区不卡| 国产日本欧美一区二区| 亚洲高清三级视频| 国产91精品欧美| 欧美色图12p| 久久精品欧美一区二区三区不卡| 亚洲色图欧洲色图婷婷| 另类综合日韩欧美亚洲| 99久精品国产| 欧美videos大乳护士334| 国产精品福利一区二区| 日韩专区在线视频| 97久久久精品综合88久久| 日韩欧美一二三四区| 亚洲自拍偷拍欧美| 成人性生交大片免费看视频在线 | 欧美色窝79yyyycom| 欧美激情艳妇裸体舞| 蜜臀av在线播放一区二区三区| 99re视频精品|