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

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

?? dbglcd.c

?? 第二屆飛思卡爾杯智能車大賽
?? C
字號:
/*
 * Copyright (c) 1998, Xiongfei Guo, Shanghai Second Polytechnic University 
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * 
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of the Shanghai Second Polytechnic University nor the
 *       names of its contributors may be used to endorse or promote products
 *       derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

// LCD模塊

#include "includes.h"

/* LCD 的端口引腳定義 */
#define RS PTJ_PTJ1
#define RW PTJ_PTJ0
#define EN PORTK_BIT4
#define DATA PORTB

/* 常用延時(shí), 基于24MHz的總線頻率 */
#define ENBIT (0x02)
#define DELAY40US (2000L)
#define DELAY4_1MS (220000L)
#define DELAY100US (5000L)
#define LCDWIDTH (8)

/* 函數(shù)定義 */
#define putchar(x) { writeLcd4((x), 1);}


/* 延時(shí)函數(shù) */
void lcdDelay(unsigned long constant) {
    volatile unsigned long counter;

    for (counter = constant; counter > 0; counter--);
} // end lcdDelay()


/* Write LCD module in 8-bit mode
 * Inputs:
 *  data: to be written, lower 4 bits are ignored
 *  rs: register select, only bit 0 is significant
 * Handles the shifting into place and the EN pulsing
 * This is only used at the start of the init sequence
 */
void writeLcd8(INT8U data, INT8U rs, INT8U rw) {
    unsigned char temp;

    /* shift upper nibble to data bits in port K */
    RS = rs;
    RW = rw;
    temp = (data);

    /* 產(chǎn)生使能脈沖, 下降延觸發(fā) */
    EN = 1;
    DATA = temp;
    EN = 0;
    EN = 1;

    /* 等待完成 */
    lcdDelay(DELAY40US);
} // end writeLcd8()


/* Write LCD module in 4-bit mode
 * Inputs:
 *  data: to be written, 8 bits are significant
 *  rs: register select, only bit 0 is significant
 * Does two consecutive writes, high nibble, then low
 * Handles the shifting into place and the EN pulsing
 * This is can be used at any time (init and display)
 */
void writeLcd4(unsigned char data, unsigned char rs) {
    unsigned char hi, lo;

    hi = ((data & 0xf0) );
    lo = ((data & 0x0f) << 4);
    RS = rs;

    /* do write pulses for upper, then lower nibbles */
    EN = 1;
    DATA = hi;
    EN = 0;
    EN = 1;

    EN = 1;
    DATA = lo;
    EN = 0;
    EN = 1;

    /* allow instruction to complete */
    lcdDelay(DELAY40US);
}

/* 初始化LCD */
void InitLCD(void) {
    /* initialise port */
    DDRB = 0xFF;
    DDRK_BIT4 = 1;
    DDRJ_DDRJ0 = 1;
    DDRJ_DDRJ1 = 1;
    //DDRK = 0xff;

    writeLcd8(0x30, 0 , 0);  // tell it once
    lcdDelay(DELAY4_1MS);
    writeLcd8(0x30, 0 , 0);  // tell it twice
    lcdDelay(DELAY100US);
    writeLcd8(0x30, 0 , 0);  // tell it thrice

    /* last write in 8-bit mode sets bus to 4 bit mode */
    writeLcd8(0x20, 0 , 0);

    /* Now we are in 4 bit mode, write upper/lower nibble */
    writeLcd4(0x28, 0); // last function set: 4-bit mode, 2 lines, 5x7 matrix
    writeLcd4(0x0c, 0); // display on, cursor off, blink off
    writeLcd4(0x01, 0); // display clear
    writeLcd4(0x06, 0); // cursor auto-increment, disable display shift
}

/*******************************************************************************
    itos()
    對itoa的一點(diǎn)延伸,增加了寬度控制和對齊方式, 輸入為有符號數(shù)
    n: 要轉(zhuǎn)換的數(shù)
    base: 基數(shù)
    width: 寬度
         < 0 左對齊
         > 0 右對齊
         = 0 代表不限制寬度

*******************************************************************************/
char * itos(INT16S n, INT16S base, INT16S width) {
    register char *p;       /* 字符指針 */
    register INT16S tmp;    /* 即做正負(fù)的標(biāo)志位, 也做長度的計(jì)數(shù)器 */
    static char buf[18];

    p = &buf[9];

    /* 記下正負(fù), tmp 的第八位為 1 */

    if (n < 0) {
        tmp = 0x81;
        n = -n;
    } else {
        tmp = 0;
    }

    if (n == 0) {
        *--p = '0';
        tmp++;
    } else {
        /* 轉(zhuǎn)換數(shù)字 */
        while (n > 0) {
            tmp++;
            *--p = "0123456789ABCDEF"[n % base];
            n /= base;
        }
    }

    /* 添加負(fù)號 */
    if ((tmp & 0x80) > 0) {
        *--p = '-';
        tmp &= 0xFF - 0x80;
    }

    if (tmp > _abs(width)) {
        buf[9] = '\0';
        return p;
    }

    /* 改變寬度 */
    if (width >= 0) {
        buf[9] = '\0';
        if (width > 0) {
            tmp = width - tmp;
            while (tmp--) {
                *--p = ' ';
            }
        }
    } else {
        tmp = 9 - (width + tmp);
        buf[tmp] = '\0';
        while (--tmp != 8) {
            buf[tmp] = ' ';
        }
    }

    return p;
}

/*******************************************************************************
    utos()
    對itoa的一點(diǎn)延伸,增加了寬度控制和對齊方式, 輸入為無符號數(shù)
    n: 要轉(zhuǎn)換的數(shù)
    base: 基數(shù)
    width: 寬度
         < 0 左對齊
         > 0 右對齊
         = 0 代表不限制寬度

*******************************************************************************/
char * utos(INT16U n, INT16S base, INT16S width) {
    register char *p;       /* 字符指針 */
    register INT16S tmp;    /* 長度的計(jì)數(shù)器 */
    static char buf[18];

    p = &buf[9];

    tmp = 0;

    if (n == 0) {
        *--p = '0';
        tmp++;
    } else {
        /* 轉(zhuǎn)換數(shù)字 */
        while (n > 0) {
            tmp++;
            *--p = "0123456789ABCDEF"[n % base];
            n /= base;
        }
    }

    if (tmp > width) {
        buf[9] = '\0';
        return p;
    }

    /* 改變寬度 */
    if (width >= 0) {
        buf[9] = '\0';
        if (width > 0) {
            tmp = width - tmp;
            while (tmp--) {
                *--p = ' ';
            }
        }
    } else {
        tmp = 9 - (width + tmp);
        buf[tmp] = '\0';
        while (--tmp != 8) {
            buf[tmp] = ' ';
        }
    }

    return p;
}

/******************************************************************************
    printl: print something on LCD
    printf 函數(shù)的重寫
    主要功能:
    %[[-]n](d|D) 10進(jìn)制
    %[[-]n](x|X) 16進(jìn)制
        d和x大小寫代表有符號/無符號數(shù)(小寫有符號)
        n可選代表輸出的寬度,前面加負(fù)號表示左對齊
        l|L代表16位數(shù),不加則代表8位數(shù)
    %[[-]n](s|S) 字符串輸出,n可選代表輸出的長度
    %c  單個(gè)字符輸出
******************************************************************************/
void printl(INT16U line, const char * fmt, ...) {
    va_list ap;
    int strlen(const char*);
    const char * s;
    char * p;
    INT16S d, flag, width = 0, justify = 1;
    INT8U instruction;

    /* Set address in LCD module */
    if ( 1 == line) {
        instruction = 0xc0; // write bottom line
    } else {
        instruction = 0x80; // write top line
    }

    writeLcd4( instruction, 0);


    va_start(ap, fmt);

    while (*fmt) {
        if (*fmt != '%') {
            putchar(*fmt++);
            continue;
        }
        flag = 1;
        while (flag--) {
            if (*(fmt+1) <= '9' && *(fmt+1) >= '0') {
                width = *++fmt - '0';
            }
            switch (*++fmt) {
            case '-':
                justify = -1;
                width = *++fmt - '0';
                flag++;
                break;
            case 's':
                s = va_arg(ap, const char *);
                width = width - strlen(s);
                if (justify == -1 && width > 0) {
                    while (width--) {
                        putchar(' ');
                    }
                }
                for ( ; *s; s++) {
                    putchar(*s);
                }
                if (justify == 1 && width > 0) {
                    while (width--) {
                        putchar(' ');
                    }
                }
                width = 0;
                justify = 1;
                break;
            case 'd':
                d = va_arg(ap, INT16S);
                p = itos(d, 10, width * justify );
                for (; *p; p++) {
                    putchar(*p);
                }
                width = 0;
                justify = 1;
                break;

            case 'D':
                d = va_arg(ap, INT16U);
                p = utos((INT16U)d, 10, width * justify);
                for (; *p; p++) {
                    putchar(*p);
                }
                width = 0;
                justify = 1;
                break;
            case 'x':
                d = va_arg(ap, INT16S);
                p = itos(d, 16, width * justify);
                for (; *p; p++) {
                    putchar(*p);
                }
                width = 0;
                justify = 1;
                break;
            case 'X':
                d = va_arg(ap, INT16U);
                p = utos((INT16U)d, 16, width * justify);
                for (; *p; p++) {
                    putchar(*p);
                }
                width = 0;
                justify = 1;
                break;
                /* Add other specifiers here... */
            default:
                putchar(*fmt);
                break;
            }
        }
        fmt++;
    }
    //va_end(ap);
}

void ClearLCD(void) {
    writeLcd4(0x01, 0);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区四区的| 日韩av一区二区在线影视| 欧美一区二区福利在线| 国产精品一二三| 婷婷夜色潮精品综合在线| 久久久www免费人成精品| 欧美性生活大片视频| 国产制服丝袜一区| 视频在线观看91| 国产精品欧美一区二区三区| 日韩欧美国产三级| 在线视频一区二区免费| 国产激情一区二区三区| 蜜臀av亚洲一区中文字幕| 中文字幕一区二| 2020国产精品| 日韩午夜激情电影| 欧美日韩一本到| 一本高清dvd不卡在线观看| 国产揄拍国内精品对白| 青青草原综合久久大伊人精品优势| 国产精品久久毛片av大全日韩| 欧美成人女星排名| 欧美久久一二区| 91福利视频网站| 91免费观看在线| av中文字幕一区| 成人黄色一级视频| 国产一区二区不卡老阿姨| 人禽交欧美网站| 亚洲电影一级片| 亚洲综合一区二区三区| 亚洲欧洲av一区二区三区久久| 久久久久久久久伊人| 欧美成人官网二区| 欧美一级精品大片| 在线成人免费视频| 欧美精品久久一区| 欧美肥妇毛茸茸| 日本丰满少妇一区二区三区| 99久久国产综合精品麻豆| 成人97人人超碰人人99| 99久久婷婷国产综合精品电影 | 日韩黄色免费电影| 亚洲国产日韩在线一区模特| 亚洲一区二区三区国产| 亚洲国产精品天堂| 亚洲.国产.中文慕字在线| 午夜电影网一区| 日韩精品成人一区二区三区 | 久久国产精品第一页| 日韩精品福利网| 另类人妖一区二区av| 美女性感视频久久| 国内一区二区在线| 粉嫩欧美一区二区三区高清影视| 国产成人精品影院| 一本到不卡免费一区二区| 91久久精品国产91性色tv| 欧美写真视频网站| 日韩一区二区三区免费看| 精品国产一区久久| 中文字幕中文字幕在线一区| 亚洲黄色小视频| 日本中文字幕一区二区视频| 极品瑜伽女神91| 成人福利在线看| 欧美影院一区二区| 欧美成人猛片aaaaaaa| 欧美国产日韩亚洲一区| 一区二区三区鲁丝不卡| 日本不卡视频在线| 国内精品久久久久影院一蜜桃| 国产麻豆精品在线| 日韩和的一区二区| 免播放器亚洲一区| 国产精品一区二区三区乱码| 国产福利一区二区三区| 丁香婷婷综合色啪| 国产成人在线色| 欧美亚洲一区二区在线观看| 欧美日韩国产综合一区二区| 欧美一区二区播放| 亚洲精品一区二区三区四区高清| 国产日本欧洲亚洲| 亚洲精品日日夜夜| 天天综合色天天| 亚洲福利视频三区| 国产激情视频一区二区三区欧美 | 色综合天天综合色综合av| 欧美怡红院视频| 欧美一区二区在线免费观看| 久久综合一区二区| ...xxx性欧美| 一区二区三区四区中文字幕| 国内成人精品2018免费看| av一本久道久久综合久久鬼色| 日本电影亚洲天堂一区| 日韩一级二级三级精品视频| 国产精品五月天| 婷婷成人综合网| 成人自拍视频在线观看| 欧美日韩视频不卡| 久久久久国产精品厨房| 亚洲综合丝袜美腿| 国产一区二区三区不卡在线观看| 99国产精品久久久久久久久久久| 欧美一区日本一区韩国一区| 国产精品美女久久久久aⅴ| 天天影视网天天综合色在线播放| 另类欧美日韩国产在线| 678五月天丁香亚洲综合网| 中文字幕精品一区二区精品绿巨人| 亚洲一区二区三区激情| 美女视频一区二区| 99久久国产综合精品女不卡| 欧美白人最猛性xxxxx69交| 亚洲欧美日韩国产成人精品影院 | 久久久久久久久久美女| 最新日韩av在线| 久久精品国产久精国产| 色8久久精品久久久久久蜜| 久久免费视频一区| 日日嗨av一区二区三区四区| 99精品国产91久久久久久 | 久久先锋资源网| 亚洲第一久久影院| 色香蕉久久蜜桃| 日韩欧美电影一区| 舔着乳尖日韩一区| 色猫猫国产区一区二在线视频| 久久久天堂av| 久久国产三级精品| 成人免费看视频| 中文字幕中文在线不卡住| 国产成人精品网址| 欧美一区二区福利在线| 亚洲精选免费视频| 99vv1com这只有精品| 国产午夜精品久久| 日本亚洲三级在线| 日韩欧美国产综合在线一区二区三区| 亚洲国产精品天堂| 欧洲生活片亚洲生活在线观看| 国产精品欧美久久久久无广告 | 国产激情一区二区三区桃花岛亚洲| 欧美美女喷水视频| 一区二区三区在线视频观看| 91丨porny丨中文| 欧美一级高清片| 国模一区二区三区白浆| 日韩欧美国产综合| 久久99精品久久只有精品| 91精品国产色综合久久不卡蜜臀 | 国产综合久久久久久鬼色| 67194成人在线观看| 久久 天天综合| 欧美一区二区国产| 蜜臂av日日欢夜夜爽一区| 欧美一区二区三区四区视频| 日韩成人午夜电影| 欧美日韩一区二区三区四区五区 | 在线精品视频免费播放| 亚洲大片免费看| 欧美精品777| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美丰满美乳xxx高潮www| 丝袜诱惑亚洲看片| 日韩丝袜美女视频| 福利电影一区二区三区| 综合激情成人伊人| 在线观看亚洲a| 日韩和的一区二区| 亚洲精品在线观看视频| 毛片一区二区三区| www成人在线观看| www.亚洲在线| 亚洲自拍另类综合| 日韩欧美国产一区在线观看| 国产一区视频在线看| 久久久久国色av免费看影院| 欧美在线小视频| 免费成人你懂的| 日本一区二区免费在线 | 日韩欧美一级二级三级久久久| 九九国产精品视频| 久久精品欧美一区二区三区不卡| 一本色道亚洲精品aⅴ| 丝袜诱惑制服诱惑色一区在线观看| 日韩亚洲欧美一区二区三区| 风流少妇一区二区| 亚洲福利一区二区三区| 日韩免费性生活视频播放| 色综合久久88色综合天天6| 麻豆一区二区三区| 国产精品美女www爽爽爽| 欧美三级电影在线看| 国产一区 二区| 亚洲乱码中文字幕| 国产精品少妇自拍|