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

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

?? osram96x16.c

?? FreeRTOS V4.2.1,增加了AVR32 UC3 和 LPC2368 的支持
?? 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"

//*****************************************************************************
//
// 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);

    //
    // Write the final byte to the controller.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久不卡网国产精品二区| 99久久er热在这里只有精品66| 欧美放荡的少妇| 亚洲一区欧美一区| 欧美久久久影院| 免费精品99久久国产综合精品| 日韩欧美精品在线视频| 国产一区二区0| 国产精品久久久久婷婷| 91美女片黄在线| 午夜精品一区二区三区免费视频| 88在线观看91蜜桃国自产| 精品一区二区三区视频在线观看 | 免费看欧美美女黄的网站| 欧美成人r级一区二区三区| 国产一区二区精品久久| 最新热久久免费视频| 欧美日韩卡一卡二| 国产尤物一区二区| 一区二区三区成人在线视频| 欧美一区二区播放| 成人丝袜18视频在线观看| 一区二区欧美视频| 久久综合九色综合欧美就去吻| 成人免费看片app下载| 亚洲成年人影院| 久久亚洲一区二区三区明星换脸| 色综合久久久久久久久| 蜜臀久久久99精品久久久久久| 一区二区中文视频| 日韩欧美在线综合网| 本田岬高潮一区二区三区| 日韩高清在线电影| 国产精品你懂的在线欣赏| 欧美精品18+| 成人高清免费观看| 久久国产精品色婷婷| 亚洲伦理在线精品| 久久久久久久久久久电影| 欧美性videosxxxxx| 国产成人亚洲综合a∨猫咪| 午夜精品爽啪视频| 国产精品二区一区二区aⅴ污介绍| 制服丝袜成人动漫| 91国模大尺度私拍在线视频| 国产成人在线色| 男男成人高潮片免费网站| 精品免费视频一区二区| 久久亚洲捆绑美女| 国产精品网友自拍| 不卡区在线中文字幕| 日精品一区二区三区| 久久疯狂做爰流白浆xx| 一区二区三区日本| 国产精品丝袜在线| 久久亚洲精华国产精华液| 欧美日韩免费在线视频| 不卡av电影在线播放| 国产一区二区视频在线| 麻豆91在线播放免费| 日韩精品亚洲专区| 亚洲图片欧美色图| 亚洲免费观看视频| 亚洲欧洲三级电影| 国产精品久久精品日日| 国产欧美一区二区三区在线看蜜臀| 91麻豆精品国产91久久久使用方法| 91久久国产最好的精华液| 99国产精品久| 菠萝蜜视频在线观看一区| 成人免费视频视频在线观看免费| 国产麻豆视频一区| 国产尤物一区二区| 国产精选一区二区三区| 国产一区二区三区视频在线播放| 另类小说图片综合网| 麻豆一区二区99久久久久| 蜜桃传媒麻豆第一区在线观看| 日韩成人伦理电影在线观看| 日韩av电影免费观看高清完整版在线观看 | 中文字幕亚洲不卡| 中文字幕亚洲区| 一区二区三区高清不卡| 亚洲va欧美va国产va天堂影院| 亚洲成av人片观看| 日韩av一区二区三区四区| 久久爱另类一区二区小说| 国产在线不卡一区| 不卡一区二区中文字幕| 色综合天天综合网天天看片 | 欧美麻豆精品久久久久久| 4438成人网| 久久综合色一综合色88| 欧美激情在线免费观看| 亚洲欧美电影一区二区| 亚洲成人免费在线观看| 老司机精品视频一区二区三区| 国产综合久久久久影院| 不卡的电影网站| 欧美视频完全免费看| 日韩欧美国产不卡| 日本一区二区三区久久久久久久久不| 国产精品久久久久影院亚瑟 | 精品国精品自拍自在线| 日本一区二区在线不卡| 亚洲美女偷拍久久| 日韩电影在线看| 成人av高清在线| 欧美久久一二区| 中文字幕精品一区二区精品绿巨人 | 在线免费观看日本欧美| 91精品国产乱码久久蜜臀| 久久久久久综合| 亚洲另类一区二区| 另类综合日韩欧美亚洲| 91在线观看下载| 日韩一区二区免费视频| 中文字幕一区二区日韩精品绯色| 亚洲国产精品久久艾草纯爱| 国产精品一区二区你懂的| 一本色道**综合亚洲精品蜜桃冫| 日韩亚洲欧美成人一区| 欧美激情自拍偷拍| 免费不卡在线观看| 色诱亚洲精品久久久久久| 日韩精品专区在线| 亚洲一区中文在线| 国产精品影视网| 欧美高清一级片在线| 1区2区3区精品视频| 精品一区二区三区欧美| 欧美色视频在线| 欧美国产视频在线| 另类综合日韩欧美亚洲| 欧美色倩网站大全免费| 国产精品美女一区二区在线观看| 石原莉奈一区二区三区在线观看| 99久久久精品| 久久久精品黄色| 六月丁香综合在线视频| 欧美日韩亚州综合| 亚洲欧美另类久久久精品 | 捆绑紧缚一区二区三区视频| 91九色02白丝porn| 国产精品全国免费观看高清 | 日韩在线一区二区| 99精品国产91久久久久久| 久久美女高清视频| 久久99精品久久久久久国产越南 | 欧美精选在线播放| 亚洲免费资源在线播放| 成人高清在线视频| 国产肉丝袜一区二区| 国内精品视频666| 日韩精品中午字幕| 裸体歌舞表演一区二区| 欧美一区二区三区不卡| 视频一区欧美日韩| 在线不卡a资源高清| 亚洲一二三四区| 欧美无人高清视频在线观看| 亚洲美女一区二区三区| 91高清在线观看| 亚洲激情中文1区| 在线区一区二视频| 亚洲高清免费在线| 欧美日韩不卡在线| 亚洲va欧美va国产va天堂影院| 欧美日韩视频不卡| 国产综合色产在线精品| 日韩精品在线一区| 精品亚洲aⅴ乱码一区二区三区| 精品国产a毛片| 国产乱码精品一区二区三区av | 欧美日韩免费视频| 亚洲成a人v欧美综合天堂下载| 在线视频一区二区免费| 亚洲国产一区二区三区| 欧美日韩日日骚| 美女视频黄久久| 久久久91精品国产一区二区三区| 国产久卡久卡久卡久卡视频精品| 欧美国产一区在线| 色激情天天射综合网| 亚洲福利视频三区| 日韩精品一区国产麻豆| 国产精品99久久不卡二区| 国产精品久久久久久亚洲伦| 欧洲精品一区二区| 免费日本视频一区| 国产亚洲精品中文字幕| 91丨porny丨蝌蚪视频| 午夜欧美电影在线观看| 精品国产欧美一区二区| 不卡的av网站| 日日摸夜夜添夜夜添亚洲女人| 久久理论电影网| 在线亚洲精品福利网址导航| 免费日本视频一区| 欧美国产一区二区|