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

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

?? lcd.c

?? TDK 6521 SOC 芯片 DEMO程序
?? C
字號:
/***************************************************************************
 * This code and information is provided "as is" without warranty of any   *
 * kind, either expressed or implied, including but not limited to the     *
 * implied warranties of merchantability and/or fitness for a particular   *
 * purpose.                                                                *
 *                                                                         *
 * Copyright (C) 2005 Teridian Semiconductor Corp. All Rights Reserved.    *
 ***************************************************************************/
//**************************************************************************
//  DESCRIPTION: 71M652x POWER METER - LCD Routines.
// 
//  AUTHOR:  MTF
//
//  History: See end of file.
//**************************************************************************
// File: LCD.C
//               
#include "options.h"
#include "defaults.h"
#include "library.h"
#include "lcd.h"

#define  LCD_SEG_COM0 BIT0              // LCD Segment Data COM0.
#define  LCD_SEG_COM1 BIT1              // LCD Segment Data COM1.
#define  LCD_SEG_COM2 BIT2              // LCD Segment Data COM2.
#define  LCD_SEG_COM3 BIT3              // LCD Segment Data COM3.

/*     
 +-----a-----+           +-----a-----+  Mapping of character to digit/elements.
 |\    |    /|           |           |        Bitmapped  Mask 
 | \   g   / |           |           |                                       
 f  n  |  h  b           f           b    '0'  -,-,f,e, d,c,b,a     
 |   \ | /   |           |           |    '1'  -,-,-,-, -,c,b,-    
 |    \ /    |           |           |    '2'  -,g,-,e, d,-,b,a    
 +--m--.--i--+     OR    +-----g-----+    '3'  -,g,-,-, d,c,b,a    
 |    / \    |           |           |    '4'  -,g,f,-, -,c,b,-    
 |   / | \   |           |           |    '5'  -,g,f,-, d,c,-,a    
 e  l  |  j  c           e           c    '6'  -,g,f,e, d,c,-,-    
 | /   k   \ |           |           |    '7'  -,-,-,-, -,c,b,a
 |/    |    \|           |           |    '8'  -,g,f,e, d,c,b,a    
 +-----d-----+           +-----d-----+    '9'  -,g,f,-, -,c,b,a    
*/

/*** External variables used within this module ***/
extern uint16r_t * code icons[];        // Defined by user application.
extern uint8r_t num_segs[];             //

//***************************************************************************
// LCD_Command (LCD_CLEAR);       Clear display.
// LCD_Command (LCD_DISPLAY_ON);  Display ON.
// LCD_Command (LCD_DISPLAY_OFF); Display OFF.
//***************************************************************************

#define LCD_CLEAR       0x01   // Clears Entire LCD.
#define LCD_DISPLAY_ON  0x0C   // Display ON.
#define LCD_DISPLAY_OFF 0x08   // Display OFF.

/*** Public variables declared within this module ***/
uint16r_t idx2bit[] = { BIT0,  BIT1,  BIT2,  BIT3,  BIT4,  BIT5,  BIT6,  BIT7,
                        BIT8,  BIT9,  BIT10, BIT11, BIT12, BIT13, BIT14, BIT15 };

uint16r_t Digit_Mask[] =         // Mask for 7-segment digits.
{ // '0',  '1', '2',  '3',   '4',  '5', '6',  '7',   '8',  '9'
    ZERO,  ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE
};

/*** Private functions declared within this module ***/

/*** Private variables used within this module ***/
#define SEGMENT_MASK  0xFF              // Number of SEGMENT drivers.
#define COM_MASK      ~SEGMENT_MASK     // Number of COMMONs.
#define COM_ALIGN     8

static uint8r_t com2bit[] = {
    LCD_SEG_COM0, LCD_SEG_COM1, LCD_SEG_COM2, LCD_SEG_COM3 };

//===========================================================================//
void LCD_Init (void)
{
    // LCD set up from a central table in main\defaults.c
    memcpy_xr (
        (uint8x_t *) IO_LCD,   
        &ri_defaults[ IO_LCD_IDX ],   
        IO_LCD_SIZE);
    #if M6520
    memcpy_xr (
        (uint8x_t *) IO_BLINK, 
        &ri_defaults[ IO_BLINK_IDX ], 
        IO_BLINK_SIZE);
    #endif

    LCD_Command (LCD_DISPLAY_ON );      // Display ON.
}

void LCD_Command (uint8_t LcdCmd)
{
    if (LcdCmd == LCD_CLEAR)
       memset_x (LCD, 0, sizeof (LCD));
    else if (LcdCmd == LCD_DISPLAY_ON)
       LCDY |=  LCD_EN;
    else
       LCDY &= ~LCD_EN;
}

#if VIM808
uint16_t LCD_Data_Read (uint8_t Icon)
{                                       // Handle upto 16 segments per icon.
    uint8_t i;
    uint16_t code *seg;
    uint16_t Value = 0;                 // Assume no active seqments.

    seg = icons[ Icon ];

    for (i = 0; i < num_segs[ Icon ]; i++)
    {
       if (LCD_Seg_Get (*seg))
          Value |= idx2bit[ i ];        // Segment is active.
                    
       seg++;                           // Point to next icon segment.
    }

    return (Value);
}

bool LCD_Seg_Get (uint16_t seg)
{
    uint8_t common;

    common = com2bit[ seg >> COM_ALIGN ];  
    seg &= SEGMENT_MASK;

    if (LCD[ seg ] & common)
       return (ON);             // Segment is active.
    else
       return (OFF);            // Segment is inactive.
}
#endif

void LCD_Data_Write (uint8_t Icon, uint16_t Mask)
{                               // Handle upto 16 segments per icon.
    uint16_t code *seg;
    uint8_t i;

    seg = icons[ Icon ];

    for (i = 0; i < num_segs[ Icon ]; i++)
    {
        if (Mask & 1)
            LCD_Seg_Set (*seg);
        else
            LCD_Seg_Clr (*seg);
                    
        seg++;
        Mask >>= 1;
    }
}

void LCD_Seg_Set (uint16_t seg)
{                                          
    uint8_t common;

    common = com2bit[ seg >> COM_ALIGN ];
    seg &= SEGMENT_MASK;
    
    LCD[ seg ] |=  common;
}

void LCD_Seg_Clr (uint16_t seg)
{                                          
    uint8_t common;

    common = com2bit[ seg >> COM_ALIGN ];
    seg &= SEGMENT_MASK;

    LCD[ seg ] &= ~common;
}

//===========================================================================
// Display a number on the LCD
// d is a signed 32-bit number
// c is the number of digits
// p is the number of mandatory zeros (usually) for the decimal point.
static uint8x_t digit[ MAX_DIGITS ];
void LCD_Number (int32_t lI, int8_t cI, int8_t pI)
{
    uint8_t non_zero = FALSE;           // Suppress leading zeros.
    int8_t ich;

    LCD_Command (LCD_CLEAR);            // Clear display between changes.

    if (lI < 0)
    {
       LCD_Data_Write (--cI, MINUS);     // Minus sign, make room for sign.
       lI = -lI;
    }

    for (ich = 1; ich <= cI; ++ich)
    {                                   // Display upto 'c' digits.
       digit[ cI - ich ] = lI % 10;
       lI /= 10;
    }

    if (0 == lI)
    {
       pI = cI - pI - 1;

       for (ich = 0; ich < cI; ++ich)
       {
          if ((ich >= pI) || (0 != digit[ ich ]) || (TRUE == non_zero) )
          {
             LCD_Data_Write (cI - ich - 1, Digit_Mask[ digit[ ich ]]);
             non_zero = TRUE;
          }
          else
          {
             LCD_Data_Write (cI - ich - 1, BLANK);
          }
       }
    }
    else  // Number overflows display.
    {
       for (ich = 0; ich < cI; ++ich)
          LCD_Data_Write (ich, OVERFLOW);
    }
}

/****************************************************************************
 * History:
 * $Log: lcd.c,v $
 * Revision 1.31  2006/10/13 00:47:29  tvander
 * Removed compile options for 6530, 6515;
 * renamed 6511 and 6513 to trace11 and trace13;
 * Binary verified unchanged from previous version.
 *
 * Revision 1.30  2006/09/29 09:40:58  tvander
 * Build errors
 *
 * Revision 1.29  2006/09/14 00:35:46  tvander
 * substitute spaces for tabs
 *
 * Revision 1.28  2006/09/13 21:37:26  gmikef
 * *** empty log message ***
 *
 * Revision 1.22  2006/08/16 01:44:12  tvander
 * Pretty-printed
 *
 * Revision 1.21  2006/08/09 00:56:35  tvander
 * *** empty log message ***
 *
 * Revision 1.20  2006/07/07 22:50:03  tvander
 * Speed up the initialization a bit for brownout mode.
 *
 * Revision 1.19  2006/06/29 00:55:48  tvander
 * Marked NOAREGS on reentrant routines that needed it.
 *
 * Revision 1.18  2006/06/24 04:41:21  tvander
 * Added hardware initialization, so it can stand alone in brownout mode.
 *
 * Revision 1.17  2006/06/14 02:50:31  tvander
 * Changes to speed up LCD display:
 * The clear was made integral with the main display routine.
 * e.g. LCD_Number() clears the display, then places the number.
 * This means that the decimal points, mode, etc. have to be written after
 * the main display item.
 *
 * Revision 1.16  2006/04/15 01:06:49  tvander
 * It wouldn't display all zeros; fixed.
 *
 * Revision 1.15  2006/03/08 03:06:37  gmikef
 * *** empty log message ***
 *
 * Revision 1.14  2006/03/03 11:26:11  Michael T. Fischer
 * Prep for 6530 LCD, etc.
 *
 * Revision 1.12  2005/11/10 22:51:32  tvander
 * 6520 has battery mode commands.
 * Brownout always has decimal point 7.
 * LCD Mode always has decimal points 7 and 6.
 * Sag detection is disabled.
 *
 * Revision 1.11  2005/11/09 02:21:15  tvander
 * Added code to display watt hours from brownout mode.
 * Added code to clear EEPROM (lapie command "EEE")
 *
 * Revision 1.10  2005/10/12 23:00:01  tvander
 * Includes demonstratable mission mode, brownout, LCD and sleep modes
 *
 * Revision 1.9  2005/09/22 23:45:05  tvander
 * Clean build all models and unit tests, updated copyright to be fore Teridian
 *
 * Revision 1.8  2005/09/11 00:33:58  tvander
 * Clean compiles
 *
 * Revision 1.7  2005/08/31 22:35:08  tvander
 * Removed CE_off from 6521B
 *
 * Revision 1.6  2005/08/28 02:14:07  gmikef
 * *** empty log message ***
 *
 * Revision 1.5  2005/07/14 20:15:48  tvander
 * ce code concentrated in ce.c
 * ce interface concentrated in ce652x.c, .h
 * Fixed 0-length read or write using flag protocol.
 * display.c is out of the build
 * kwh_initialize now reads the LRC.
 *
 * Revision 1.4  2005/05/06 16:40:31  tvander
 * Build errors fixed
 *
 * Revision 1.3  2005/04/30 02:10:23  gmikef
 * *** empty log message ***
 *
 * Revision 1.7  2005/04/29 00:01:55  gmikef
 * *** empty log message ***
 *
 * Revision 1.6  2005/04/25 21:26:02  gmikef
 * *** empty log message ***
 *
 * Revision 1.1  2005/04/21 02:02:38  gmikef
 * *** empty log message ***
 *
 * Revision 1.5  2005/04/21 00:48:26  gmikef
 * *** empty log message ***
 *
 * Revision 1.4  2005/04/13 01:33:39  gmikef
 * *** empty log message ***
 *
 * Copyright (C) 2005 Teridian Semiconductor Corp. All Rights Reserved.    *
 * this program is fully protected by the United States copyright          *
 * laws and is the property of Teridian Semiconductor Corporation.         *
 ***************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩三级高清在线| 26uuu国产电影一区二区| 精品视频1区2区| 精品国产免费一区二区三区四区 | 国产精品一区二区久激情瑜伽| 欧美亚洲一区二区在线| 国产精品色呦呦| 久久99久久99小草精品免视看| 91福利精品第一导航| 中文字幕欧美国产| 韩国欧美一区二区| 欧美tk丨vk视频| 亚洲va天堂va国产va久| 99热精品一区二区| 久久久久久毛片| 精品影院一区二区久久久| 欧美日韩国产成人在线91| 夜夜揉揉日日人人青青一国产精品| 国产福利一区二区| 亚洲精品在线三区| 激情综合色综合久久| 日韩欧美成人一区二区| 日韩精品成人一区二区三区| 欧美日本在线看| 亚洲电影视频在线| 欧美日韩一二三区| 亚洲成人一二三| 欧美精品久久久久久久久老牛影院| 亚洲国产综合色| 欧美日韩激情在线| 日本不卡视频在线| 精品少妇一区二区三区| 九九在线精品视频| 久久日一线二线三线suv| 国产曰批免费观看久久久| 亚洲精品一区二区三区蜜桃下载 | 国产日韩av一区| 国产精品一线二线三线| 国产亚洲婷婷免费| 成人aa视频在线观看| 亚洲天天做日日做天天谢日日欢 | 综合激情成人伊人| 91行情网站电视在线观看高清版| 亚洲国产综合在线| 日韩女优视频免费观看| 国产一区 二区 三区一级| 久久久久99精品一区| 成人av电影在线| 亚洲一区在线视频| 日韩免费福利电影在线观看| 韩国v欧美v亚洲v日本v| 亚洲天堂福利av| 欧美日韩的一区二区| 国产在线看一区| 国产精品午夜春色av| 成人激情电影免费在线观看| 亚洲夂夂婷婷色拍ww47| 欧美不卡视频一区| 99久久99久久免费精品蜜臀| 亚洲最新视频在线播放| 91亚洲精品久久久蜜桃网站| 国产精品国产三级国产三级人妇 | 午夜欧美在线一二页| 精品国产亚洲一区二区三区在线观看 | **欧美大码日韩| 欧美精品1区2区3区| 捆绑调教美女网站视频一区| 国产精品美女久久久久久久网站| 在线免费不卡电影| 国产一区在线观看麻豆| 日韩久久免费av| 成人午夜av在线| 婷婷国产v国产偷v亚洲高清| 国产欧美视频在线观看| 精品视频一区三区九区| 成人午夜又粗又硬又大| 日日摸夜夜添夜夜添亚洲女人| 国产精品视频观看| 777午夜精品视频在线播放| 国产高清不卡一区| 美女在线视频一区| 一区二区三区在线观看视频| 精品sm在线观看| 3d成人h动漫网站入口| 91浏览器在线视频| 国产精品91一区二区| 热久久免费视频| 香蕉av福利精品导航| 国产精品久久精品日日| 久久久久99精品国产片| 91精品国产综合久久精品麻豆| 色综合久久精品| 播五月开心婷婷综合| 国产成人精品一区二区三区四区| 日本美女一区二区三区视频| 亚洲动漫第一页| 亚洲中国最大av网站| 亚洲视频 欧洲视频| 欧美韩日一区二区三区| 久久亚洲春色中文字幕久久久| 这里只有精品99re| 欧美日韩黄色一区二区| 91激情在线视频| 91久久国产综合久久| 色偷偷成人一区二区三区91 | 中文字幕 久热精品 视频在线| 欧美一卡2卡三卡4卡5免费| 色婷婷av一区二区三区软件 | 国产高清不卡一区| 亚洲女性喷水在线观看一区| 久久影院电视剧免费观看| 日韩一级片在线播放| 欧美日本国产一区| 欧美日韩日日夜夜| 欧美电影在线免费观看| 欧美人妖巨大在线| 欧美一区二区三级| 日韩欧美国产午夜精品| 精品蜜桃在线看| 久久久久久9999| 国产目拍亚洲精品99久久精品| 国产精品网友自拍| 国产精品久久久久久妇女6080| 国产精品美女久久久久久久久| 国产日韩欧美a| 亚洲美女在线国产| 三级在线观看一区二区| 亚洲一区二区黄色| 中文字幕欧美激情一区| 亚洲欧美欧美一区二区三区| 亚洲精品免费视频| 亚洲va欧美va天堂v国产综合| 日本特黄久久久高潮| 精品一区二区日韩| 北岛玲一区二区三区四区| 97se亚洲国产综合在线| 精品视频色一区| 精品国产1区二区| 亚洲天堂免费看| 日韩电影在线观看网站| 国产一级精品在线| 99免费精品视频| 在线成人免费观看| 国产女主播在线一区二区| 亚洲综合成人在线视频| 极品少妇xxxx精品少妇| 91在线视频官网| 欧美成人aa大片| 亚洲人成网站在线| 久久国产麻豆精品| av一区二区三区| 在线综合视频播放| 18欧美亚洲精品| 美女在线视频一区| 色久优优欧美色久优优| 九一久久久久久| 日韩国产高清影视| 大陆成人av片| 欧美一级xxx| 一级做a爱片久久| 国精品**一区二区三区在线蜜桃| 色综合久久综合网| 久久久影视传媒| 午夜精品久久久久久| 国产美女一区二区三区| 欧美精品tushy高清| 综合久久久久久久| 国产精品888| 日韩一区二区三区电影| 亚洲图片欧美视频| 91免费看视频| 国产视频一区在线观看| 毛片基地黄久久久久久天堂| 91黄色免费版| 亚洲欧洲精品一区二区三区不卡| 精品在线观看免费| 日韩一区二区麻豆国产| 亚洲成人av电影| 一本色道a无线码一区v| 国产精品素人一区二区| 国产乱子轮精品视频| 日韩欧美一级二级| 1024成人网色www| 国产成人免费视频一区| 欧美r级在线观看| 美女一区二区三区| 日韩情涩欧美日韩视频| 日本亚洲视频在线| 在线成人av网站| 亚洲成人动漫精品| 欧美日韩视频第一区| 亚洲一二三区视频在线观看| 91亚洲精品一区二区乱码| 中文字幕视频一区二区三区久| 成人h动漫精品一区二| 欧美国产日韩a欧美在线观看| 国产精品中文字幕日韩精品| 久久影院午夜片一区| 国产成人精品亚洲午夜麻豆| 国产亚洲精久久久久久|