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

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

?? lcd.c

?? 真正實現完美應用的以LCD12864為顯示終端的四行多級菜單源碼(完整版)
?? C
字號:
/*********************************************************************************************************
*                                            LCD_12864 driver
*                                               QiZhao,2007
*                                           All Rights Reserved
* File      : lcd.c
* By        : QiZhao
* Contact   : zq1987731@163.com
*
* Version   : V2.0 β
* Corrector : QiZhao
* Date      : 2008.2.10 (Last modified)
*
* Remarks   : LCD_initial();
*             DIS_LCD(X,Y,Address,Length);    SELECT_LINE(Line-1~4);  CLEAR_DIS();
*             GRAPH_BMP(*STR);     CLEAR_SCREEN();     CLEAR_HALF_SCREEN(0-L/1-R);
*             LCDLineXY(X1,Y1,X2,Y2,0-Clr/1-Set);    GRAPH_POINT(X,Y,0-Clr/1-Set);
*
*********************************************************************************************************/

    #include "lcd.h"

/*********************************************************************************************************
*
*                                             LCD Initial
*
*********************************************************************************************************/

    extern void LCD_initial (void)
    {
        W_LCD (0x30, 0);
        W_LCD (0x06, 0);
        W_LCD (0x0C, 0);

        W_LCD (0x01, 0);       //Clear DDRAM
        delayms (5);
    }

/*********************************************************************************************************
*
*                                             LCD Port Write
*
*********************************************************************************************************/

    #if PSB
        // Parallel
        static void W_LCD (uchar DATA, bit RS)
        {
                uchar temp;

                LCD_RW = 0;
                if (RS)
                    LCD_RS = 1;        //Data
                else
                    LCD_RS = 0;        //Control
                Data_Port = DATA;

                NOP
                NOP

                LCD_E = 1;
                NOP
                NOP
                LCD_E = 0;

                do                      // wait
                {
                    temp = R_LCD (0);
                    temp &= 0x80;
                }while (~temp);
        }

    #else
        // Series
        static void S_SEND_BYTE(uchar S_DATA)
        {
            uchar i;

            for(i = 8; i != 0; i--)
            {
                LCD_SID=(bit)(S_DATA & 0x80);
                NOP

                LCD_SCLK = 1;
                S_DATA <<= 1;
                LCD_SCLK = 0;
            }
        }

        static void W_LCD (uchar DATA, bit RS)
        {
            uchar temp;
            LCD_SID = 0;
            LCD_SCLK = 0;

            if (RS)
                S_SEND_BYTE (0xFA);
            else
                S_SEND_BYTE (0xF8);

            S_SEND_BYTE (DATA & 0xF0);
            S_SEND_BYTE ((DATA << 4) & 0xF0);

            do                          // wait
            {
                temp = R_LCD (0);
                temp &= 0x80;
            }while (~temp);
        }

    #endif

/*********************************************************************************************************
*
*                                             LCD Port Read
*
*********************************************************************************************************/

    #if PSB
        // Parallel
        static uchar R_LCD (bit RS)
        {
            LCD_RW = 1;
            if (RS)
                LCD_RS = 1;         // RAM
            else
                LCD_RS = 0;         // Busy & AC
            Data_Port = 0xFF;       // Read

            NOP

            LCD_E = 1;
            NOP
            NOP
            LCD_E = 0;

            return Data_Port;
        }

    #else
        // Series
        static uchar S_READ_BYTE(void)
        {
            uchar i, SCAN_BYTE = 0x80, S_BYTE = 0;

            for(i = 8; i != 0; i--)
            {
                LCD_SCLK = 1;

                if(LCD_SID)
                    S_BYTE |= SCAN_BYTE;
                else
                    S_BYTE &= ~SCAN_BYTE;
                SCAN_BYTE >>= 1;

                LCD_SCLK = 0;
            }

            return S_BYTE;
        }

        static uchar R_LCD (bit RS)
        {
            uchar temp;
            LCD_SID = 0;
            LCD_SCLK = 0;

            if (RS)
                S_SEND_BYTE (0xFE);
            else
                S_SEND_BYTE (0xFC);

            LCD_SID = 1;                // Read

            temp = S_READ_BYTE ();
            temp |= (S_READ_BYTE () >> 4);

            return temp;
        }

    #endif

/*********************************************************************************************************
*
*                                            LCD_Display_Char & Word
*
*********************************************************************************************************/

    extern void DIS_LCD (uchar x, uchar y, char *str, uchar z)
    {
        uchar addr;
        char temp;

        W_LCD (0x30, 0);
        switch (x)
        {
            case 1:
                addr = (0x7F + y);
                break;
            case 2:
                addr = (0x8F + y);
                break;
            case 3:
                addr = (0x87 + y);
                break;
            case 4:
                addr = (0x97 + y);
                break;
        }
        W_LCD (addr, 0);

        for ( ; z > 0; z--)
        {
            temp = *str;
            str++;
            W_LCD (temp, 1);
        }

    }

/*********************************************************************************************************
*
*                                             Select A Line
*
*********************************************************************************************************/

    extern void SELECT_LINE (uchar x)
    {
        DIS_LCD (1,1,"  ",2);
        DIS_LCD (2,1,"  ",2);
        DIS_LCD (3,1,"  ",2);
        DIS_LCD (4,1,"  ",2);

        DIS_LCD (x,1,"->",2);
    }

/*********************************************************************************************************
*
*                                               CLEAR_DDRAM
*
*********************************************************************************************************/

    extern void CLEAR_DIS (void)
    {
        W_LCD (0x01, 0);
        delayms (5);
    }

/*********************************************************************************************************
*
*                                             LCD Graph Point
*
*********************************************************************************************************/

    extern void GRAPH_POINT (uchar x, uchar y, bit z)
    {
        uchar xx,yy;
        uint dd;

        W_LCD (0x34, 0);
        W_LCD (0x36, 0);

        xx = x / 16;
        yy = 63 - y;

        if (yy >= 32)
        {
            xx = xx + 8;
            yy -= 32;
        }

        W_LCD (0x80 + yy, 0);
        W_LCD (0x80 + xx, 0);

        dd = (uint)R_LCD (1);
        dd <<= 8;
        dd |= (uint)R_LCD (1);

        if (z)
            dd |=   0x8000 >> (x % 16);
        else
            dd &= ~(0x8000 >> (x % 16));

        W_LCD (0x80 + yy, 0);
        W_LCD (0x80 + xx, 0);

        W_LCD (dd >> 8, 1);
        W_LCD (dd, 1);
    }

/*********************************************************************************************************
*
*                                            LCD Graph BMP
*
*********************************************************************************************************/

    extern void GRAPH_BMP (uchar *str)
    {
        uint x=0;
        uchar i,j;

        W_LCD (0x34, 0);
        W_LCD (0x36, 0);

        for (i=0; i<32; i++)            // Above half
        {
            W_LCD (0x80 | i, 0);        // Abscissa set (y)
            W_LCD (0x80, 0);            // Ordinate set (x)

            for (j = 16; j != 0; j--)
            {
                W_LCD (str[x], 1);
                x++;
            }
        }// for

        for (i=0; i<32; i++)            // Below half
        {
            W_LCD (0x80 | i, 0);
            W_LCD (0x88, 0);

            for (j = 16; j != 0; j--)
            {
                W_LCD (str[x], 1);
                x++;
            }
        }// for
    }

/*********************************************************************************************************
*
*                                             Clear CGRAM
*
*********************************************************************************************************/

    extern void CLEAR_SCREEN (void)
    {
        uchar i,j;
        W_LCD (0x34, 0);
        W_LCD (0x36, 0);

        for (i=0; i<32; i++)
        {
            W_LCD (0x80 | i, 0);
            W_LCD (0x80, 0);

            for (j = 0; j < 32; j++)
            {
                W_LCD (0, 1);
            }
        }// for
    }

/*********************************************************************************************************
*
*                                          Clear HALF CGRAM
*                              LR=0 Clear left-screen, LR=1 Right-screen
*
*********************************************************************************************************/

    extern void CLEAR_HALF_SCREEN (bit LR)
    {
        uchar i,j,x;
        W_LCD (0x34, 0);
        W_LCD (0x36, 0);

        if (LR)         // Choose left or right
            x = 0x84;
        else
            x = 0x80;

        for (i = 0; i < 32; i++)
        {
            W_LCD (0x80 | i, 0);
            W_LCD (x, 0);

            for ( j= 8; j != 0; j--)
            {
                W_LCD (0, 1);
            }
        }

        for (i = 0; i < 32; i++)
        {
            W_LCD (0x80 | i, 0);
            W_LCD (x+8, 0);

            for (j = 8; j != 0; j--)
            {
                W_LCD (0, 1);
            }
        }
    }

/*********************************************************************************************************
*
*                                            LCD Graph Line
*                                 (x,y) to (x1,y1),z=1 Draw ,z=0 Clear
*
*********************************************************************************************************/

    extern void LCD_Line (uchar x, uchar y, uchar x1, uchar y1, bit z)
    {
        uchar i, a, b, c;
        uint  a1, b1;
        char  d = 1, e = 1;
        bit   f = 0;

        if (x1 > x)
        {
            a = (x1 - x);
            d = -1;
        }
        else
            a = (x - x1);

        if (y1 > y)
        {
            b = (y1 - y);
            e = -1;
        }
        else
            b = (y - y1);

        a1 = a;
        b1 = b;

        if (b > a)
        {
            c = b;
            b = a;
            b = c;
            f = 1;
        }

        if (f == 0)    //a>b
        {
            for (i = 0; i <= a; i++)
            {
                x1 = x;
                y1 = y;
                x = x - d * i;
                y = y - (b1 * i / a1) * e;
                GRAPH_POINT(x, y, z);
                x = x1;
                y = y1;
            }// for
        }// if

        if (f == 1)    //a<b
        {
            for (i = 0; i <= b; i++)
            {
                x1 = x;
                y1 = y;
                y = y - e * i;
                x = x - (a1 * i / b1) * d;
                GRAPH_POINT (x, y, z);
                x = x1;
                y = y1;
            }// for
        }// if
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀精品久久久久久蜜臀| 亚洲激情男女视频| 欧美在线免费视屏| 久久99日本精品| 亚洲乱码国产乱码精品精小说| 日韩午夜在线影院| av在线不卡免费看| 蜜桃一区二区三区四区| 亚洲少妇中出一区| 2020国产精品久久精品美国| 91毛片在线观看| 国产真实乱对白精彩久久| 亚洲一二三区视频在线观看| 国产日韩欧美精品一区| 在线播放日韩导航| 色婷婷精品久久二区二区蜜臂av| 国产制服丝袜一区| 蜜臀av一区二区| 亚洲高清不卡在线| 18成人在线视频| 久久久久久久久久久久电影| 91精品免费观看| 欧美日韩中文国产| 99re在线视频这里只有精品| 国产精品1区2区| 卡一卡二国产精品| 日韩av在线发布| 亚洲成人免费看| 怡红院av一区二区三区| 中文字幕一区二| 国产精品少妇自拍| 久久久精品2019中文字幕之3| 欧美日韩精品欧美日韩精品一综合| 成人美女在线观看| 顶级嫩模精品视频在线看| 久久99久久久欧美国产| 麻豆91在线观看| 日韩精品免费视频人成| 亚洲.国产.中文慕字在线| 亚洲综合色噜噜狠狠| 亚洲男人的天堂网| 一区二区在线电影| 亚洲色图19p| 亚洲色图欧美偷拍| 一区二区三区四区不卡视频| 亚洲美女淫视频| 亚洲激情在线播放| 亚洲精品乱码久久久久久黑人| 亚洲欧洲一区二区在线播放| 综合中文字幕亚洲| 一二三区精品视频| 亚洲国产色一区| 日韩av在线播放中文字幕| 日欧美一区二区| 免费精品99久久国产综合精品| 日本vs亚洲vs韩国一区三区二区 | 日韩综合小视频| 婷婷成人激情在线网| 日韩成人伦理电影在线观看| 奇米影视一区二区三区| 韩国av一区二区三区| 国产成人午夜99999| www.欧美日韩国产在线| 在线亚洲人成电影网站色www| 欧美午夜免费电影| 日韩欧美高清在线| 久久久精品影视| 国产精品白丝在线| 亚洲成人av中文| 麻豆91小视频| www.欧美.com| 欧美视频中文字幕| 精品久久国产老人久久综合| 欧美国产视频在线| 亚洲愉拍自拍另类高清精品| 蜜桃av噜噜一区| 成人免费视频视频| 中文字幕在线观看不卡| 1区2区3区欧美| 日本三级亚洲精品| 欧美性大战久久久久久久蜜臀| 在线免费观看日韩欧美| 欧美色电影在线| 欧美va亚洲va国产综合| 欧美一区二区精品在线| 欧美日韩一二三区| 91麻豆精品国产无毒不卡在线观看| 国产精品久久久久9999吃药| 亚洲精品一线二线三线| 亚洲天堂久久久久久久| 日韩国产成人精品| 中文字幕日韩精品一区| 成人成人成人在线视频| 99精品视频在线免费观看| 久久免费视频一区| 亚洲综合色噜噜狠狠| 日韩精品电影一区亚洲| 欧美日韩国产高清一区二区| 91麻豆精品在线观看| 国产精品国产三级国产普通话三级 | 日本成人超碰在线观看| 91视视频在线观看入口直接观看www| 亚洲精品一区二区三区福利| 狠狠色丁香久久婷婷综合_中| 日韩免费看的电影| 精品亚洲国内自在自线福利| 亚洲精品一区二区三区影院| 成人激情动漫在线观看| 久久久久久久久久久久久久久99 | 91色视频在线| 午夜激情一区二区三区| 欧美大白屁股肥臀xxxxxx| 紧缚捆绑精品一区二区| 国产日韩三级在线| 欧美视频精品在线| 韩国女主播成人在线观看| 中文字幕精品一区二区精品绿巨人| 色综合久久综合| 亚洲在线视频网站| 国产精品一区二区在线播放| 日韩欧美在线影院| 国产99久久精品| 亚洲自拍偷拍综合| 欧美综合在线视频| 男女男精品视频| 中文字幕在线免费不卡| 91黄色激情网站| 麻豆精品一区二区三区| 亚洲精品自拍动漫在线| 91亚洲精华国产精华精华液| 日韩一区二区三区免费观看| 日韩精品一级中文字幕精品视频免费观看 | 亚洲精品日韩专区silk| 欧美日韩久久久久久| 国内精品在线播放| 一区二区三区在线视频免费| 日韩欧美成人一区| 欧美三日本三级三级在线播放| 美女性感视频久久| 国产精品一级在线| 亚洲欧美日韩国产综合| 精品国产乱码久久久久久久久| 成人av网站在线观看| 九九视频精品免费| 日本麻豆一区二区三区视频| 亚洲图片欧美色图| 亚洲欧洲无码一区二区三区| 在线播放中文一区| 欧美一区二区三区成人| 欧美日韩一区二区欧美激情| 另类小说色综合网站| 91精品国产色综合久久不卡电影| kk眼镜猥琐国模调教系列一区二区| 经典三级在线一区| 日本美女视频一区二区| 日韩精品亚洲一区二区三区免费| 亚洲色图一区二区三区| 亚洲色图.com| 九九精品视频在线看| 亚洲在线中文字幕| 天堂av在线一区| 风间由美性色一区二区三区| 欧美精品一区二区三区四区 | 337p日本欧洲亚洲大胆精品| 欧美一区二区在线免费播放| 欧美丰满嫩嫩电影| 欧美成人a∨高清免费观看| 欧美一区二区视频在线观看2022| 国产综合色在线| 91蜜桃免费观看视频| 日韩国产精品91| 亚洲综合在线视频| 视频一区二区国产| 日韩不卡一区二区| 亚洲国产aⅴ天堂久久| 一区二区三区四区蜜桃| 日本最新不卡在线| 在线免费av一区| 亚洲国产精品ⅴa在线观看| 亚洲免费视频成人| 99久久99久久综合| 国产视频一区在线播放| 久久精品国产一区二区| 色婷婷av一区二区三区软件| 国产精品区一区二区三区| 亚洲国产精品精华液2区45| 亚洲综合色在线| 91极品视觉盛宴| 亚洲妇女屁股眼交7| 不卡在线观看av| 中文字幕一区二区三区av| www.av亚洲| 亚洲一区二区三区自拍| 色999日韩国产欧美一区二区| 欧美一区二区视频观看视频| 亚洲成人黄色小说| 欧美日韩中文精品| 亚洲va欧美va国产va天堂影院| 在线观看网站黄不卡| 亚洲国产欧美另类丝袜|