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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ks0108.c

?? 占用內存極少的菜單程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
/******************************************************************************
 * Ks0108.C - Ks0108 液晶控制器驅動程序
 *
 *
 * DESCRIPTION: -
 *
 * modification history
 * --------------------
 * 01a, 04/sep/2007, 梁炎昌 written
 * --------------------
 ******************************************************************************/

#include "CPU.H"
#include "Ks0108.H"
#include "Chinese.C"
#include "ASCII.c"



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

/*
-------------------------------------------------------------------------
GUI相關全局變量
-------------------------------------------------------------------------
*/
U8  GUIEnFont = En_8x16;                //英文字體
U8  GUITextMode = GUI_TEXTMODE_NORMAL;  //顯示模式

U8 Char_XSIZE;   //英文字體X寬度
U8 Char_YSIZE;   //英文字體Y寬度

U8 PosX = 0;     //當前系統X坐標
U8 PosY = 0;     //當前系統Y坐標

U8 NoXY = true;//是否使用PosX PosY的標志   1-->不使用   0-->使用


// ---- 延遲程序 ----------------------------------------------------
#if OSC_48MHZ == true

#define SomeNop();      {               \
    _nop_(); _nop_(); _nop_(); _nop_(); \
    _nop_(); _nop_(); _nop_(); _nop_(); \
   }

#elif OSC_24MHZ == true

#define SomeNop();      {               \
    _nop_(); _nop_(); _nop_(); _nop_(); \
    }

#endif






/*
*****************************************************************************
* WriteCommand_0108 - 寫命令到KS0108
* DESCRIPTION: -
* 本函數不接管片選信號
* @Param CmdData:命令碼
* @Return :
* ----
*****************************************************************************
*/
void WriteCommand_0108(U8 CmdData)
{
    LCD_E = 0;
    LCD_RS = 0;
    LCD_RW = 0;
    LCD_Bus = CmdData;
    SomeNop();
    LCD_E = 1;
    SomeNop();
    LCD_E = 0;

}


/*
*****************************************************************************
* WriteData_0108 - 寫數據到KS0108
* DESCRIPTION: -
* 本函數不接管片選信號
* @Param Data:寫入的數據
* @Return :
* ----
*****************************************************************************
*/
void WriteData_0108(U8 Data)
{
    LCD_E = 0;
    LCD_RS = 1;
    LCD_RW = 0;
    LCD_Bus = Data;
    SomeNop();
    LCD_E = 1;
    SomeNop();
    LCD_E = 0;

}
/*-------------------讀LCD數據----------------------------*/
#if 0
U8 ReadData_0108(void)
{   U8 Temp;
    LCD_Bus = 0xFF;//切換成輸入
    LCD_RS = 1;
    LCD_RW = 1;
    SomeNop();
    LCD_E = 1;
    SomeNop();
    Temp = LCD_Bus;
    return(Temp);
/*
    U8 Temp;
    PIN_KS0108_Di_HIGH;
    PIN_KS0108_RW_HIGH;
    DelayS(0);
    PIN_KS0108_Enable_HIGH;
    DelayS(0);
    PIN_KS0108_Enable_LOW;
    Temp = PIN_KS0108_Lcd_InBus;
    return (Temp);
*/
}

U8 ReadState_0108(void)
{
    U8 Temp;
    LCD_Bus = 0xFF;
    LCD_RS = 0;
    LCD_RW = 1;
    SomeNop();
    LCD_E = 1;
    SomeNop();
    LCD_E = 0;
    Temp = LCD_Bus;
    return (Temp);


}

U8 Busy(void)
{
    U16 TimeOut;
    U8 Flag;
    TimeOut = 200;
    do{
        Flag = ReadState_0108();
        LED1 ^= 0x01;
        if (TimeOut-- == 0){
            return 0;
        }
    }while(Flag &0x80);
    return 1;
}
#endif
//Option = 1   --->Disp On
//Option = 0   --->Disp Off
void KS0108_DisplayOn(U8 Option)
{
    if (Option == 1) {
        WriteCommand_0108(Ks0108_CMD_Disp_ON);
    }else{
        WriteCommand_0108(Ks0108_CMD_Disp_OFF);
    }
}

void KS0108_SetStartRow(U8 Row)
{
    WriteCommand_0108(Ks0108_CMD_Disp_Start_Line + Row);
}
/*
*****************************************************************************
* Display_Locate - LCD上指定位置 顯示指定數據
* DESCRIPTION: -
*
* @Param x0:0--191橫向坐標
* @Param y0:0--7  縱向坐標
* @Param DisplayData:寫入的數據
* @Return :
* ----
*****************************************************************************
*/
void Display_Locate(U8 DisplayData, U8 x0, U8 y0)
{
    if ((x0 <= (LCD_XSIZE-1))&(y0 <= (LCD_YSIZE-1))){
        if (x0 <= 63){                                //0--191
            LCD_CSA();
//            Busy();//判忙
            WriteCommand_0108(Ks0108_CMD_Set_Addr + x0);
        } else if (x0 <= 127){
            LCD_CSB();
//            Busy();//判忙
            WriteCommand_0108(Ks0108_CMD_Set_Addr + x0 - 64);
        } else if (x0 <= 191){
            LCD_CSC();
//            Busy();//判忙
            WriteCommand_0108(Ks0108_CMD_Set_Addr + x0 -128);
        }
//        Busy();//判忙
        WriteCommand_0108(y0 + Ks0108_CMD_Set_Page);   //0--7
//        Busy();//判忙
        WriteData_0108(DisplayData);
        LCD_CS_None();//不再片選任何一個Ks0108
    }
}


/*
*****************************************************************************
* Display_Clear - 清空LCD顯示
* DESCRIPTION: -
*
* @Param void:
* @Return :
* ----
*****************************************************************************
*/
void Display_Clear(void)
{
    U8 j,k;
//--------------------------------------
    LCD_CSA();
    for(k = 0; k < 8; k++){
        WriteCommand_0108(0 + Ks0108_CMD_Set_Addr); //0--7
        WriteCommand_0108(k + Ks0108_CMD_Set_Page); //0--63
        for(j = 0;j < 64;j++){
            WriteData_0108(0x00);
        }
    }
    KS0108_SetStartRow(0);
//--------------------------------------
    LCD_CSB();
    for(k = 0; k < 8; k++){
        WriteCommand_0108(0 + Ks0108_CMD_Set_Addr); //0--7
        WriteCommand_0108(k + Ks0108_CMD_Set_Page); //0--63
        for(j = 0;j < 64;j++){
            WriteData_0108(0x00);
        }
    }
    KS0108_SetStartRow(0);
//-------------------------------------
    LCD_CSC();
    for(k = 0; k < 8; k++){
        WriteCommand_0108(0 + Ks0108_CMD_Set_Addr);//0--7
        WriteCommand_0108(k + Ks0108_CMD_Set_Page);//0-63
        for(j = 0;j < 64;j++){
            WriteData_0108(0x00);
        }
    }
    KS0108_SetStartRow(0);
//-------------------------------------
    LCD_CS_None();
}


/*
*****************************************************************************
* Display_Init - 初始化LCD
* DESCRIPTION: -
*
* @Param void:
* @Return :
* ----
*****************************************************************************
*/
void Display_Init(void)
{
//---------------------------
    LCD_CSA();
    KS0108_DisplayOn(0);
    KS0108_SetStartRow(0);
    KS0108_DisplayOn(1);
//---------------------------
    LCD_CSB();
    KS0108_DisplayOn(0);
    KS0108_SetStartRow(0);
    KS0108_DisplayOn(1);
//---------------------------
    LCD_CSC();
    KS0108_DisplayOn(0);
    KS0108_SetStartRow(0);
    KS0108_DisplayOn(1);
//---------------------------
    LCD_CS_None();
}




/*
*****************************************************************************
* Display_Chinese - 指定位置顯示一個16x16的漢字
* DESCRIPTION: -
*
* @Param x0:X軸坐標0--(192-16)
* @Param y0:Y軸坐標0--(8-2)
* @Param UniCode:漢字內碼
* @Return :
* ----
*****************************************************************************
*/
void Display_Chinese(U16 UniCode, U8 x0, U8 y0)
{
  U16 CodeID;
  U8 i, ImgData;
  U8 HZ_X = x0;
  // 在字庫里搜索漢字
    for(CodeID=0; CodeID < hzNum; CodeID++){
        // 找到 指定漢字的 Index 后, 跳出循環
        if ( (hzIndex[2*CodeID] == UniCode/256) && (hzIndex[2*CodeID+1] == UniCode%256) ){
            break;
        }else if(CodeID == (hzNum-1)){//未檢索到的漢字,顯示個"##"提示吧
            GUI_DispCharAt('#',x0,y0);
            GUI_DispCharAt('#',x0+Char_XSIZE,y0);
            return;
        }
    }
//----------------------------------
    switch (GUITextMode) {
        case GUI_TEXTMODE_NORMAL :
//-------------------------------------------------------------------------
            // 寫漢字的上半部分  (一個漢字 32 個字節,  顯示為2行 * 16列)
            for(i=0; i<16; i++){
                ImgData = hzdot[i+CodeID*32];
                Display_Locate(ImgData, HZ_X, y0);
                HZ_X++;
            }
            // 寫漢字的下半部分
            HZ_X = x0;
            for(i=16; i<32; i++){
                ImgData = hzdot[i+CodeID*32];
                Display_Locate(ImgData, HZ_X, y0 + 1);
                HZ_X++;
            }
//-------------------------------------------------------------------------
             break;
        case GUI_TEXTMODE_REVERSE :
//-------------------------------------------------------------------------
            // 寫漢字的上半部分  (一個漢字 32 個字節,  顯示為2行 * 16列)
            for(i=0; i<16; i++){
              ImgData = hzdot[i+CodeID*32]^0xFF;
              Display_Locate(ImgData, HZ_X, y0);
              HZ_X++;
            }
            // 寫漢字的下半部分
            HZ_X = x0;
            for(i=16; i<32; i++){
              ImgData = hzdot[i+CodeID*32]^0xFF;
              Display_Locate(ImgData, HZ_X, y0 + 1);
              HZ_X++;
            }
//-------------------------------------------------------------------------
             break;
        case GUI_TEXTMODE_UNDERLINE :
//-------------------------------------------------------------------------
            // 寫漢字的上半部分  (一個漢字 32 個字節,  顯示為2行 * 16列)
            for(i=0; i<16; i++){
              ImgData = hzdot[i+CodeID*32];
              Display_Locate(ImgData, HZ_X, y0);
              HZ_X++;
            }
            // 寫漢字的下半部分
            HZ_X = x0;
            for(i=16; i<32; i++){
              ImgData = hzdot[i+CodeID*32]|0x80;
              Display_Locate(ImgData, HZ_X, y0 + 1);
              HZ_X++;
            }
//-------------------------------------------------------------------------
             break;
        default :
             break;
    }
}


/*
*****************************************************************************
* Display_ASCII - 顯示一個ASCII
* DESCRIPTION: -
*
* @Param X:X軸坐標 0--192  (注意邊界)
* @Param Y:Y軸坐標 0-- 7   (注意邊界)
* @Param Char:ASCII碼
* @Return :
* ----
*****************************************************************************
*/
void Display_ASCII(U8 Char, U8 X, U8 Y)
{
    U8 i, ImgData;
    U8 HZ_X = X;
    if(GUIEnFont == En_5x8){
        Display_Locate(0x00, HZ_X, Y);
        HZ_X++;
        for(i = 0; i < 5; i++){
            ImgData = chardot_5x8[i+(Char-0x20)*5];
            Display_Locate(ImgData, HZ_X, Y);
            HZ_X++;
        }
        Display_Locate(0x00, HZ_X, Y);
        HZ_X++;
        Display_Locate(0x00, HZ_X, Y);
    } else {
        for(i=0;i<8;i++){
            ImgData = chardot_8x16[i+(Char-0x20)*16];
            Display_Locate(ImgData, HZ_X, Y);
            HZ_X++;
        }
        HZ_X=X;
        for(i=8;i<16;i++){
            ImgData = chardot_8x16[i+(Char-0x20)*16];
            Display_Locate(ImgData, HZ_X, Y + 1);
            HZ_X++;
      }

   }
}




/*
*****************************************************************************
* Display_InvASCII - 反顯示ASCII
* DESCRIPTION: -
*
* @Param X:X軸坐標  0--191
* @Param Y:Y軸坐標  0--7
* @Param Char:ASCII碼
* @Return :
* ----
*****************************************************************************
*/
void Display_InvASCII(U8 Char, U8 X, U8 Y)
{

    U8 i, ImgData;
    U8 HZ_X = X;
    if(GUIEnFont == En_5x8){
        Display_Locate(0xFF, HZ_X, Y);
        HZ_X++;
        for(i = 0; i < 5; i++){
            ImgData = chardot_5x8[i+(Char-0x20)*5]^0xFF;
            Display_Locate(ImgData, HZ_X, Y);
            HZ_X++;
        }
        Display_Locate(0xFF, HZ_X, Y);
        HZ_X++;
        Display_Locate(0xFF, HZ_X, Y);
    } else {
        for(i=0;i<8;i++){
            ImgData = chardot_8x16[i+(Char-0x20)*16] ^ 0xFF;
            Display_Locate(ImgData, HZ_X, Y);
            HZ_X++;
        }
        HZ_X=X;
        for(i=8;i<16;i++){
            ImgData = chardot_8x16[i+(Char-0x20)*16] ^ 0xFF;
            Display_Locate(ImgData, HZ_X, Y + 1);
            HZ_X++;
        }
    }
}

/*
*****************************************************************************
* Display_ASCII_UnderLine - 顯示一個帶有下劃線的ASCII
* DESCRIPTION: -
*
* @Param X:X軸坐標
* @Param Y:Y軸坐標
* @Param Char:ASCII碼
* @Return :
* ----
*****************************************************************************
*/
void Display_ASCII_UnderLine(U8 Char, U8 X, U8 Y)
{
  //U16 Position;
  U8 i, ImgData;
  U8 HZ_X = X;
    if(GUIEnFont == En_5x8){
        Display_Locate(0x80, HZ_X, Y);
        HZ_X++;
        for(i = 0; i < 5; i++){
          ImgData = chardot_5x8[i+(Char-0x20)*5] | 0x80;
          Display_Locate(ImgData, HZ_X, Y);
          HZ_X++;
        }
        Display_Locate(0x80, HZ_X, Y);
        HZ_X++;
        Display_Locate(0x80, HZ_X, Y);
    } else {
        for(i=0;i<8;i++){
            ImgData = chardot_8x16[i+(Char-0x20)*16];
            Display_Locate(ImgData, HZ_X, Y);
            HZ_X++;
        }
        HZ_X=X;
        for(i=8;i<16;i++){
            ImgData = chardot_8x16[i+(Char-0x20)*16] | 0x80;
            Display_Locate(ImgData, HZ_X, Y + 1);
            HZ_X++;
        }
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
性欧美疯狂xxxxbbbb| 色综合久久综合网欧美综合网| 国产91露脸合集magnet| 欧美日韩卡一卡二| 综合激情成人伊人| 国产麻豆日韩欧美久久| 91精品国产综合久久小美女| 国产精品成人免费在线| 韩国av一区二区三区在线观看| 欧美色视频在线观看| 亚洲美女视频在线| 成人免费观看男女羞羞视频| 精品国产乱码久久久久久久久| 图片区小说区国产精品视频| 99久免费精品视频在线观看| 国产欧美一区二区精品性色| 国产一区中文字幕| 欧美tk—视频vk| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美吻胸吃奶大尺度电影 | 亚洲一区二区偷拍精品| 不卡的看片网站| 国产嫩草影院久久久久| 国产精品18久久久久久久久久久久 | 欧美日韩精品一区二区在线播放| 国产精品素人一区二区| 国产精品亚洲午夜一区二区三区 | 精品国产精品网麻豆系列| 亚洲成人动漫在线免费观看| 在线观看日韩电影| 亚洲乱码国产乱码精品精小说| 99久久99久久精品国产片果冻 | 在线观看欧美日本| 亚洲丝袜精品丝袜在线| 色婷婷综合激情| 又紧又大又爽精品一区二区| 欧美网站一区二区| 日韩精品视频网| 日韩欧美国产精品一区| 九九视频精品免费| 久久精品欧美一区二区三区不卡| 国产精品一区二区果冻传媒| 国产精品青草综合久久久久99| 成人av资源在线| 亚洲黄色录像片| 欧美一区午夜精品| 国产伦精品一区二区三区免费迷 | 欧美在线不卡视频| 亚洲gay无套男同| 日韩欧美中文字幕精品| 国产精品中文字幕欧美| 国产精品国产成人国产三级| 欧美性大战久久久久久久| 天天操天天综合网| 精品国精品自拍自在线| 99视频在线观看一区三区| 亚洲电影在线播放| 日韩你懂的电影在线观看| 成熟亚洲日本毛茸茸凸凹| 亚洲综合av网| 精品免费日韩av| heyzo一本久久综合| 香蕉av福利精品导航| 久久久久99精品一区| 91蜜桃视频在线| 麻豆精品蜜桃视频网站| 亚洲特级片在线| 欧美va日韩va| 欧洲另类一二三四区| 国产在线播放一区二区三区| 一区二区三区高清不卡| 久久久久久日产精品| 日本高清不卡在线观看| 国产精品主播直播| 亚洲国产视频一区| 国产欧美一二三区| 7777精品伊人久久久大香线蕉最新版 | 东方欧美亚洲色图在线| 亚洲免费色视频| 久久久国产精品不卡| 欧美精品自拍偷拍动漫精品| 成人手机电影网| 久久精品国产免费| 亚洲444eee在线观看| 综合久久一区二区三区| 久久久久青草大香线综合精品| 欧美剧在线免费观看网站| 成人av电影在线| 狠狠网亚洲精品| 美国av一区二区| 亚洲成人7777| 亚洲女厕所小便bbb| 国产精品系列在线| 精品国产髙清在线看国产毛片| 欧美亚洲一区二区在线| 色一情一伦一子一伦一区| 成人看片黄a免费看在线| 九一久久久久久| 麻豆精品蜜桃视频网站| 视频精品一区二区| 亚洲午夜久久久久久久久电影网 | 国产精品18久久久久久久久久久久 | 国产麻豆成人精品| 美女在线观看视频一区二区| 婷婷成人激情在线网| 亚洲尤物视频在线| 一区二区三区资源| 亚洲免费在线播放| 亚洲午夜在线观看视频在线| 亚洲午夜三级在线| 亚洲高清免费观看高清完整版在线观看| 17c精品麻豆一区二区免费| 国产欧美综合在线| 国产日韩欧美精品一区| 日本一区二区免费在线观看视频 | 精品一区二区三区免费播放| 天堂成人免费av电影一区| 亚洲国产毛片aaaaa无费看 | 成人精品gif动图一区| 丁香啪啪综合成人亚洲小说| 国产suv精品一区二区三区| 国产99精品在线观看| 99久久久精品免费观看国产蜜| 99久久精品费精品国产一区二区| 91啪在线观看| 日本高清免费不卡视频| 欧美顶级少妇做爰| 精品国产1区二区| 久久这里只精品最新地址| 久久久亚洲精品石原莉奈| 国产精品区一区二区三区| 亚洲另类色综合网站| 偷拍自拍另类欧美| 国产自产2019最新不卡| 成人三级在线视频| 在线视频欧美精品| 日韩欧美一区二区久久婷婷| 久久久www免费人成精品| 欧美国产激情一区二区三区蜜月| 亚洲欧美另类综合偷拍| 人人狠狠综合久久亚洲| 粉嫩一区二区三区在线看| 在线看日韩精品电影| 日韩一区二区视频在线观看| 欧美激情综合五月色丁香| 亚洲国产wwwccc36天堂| 紧缚奴在线一区二区三区| 99国产欧美另类久久久精品| 6080国产精品一区二区| 国产欧美1区2区3区| 亚洲无人区一区| 国产一区二区三区电影在线观看| 91浏览器在线视频| 日韩精品一区二区三区四区| 国产精品国产三级国产aⅴ入口 | 精品国产1区二区| 一区二区三区四区在线播放 | 久久夜色精品一区| 亚洲五码中文字幕| 成人做爰69片免费看网站| 3atv一区二区三区| 亚洲私人影院在线观看| 激情久久五月天| 欧美日韩成人综合在线一区二区 | 亚洲成人中文在线| 成人在线综合网站| 日韩手机在线导航| 亚洲一级片在线观看| 丁香天五香天堂综合| 日韩免费电影一区| 亚洲电影一级片| 一本到不卡精品视频在线观看 | 成人黄色小视频| 欧美一区二区三区四区久久| 一区二区久久久久久| 成人小视频免费在线观看| 精品精品国产高清a毛片牛牛| 午夜免费欧美电影| 日本精品免费观看高清观看| 亚洲国产精品黑人久久久| 韩国av一区二区三区四区| 日韩限制级电影在线观看| 五月天欧美精品| 欧美亚洲精品一区| 一区二区国产盗摄色噜噜| 972aa.com艺术欧美| 欧美激情综合五月色丁香小说| 国产综合色视频| 精品国产免费人成电影在线观看四季 | 成人看片黄a免费看在线| 久久久三级国产网站| 麻豆国产91在线播放| 8x8x8国产精品| 奇米亚洲午夜久久精品| 欧美一区二区女人| 视频一区欧美精品| 日韩欧美中文一区二区| 狠狠色丁香久久婷婷综| 欧美不卡123| 国产二区国产一区在线观看|