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

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

?? osram96x16.c

?? FreeRTOS is a portable, open source, mini Real Time Kernel - a free to download and royalty free RTO
?? C
?? 第 1 頁 / 共 2 頁
字號:
//*****************************************************************************
//
// osram96x16.c - Driver for the OSRAM 96x16 graphical OLED display.
//
// Copyright (c) 2006 Luminary Micro, Inc.  All rights reserved.
//
// Software License Agreement
//
// Luminary Micro, Inc. (LMI) is supplying this software for use solely and
// exclusively on LMI's Stellaris Family of microcontroller products.
//
// The software is owned by LMI and/or its suppliers, and is protected under
// applicable copyright laws.  All rights are reserved.  Any use in violation
// of the foregoing restrictions may subject the user to criminal sanctions
// under applicable laws, as well as to civil liability for the breach of the
// terms and conditions of this license.
//
// THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED
// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
//
// This is part of revision 816 of the Stellaris Driver Library.
//
//*****************************************************************************

//*****************************************************************************
//
//! \addtogroup ev_lm3s811_api
//! @{
//
//*****************************************************************************

#include "hw_i2c.h"
#include "hw_memmap.h"
#include "hw_sysctl.h"
#include "hw_types.h"
#include "src/debug.h"
#include "src/gpio.h"
#include "src/i2c.h"
#include "src/sysctl.h"
#include "osram96x16.h"

extern void I2CMasterInitExpClk(unsigned long ulBase, unsigned long ulI2CClk,  tBoolean bFast);
//*****************************************************************************
//
// The I2C slave address of the SSD0303 controller on the OLED display.
//
//*****************************************************************************
#define SSD0303_ADDR            0x3d

//*****************************************************************************
//
// A 5x7 font (in a 6x8 cell, where the sixth column is omitted from this
// table) for displaying text on the OLED display.  The data is organized as
// bytes from the left column to the right column, with each byte containing
// the top row in the LSB and the bottom row in the MSB.
//
//*****************************************************************************
static const unsigned char g_pucFont[95][5] =
{
    { 0x00, 0x00, 0x00, 0x00, 0x00 }, // " "
    { 0x00, 0x00, 0x4f, 0x00, 0x00 }, // !
    { 0x00, 0x07, 0x00, 0x07, 0x00 }, // "
    { 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #
    { 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $
    { 0x23, 0x13, 0x08, 0x64, 0x62 }, // %
    { 0x36, 0x49, 0x55, 0x22, 0x50 }, // &
    { 0x00, 0x05, 0x03, 0x00, 0x00 }, // '
    { 0x00, 0x1c, 0x22, 0x41, 0x00 }, // (
    { 0x00, 0x41, 0x22, 0x1c, 0x00 }, // )
    { 0x14, 0x08, 0x3e, 0x08, 0x14 }, // *
    { 0x08, 0x08, 0x3e, 0x08, 0x08 }, // +
    { 0x00, 0x50, 0x30, 0x00, 0x00 }, // ,
    { 0x08, 0x08, 0x08, 0x08, 0x08 }, // -
    { 0x00, 0x60, 0x60, 0x00, 0x00 }, // .
    { 0x20, 0x10, 0x08, 0x04, 0x02 }, // /
    { 0x3e, 0x51, 0x49, 0x45, 0x3e }, // 0
    { 0x00, 0x42, 0x7f, 0x40, 0x00 }, // 1
    { 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2
    { 0x21, 0x41, 0x45, 0x4b, 0x31 }, // 3
    { 0x18, 0x14, 0x12, 0x7f, 0x10 }, // 4
    { 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5
    { 0x3c, 0x4a, 0x49, 0x49, 0x30 }, // 6
    { 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7
    { 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8
    { 0x06, 0x49, 0x49, 0x29, 0x1e }, // 9
    { 0x00, 0x36, 0x36, 0x00, 0x00 }, // :
    { 0x00, 0x56, 0x36, 0x00, 0x00 }, // ;
    { 0x08, 0x14, 0x22, 0x41, 0x00 }, // <
    { 0x14, 0x14, 0x14, 0x14, 0x14 }, // =
    { 0x00, 0x41, 0x22, 0x14, 0x08 }, // >
    { 0x02, 0x01, 0x51, 0x09, 0x06 }, // ?
    { 0x32, 0x49, 0x79, 0x41, 0x3e }, // @
    { 0x7e, 0x11, 0x11, 0x11, 0x7e }, // A
    { 0x7f, 0x49, 0x49, 0x49, 0x36 }, // B
    { 0x3e, 0x41, 0x41, 0x41, 0x22 }, // C
    { 0x7f, 0x41, 0x41, 0x22, 0x1c }, // D
    { 0x7f, 0x49, 0x49, 0x49, 0x41 }, // E
    { 0x7f, 0x09, 0x09, 0x09, 0x01 }, // F
    { 0x3e, 0x41, 0x49, 0x49, 0x7a }, // G
    { 0x7f, 0x08, 0x08, 0x08, 0x7f }, // H
    { 0x00, 0x41, 0x7f, 0x41, 0x00 }, // I
    { 0x20, 0x40, 0x41, 0x3f, 0x01 }, // J
    { 0x7f, 0x08, 0x14, 0x22, 0x41 }, // K
    { 0x7f, 0x40, 0x40, 0x40, 0x40 }, // L
    { 0x7f, 0x02, 0x0c, 0x02, 0x7f }, // M
    { 0x7f, 0x04, 0x08, 0x10, 0x7f }, // N
    { 0x3e, 0x41, 0x41, 0x41, 0x3e }, // O
    { 0x7f, 0x09, 0x09, 0x09, 0x06 }, // P
    { 0x3e, 0x41, 0x51, 0x21, 0x5e }, // Q
    { 0x7f, 0x09, 0x19, 0x29, 0x46 }, // R
    { 0x46, 0x49, 0x49, 0x49, 0x31 }, // S
    { 0x01, 0x01, 0x7f, 0x01, 0x01 }, // T
    { 0x3f, 0x40, 0x40, 0x40, 0x3f }, // U
    { 0x1f, 0x20, 0x40, 0x20, 0x1f }, // V
    { 0x3f, 0x40, 0x38, 0x40, 0x3f }, // W
    { 0x63, 0x14, 0x08, 0x14, 0x63 }, // X
    { 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y
    { 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z
    { 0x00, 0x7f, 0x41, 0x41, 0x00 }, // [
    { 0x02, 0x04, 0x08, 0x10, 0x20 }, // "\"
    { 0x00, 0x41, 0x41, 0x7f, 0x00 }, // ]
    { 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^
    { 0x40, 0x40, 0x40, 0x40, 0x40 }, // _
    { 0x00, 0x01, 0x02, 0x04, 0x00 }, // `
    { 0x20, 0x54, 0x54, 0x54, 0x78 }, // a
    { 0x7f, 0x48, 0x44, 0x44, 0x38 }, // b
    { 0x38, 0x44, 0x44, 0x44, 0x20 }, // c
    { 0x38, 0x44, 0x44, 0x48, 0x7f }, // d
    { 0x38, 0x54, 0x54, 0x54, 0x18 }, // e
    { 0x08, 0x7e, 0x09, 0x01, 0x02 }, // f
    { 0x0c, 0x52, 0x52, 0x52, 0x3e }, // g
    { 0x7f, 0x08, 0x04, 0x04, 0x78 }, // h
    { 0x00, 0x44, 0x7d, 0x40, 0x00 }, // i
    { 0x20, 0x40, 0x44, 0x3d, 0x00 }, // j
    { 0x7f, 0x10, 0x28, 0x44, 0x00 }, // k
    { 0x00, 0x41, 0x7f, 0x40, 0x00 }, // l
    { 0x7c, 0x04, 0x18, 0x04, 0x78 }, // m
    { 0x7c, 0x08, 0x04, 0x04, 0x78 }, // n
    { 0x38, 0x44, 0x44, 0x44, 0x38 }, // o
    { 0x7c, 0x14, 0x14, 0x14, 0x08 }, // p
    { 0x08, 0x14, 0x14, 0x18, 0x7c }, // q
    { 0x7c, 0x08, 0x04, 0x04, 0x08 }, // r
    { 0x48, 0x54, 0x54, 0x54, 0x20 }, // s
    { 0x04, 0x3f, 0x44, 0x40, 0x20 }, // t
    { 0x3c, 0x40, 0x40, 0x20, 0x7c }, // u
    { 0x1c, 0x20, 0x40, 0x20, 0x1c }, // v
    { 0x3c, 0x40, 0x30, 0x40, 0x3c }, // w
    { 0x44, 0x28, 0x10, 0x28, 0x44 }, // x
    { 0x0c, 0x50, 0x50, 0x50, 0x3c }, // y
    { 0x44, 0x64, 0x54, 0x4c, 0x44 }, // z
    { 0x00, 0x08, 0x36, 0x41, 0x00 }, // {
    { 0x00, 0x00, 0x7f, 0x00, 0x00 }, // |
    { 0x00, 0x41, 0x36, 0x08, 0x00 }, // }
    { 0x02, 0x01, 0x02, 0x04, 0x02 }, // ~
};

//*****************************************************************************
//
// The sequence of commands used to initialize the SSD0303 controller.  Each
// command is described as follows:  there is a byte specifying the number of
// bytes in the I2C transfer, followed by that many bytes of command data.
//
//*****************************************************************************
static const unsigned char g_pucOSRAMInit[] =
{
    //
    // Turn off the panel
    //
    0x02, 0x80, 0xae,

    //
    // Set lower column address
    //
    0x02, 0x80, 0x04,

    //
    // Set higher column address
    //
    0x02, 0x80, 0x12,

    //
    // Set contrast control register
    //
    0x04, 0x80, 0x81, 0x80, 0x2b,

    //
    // Set segment re-map
    //
    0x02, 0x80, 0xa1,

    //
    // Set display start line
    //
    0x02, 0x80, 0x40,

    //
    // Set display offset
    //
    0x04, 0x80, 0xd3, 0x80, 0x00,

    //
    // Set multiplex ratio
    //
    0x04, 0x80, 0xa8, 0x80, 0x0f,

    //
    // Set the display to normal mode
    //
    0x02, 0x80, 0xa4,

    //
    // Non-inverted display
    //
    0x02, 0x80, 0xa6,

    //
    // Set the page address
    //
    0x02, 0x80, 0xb0,

    //
    // Set COM output scan direction
    //
    0x02, 0x80, 0xc8,

    //
    // Set display clock divide ratio/oscillator frequency
    //
    0x04, 0x80, 0xd5, 0x80, 0x72,

    //
    // Enable mono mode
    //
    0x04, 0x80, 0xd8, 0x80, 0x00,

    //
    // Set pre-charge period
    //
    0x04, 0x80, 0xd9, 0x80, 0x22,

    //
    // Set COM pins hardware configuration
    //
    0x04, 0x80, 0xda, 0x80, 0x12,

    //
    // Set VCOM deslect level
    //
    0x04, 0x80, 0xdb, 0x80, 0x0f,

    //
    // Set DC-DC on
    //
    0x04, 0x80, 0xad, 0x80, 0x8b,

    //
    // Turn on the panel
    //
    0x02, 0x80, 0xaf,
};

//*****************************************************************************
//
// The inter-byte delay required by the SSD0303 OLED controller.
//
//*****************************************************************************
static unsigned long g_ulDelay;

//*****************************************************************************
//
//! \internal
//!
//! Provide a small delay.
//!
//! \param ulCount is the number of delay loop iterations to perform.
//!
//! Since the SSD0303 controller needs a delay between bytes written to it over
//! the I2C bus, this function provides a means of generating that delay.  It
//! is written in assembly to keep the delay consistent across tool chains,
//! avoiding the need to tune the delay based on the tool chain in use.
//!
//! \return None.
//
//*****************************************************************************
#if defined(ewarm)
static void
OSRAMDelay(unsigned long ulCount)
{
    __asm("    subs    r0, #1\n"
          "    bne     OSRAMDelay\n"
          "    bx      lr");
}
#endif
#if defined(gcc)
static void __attribute__((naked))
OSRAMDelay(unsigned long ulCount)
{
    __asm("    subs    r0, #1\n"
          "    bne     OSRAMDelay\n"
          "    bx      lr");
}
#endif
#if defined(rvmdk) || defined(__ARMCC_VERSION)
__asm void
OSRAMDelay(unsigned long ulCount)
{
    subs    r0, #1;
    bne     OSRAMDelay;
    bx      lr;
}
#endif

//*****************************************************************************
//
//! \internal
//!
//! Start a transfer to the SSD0303 controller.
//!
//! \param ucChar is the first byte to be written to the controller.
//!
//! This function will start a transfer to the SSD0303 controller via the I2C
//! bus.
//!
//! The data is written in a polled fashion; this function will not return
//! until the byte has been written to the controller.
//!
//! \return None.
//
//*****************************************************************************
static void
OSRAMWriteFirst(unsigned char ucChar)
{
    //
    // Set the slave address.
    //
    I2CMasterSlaveAddrSet(I2C_MASTER_BASE, SSD0303_ADDR, false);

    //
    // Write the first byte to the controller.
    //
    I2CMasterDataPut(I2C_MASTER_BASE, ucChar);

    //
    // Start the transfer.
    //
    I2CMasterControl(I2C_MASTER_BASE, I2C_MASTER_CMD_BURST_SEND_START);
}

//*****************************************************************************
//
//! \internal
//!
//! Write a byte to the SSD0303 controller.
//!
//! \param ucChar is the byte to be transmitted to the controller.
//!
//! This function continues a transfer to the SSD0303 controller by writing
//! another byte over the I2C bus.  This must only be called after calling
//! OSRAMWriteFirst(), but before calling OSRAMWriteFinal().
//!
//! The data is written in a polled faashion; this function will not return
//! until the byte has been written to the controller.
//!
//! \return None.
//
//*****************************************************************************
static void
OSRAMWriteByte(unsigned char ucChar)
{
    //
    // Wait until the current byte has been transferred.
    //
    while(I2CMasterIntStatus(I2C_MASTER_BASE, false) == 0)
    {
    }

    //
    // Provide the required inter-byte delay.
    //
    OSRAMDelay(g_ulDelay);

    //
    // Write the next byte to the controller.
    //
    I2CMasterDataPut(I2C_MASTER_BASE, ucChar);

    //
    // Continue the transfer.
    //
    I2CMasterControl(I2C_MASTER_BASE, I2C_MASTER_CMD_BURST_SEND_CONT);
}

//*****************************************************************************
//
//! \internal
//!
//! Write a sequence of bytes to the SSD0303 controller.
//!
//! This function continues a transfer to the SSD0303 controller by writing a
//! sequence of bytes over the I2C bus.  This must only be called after calling
//! OSRAMWriteFirst(), but before calling OSRAMWriteFinal().
//!
//! The data is written in a polled fashion; this function will not return
//! until the entire byte sequence has been written to the controller.
//!
//! \return None.
//
//*****************************************************************************
static void
OSRAMWriteArray(const unsigned char *pucBuffer, unsigned long ulCount)
{
    //
    // Loop while there are more bytes left to be transferred.
    //
    while(ulCount != 0)
    {
        //
        // Wait until the current byte has been transferred.
        //
        while(I2CMasterIntStatus(I2C_MASTER_BASE, false) == 0)
        {
        }

        //
        // Provide the required inter-byte delay.
        //
        OSRAMDelay(g_ulDelay);

        //
        // Write the next byte to the controller.
        //
        I2CMasterDataPut(I2C_MASTER_BASE, *pucBuffer++);
        ulCount--;

        //
        // Continue the transfer.
        //
        I2CMasterControl(I2C_MASTER_BASE, I2C_MASTER_CMD_BURST_SEND_CONT);
    }
}

//*****************************************************************************
//
//! \internal
//!
//! Finish a transfer to the SSD0303 controller.
//!
//! \param ucChar is the final byte to be written to the controller.
//!
//! This function will finish a transfer to the SSD0303 controller via the I2C
//! bus.  This must only be called after calling OSRAMWriteFirst().
//!
//! The data is written in a polled fashion; this function will not return
//! until the byte has been written to the controller.
//!
//! \return None.
//
//*****************************************************************************
static void
OSRAMWriteFinal(unsigned char ucChar)
{
    //
    // Wait until the current byte has been transferred.
    //
    while(I2CMasterIntStatus(I2C_MASTER_BASE, false) == 0)
    {
    }

    //
    // Provide the required inter-byte delay.
    //
    OSRAMDelay(g_ulDelay);

    //

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本大道久久a久久精品综合| 99在线精品观看| 亚洲狠狠丁香婷婷综合久久久| 国产欧美日韩三级| 精品久久免费看| 精品国产精品网麻豆系列| 日韩欧美一二三四区| 日韩欧美在线不卡| 欧美成人综合网站| 精品久久人人做人人爽| 亚洲精品在线一区二区| 91精品在线免费观看| 777xxx欧美| 欧美一级欧美三级在线观看 | 精品国产91乱码一区二区三区| 欧美日韩免费视频| 欧美日韩一区二区在线观看| 91精品国产福利在线观看| 这里只有精品电影| 日韩午夜精品视频| 欧美刺激脚交jootjob| 国产亚洲婷婷免费| 国产精品网站在线播放| 亚洲欧洲三级电影| 91浏览器在线视频| 国产suv精品一区二区三区| 免费成人小视频| 全部av―极品视觉盛宴亚洲| 亚洲综合男人的天堂| 国产欧美日韩麻豆91| 日韩免费电影一区| 日韩精品一区二区三区在线观看| 欧美日韩在线观看一区二区 | 国产成人在线影院| 国产裸体歌舞团一区二区| 成人午夜视频免费看| 色综合久久久久综合| 欧美精品一卡二卡| 日韩欧美专区在线| 亚洲欧美日韩久久| 免费不卡在线观看| 国产不卡视频在线播放| 色偷偷成人一区二区三区91| 在线观看91av| 国产欧美一区二区精品性色超碰| 亚洲欧洲制服丝袜| 美脚の诱脚舐め脚责91 | 麻豆国产精品官网| 岛国精品在线观看| 欧美中文字幕一区| 精品国产制服丝袜高跟| 亚洲人成影院在线观看| 美女视频黄 久久| 9i在线看片成人免费| 欧美另类变人与禽xxxxx| 久久久不卡网国产精品一区| 夜夜嗨av一区二区三区| 国产精一区二区三区| 欧美影院精品一区| 欧美激情一区不卡| 久久精品国产精品亚洲精品| 91成人看片片| 中文字幕av不卡| 蜜臀av国产精品久久久久| 成人av网站在线| 日韩美女主播在线视频一区二区三区| 日韩美女精品在线| 狠狠狠色丁香婷婷综合激情| 91福利区一区二区三区| 国产肉丝袜一区二区| 天堂午夜影视日韩欧美一区二区| 不卡影院免费观看| 精品久久久久香蕉网| 亚洲成av人片在线观看无码| 成人app在线| 精品伦理精品一区| 亚洲精品伦理在线| 久久国产夜色精品鲁鲁99| 91一区在线观看| 日韩三区在线观看| 国产亚洲一二三区| 亚洲6080在线| av一区二区不卡| 欧美mv日韩mv| 亚洲资源中文字幕| 成人av在线观| 91精品国产综合久久香蕉的特点| 一区二区三区产品免费精品久久75| 麻豆久久久久久| 欧洲色大大久久| 中文字幕av一区二区三区高 | 亚洲一区二区免费视频| 国内精品久久久久影院一蜜桃| 日本高清不卡在线观看| 日本一区二区三级电影在线观看| 全部av―极品视觉盛宴亚洲| 91国内精品野花午夜精品| 国产午夜亚洲精品理论片色戒 | 亚洲日本电影在线| 九九精品视频在线看| 色94色欧美sute亚洲线路一ni| 久久精品欧美一区二区三区不卡| 蜜桃av噜噜一区二区三区小说| 欧美在线你懂得| 亚洲视频 欧洲视频| 成人性生交大片免费看在线播放| 日韩欧美一区二区视频| 青青草视频一区| 777色狠狠一区二区三区| 一区二区三区av电影| 成人国产精品免费| 久久精品视频网| 国产在线看一区| 日韩精品一区二区三区蜜臀| 国产美女精品在线| 国产婷婷色一区二区三区在线| 成人午夜精品在线| 亚洲天堂2016| 色欧美88888久久久久久影院| 一区二区在线观看免费视频播放| 成人动漫一区二区在线| 亚洲永久精品大片| 精品国产成人系列| 日本乱码高清不卡字幕| 国产一区二区精品久久| 国产成人精品1024| 在线观看日韩毛片| 亚洲主播在线播放| 欧美美女一区二区三区| 午夜精品123| 欧美精品 日韩| 美女视频网站久久| 26uuu久久综合| 国产毛片精品国产一区二区三区| 久久久99精品免费观看| 国产精品99久| 欧美经典一区二区| aaa亚洲精品| 首页综合国产亚洲丝袜| 精品盗摄一区二区三区| 丁香网亚洲国际| 国产精品免费aⅴ片在线观看| 欧美日韩中文精品| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | av动漫一区二区| 午夜欧美在线一二页| 亚洲视频一二三区| 国产欧美日韩另类一区| 欧美区视频在线观看| 综合久久久久久久| 丰满少妇久久久久久久| 成人免费在线播放视频| 91搞黄在线观看| 亚洲一区二区三区国产| 3d动漫精品啪啪一区二区竹菊| 麻豆精品视频在线观看免费| 亚洲国产电影在线观看| 欧美在线free| 久久99精品久久只有精品| 国产亚洲欧洲一区高清在线观看| 91一区在线观看| 一区二区三区丝袜| 久久久久久久精| 色欧美日韩亚洲| 久久国产尿小便嘘嘘| 亚洲同性同志一二三专区| 欧美精品在线观看播放| 粉嫩aⅴ一区二区三区四区 | 国产欧美精品一区aⅴ影院| 色偷偷久久人人79超碰人人澡 | 男女男精品视频| 中文字幕亚洲精品在线观看| 欧美乱熟臀69xxxxxx| 国产乱码一区二区三区| 亚洲国产一区二区三区青草影视| 久久一区二区三区四区| 欧美日韩一区二区三区高清 | 久久99久久99精品免视看婷婷| 自拍偷拍亚洲欧美日韩| 日韩视频免费直播| 日本精品裸体写真集在线观看| 国产乱对白刺激视频不卡| 亚洲成人福利片| 国产精品美女一区二区| 欧美日韩中文字幕一区二区| 色综合视频一区二区三区高清| 久久99国产精品久久| 免费成人av资源网| 亚洲自拍偷拍综合| 国产精品久久毛片a| 欧美一区二区三区免费观看视频 | 91黄视频在线| 国产不卡一区视频| 久久精品99国产精品日本| 亚洲自拍与偷拍| 亚洲小少妇裸体bbw| 亚洲三级免费观看| 国产欧美一区二区精品性色超碰| 日韩一区二区三区电影在线观看 | 久久亚洲精精品中文字幕早川悠里 |