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

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

?? upsd3200_lcd.c

?? DK3200開發板上的ADC開發出的AD和PWM應用程序
?? C
字號:
/*------------------------------------------------------------------------------
upsd3200_lcd.c

Version:
September 2004 Version 2.0 -
Updated the include file names and modified comments.  Added support for 
the Raisonance compiler.  Corrected the printfLCD() for the "w" format.  Removed
functions not typically used with the basic demos.


Dependencies:
upsd3200_timer.c - needed for delays used in functions that write data to the LCD.

Description:
The uPSD3200 LCD device driver is intended to provide a standard programmed 
I/O set of functions for driving a 16 x 2 line dot matrix LCD module that
is part of the DK3200 boards.  See the functions below for their description.


Copyright (c) 2004 STMicroelectronics Inc.

This example demo code is provided as is and has no warranty,
implied or otherwise.  You are free to use/modify any of the provided
code at your own risk in your applications with the expressed limitation
of liability (see below) so long as your product using the code contains
at least one uPSD product (device).

LIMITATION OF LIABILITY:   NEITHER STMicroelectronics NOR ITS VENDORS OR 
AGENTS SHALL BE LIABLE FOR ANY LOSS OF PROFITS, LOSS OF USE, LOSS OF DATA,
INTERRUPTION OF BUSINESS, NOR FOR INDIRECT, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES OF ANY KIND WHETHER UNDER THIS AGREEMENT OR
OTHERWISE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
------------------------------------------------------------------------------*/

#include "upsd3200.h"
#include "upsd3200_hardware.h"
#include "upsd3200_lcd.h"
#include "upsd3200_timer.h"

#ifdef __RC51__	     // If Raisonance compiler, need this include file for the 
                       //  printfLCD() function.
#include "stdarg.h"
#endif


typedef struct LCD_display_st {
	unsigned char LCD_CMD_WR;        // LCD_BASE+0x00
	unsigned char LCD_CMD_RD;        //         +0x01
   	unsigned char LCD_RAM_WR;     //         +0x02
   	unsigned char LCD_RAM_RD;     //         +0x03  
}  LCD_DISPLAY;

// XDATA address for display 
xdata LCD_DISPLAY LCD_reg _at_ LCD_BASE_ADDR;

static unsigned char Cursor_LCD;
static char orig_buscon;


/*------------------------------------------------------------------------------
lcd_init()

This function is used to initialize the LCD module per the specs.
------------------------------------------------------------------------------*/
void lcd_init(void)
{
   delay_10ms();
   LCD_reg.LCD_CMD_WR = 0x30;
   delay_10ms();		
   LCD_reg.LCD_CMD_WR = 0x30;
   delay_10ms();		
   LCD_reg.LCD_CMD_WR = 0x30;
   delay_10ms();		

   LCD_reg.LCD_CMD_WR = 0x38;	// 8 bits, 2 lines, 5 x 7 font   
   delay_10ms();              // delay 10 ms   
   BusyCheck();
   LCD_reg.LCD_CMD_WR = 0x0C;	//Display on, Cursor off, Non-Blink
   BusyCheck();
   LCD_reg.LCD_CMD_WR = 0x01;	//Clear display
   BusyCheck();
   LCD_reg.LCD_CMD_WR = 0x02;	//Cursor home
   BusyCheck();
   LCD_reg.LCD_CMD_WR = 0x06;	//Cursor inc, no shift/cursor move
 		
   Cursor_LCD = DD_ADDR;		//Display from 1st row, 1st column
   BusyCheck();
   LCD_reg.LCD_CMD_WR = Cursor_LCD;
   BusyCheck();
}

/*------------------------------------------------------------------------------
BusyCheck()

This function is used to wait until the LCD module's busy flag (BF) is cleared.
------------------------------------------------------------------------------*/
void BusyCheck(void)
	{
  	  unsigned char i;
	  while (LCD_reg.LCD_CMD_RD & BF_BIT);  // Loop while busy
	}


/*------------------------------------------------------------------------------
printfLCD(chr_ptr) 

This function is used to display a string of characters on the LCD display.

chr_ptr - unsigned char*
		- pointer to string to display on LCD.
------------------------------------------------------------------------------*/
void printfLCD(unsigned char *chr_ptr, ...) {

	unsigned char var;
    #ifdef __RC51__	// If Raisonance compiler, use ANSI stdarg
          va_list var_ptr;
	    va_start(var_ptr,0);
    #else	
        unsigned char *var_ptr=&chr_ptr+1;
    #endif

	while (*chr_ptr != NULL) {
		
 		BusyCheck();
		
 		if (*chr_ptr == '\r') {
 			chr_ptr++;
  			Cursor_LCD &= 0xC0;    				//return to position 0 at current line
			LCD_reg.LCD_CMD_WR = Cursor_LCD;
		}
		else
		if (*chr_ptr == '\n') {
 			chr_ptr++;
  			Cursor_LCD ^= 0x40;     			//goto next line
  			Cursor_LCD &= 0xC0;     			//return to position 0
			LCD_reg.LCD_CMD_WR = Cursor_LCD;
		}
 		else
		if (*chr_ptr == '%') {
 			chr_ptr++;
 			if (*chr_ptr == 'd') {			// display 1 digit decimal 0-9
				chr_ptr++;

  					var = *var_ptr++;
					LCD_reg.LCD_RAM_WR = (var & 0x0F)+'0';
  	   		}
  	    		else
  	    		if (*chr_ptr == 'x') {           	// display 1 byte hex 00-FF
				chr_ptr++;

  	    			var = *var_ptr++;
  	    			LCD_reg.LCD_RAM_WR = htoa_hi(var);
               BusyCheck();
  	    			LCD_reg.LCD_RAM_WR = htoa_lo(var);
			}
  			else
  	 		if (*chr_ptr == 'w') {  	  	// display 1 word hex 0000-FFFF
               chr_ptr++;
               var = *var_ptr--;       // back up 1 char				
  	    			var = *var_ptr++;       // get integer
  	    			LCD_reg.LCD_RAM_WR = htoa_hi(var);
               BusyCheck();
  	    			LCD_reg.LCD_RAM_WR = htoa_lo(var);
               BusyCheck();
               var = *var_ptr++;      // get low byte
               LCD_reg.LCD_RAM_WR = htoa_hi(var);
               BusyCheck();
               LCD_reg.LCD_RAM_WR = htoa_lo(var);
  	  		}
			else {
  				LCD_reg.LCD_RAM_WR = *chr_ptr++;	//write character to LCD Display RAM
  	     	}
		}
 		else
		{
  			LCD_reg.LCD_RAM_WR = *chr_ptr++;		//write character to LCD Display RAM
		}
	}
}

/*------------------------------------------------------------------------------
lcd_clear()

This function is used to clear the LCD.
------------------------------------------------------------------------------*/
void lcd_clear(void)  
	{
	BusyCheck();
	LCD_reg.LCD_CMD_WR = 0x01;
	Cursor_LCD = DD_ADDR;
	}

/*------------------------------------------------------------------------------
MoveCursor(m_direction, m_step)

This function is used to move the cursor on the LCD.

m_direction - char
			- the direction to move the cursor from the current location. 
m_step		- unsigned char 
			- the number of character positions to the move the cursor in the
         		direction specified by m_direction.
------------------------------------------------------------------------------*/

void MoveCursor(char m_direction, unsigned char m_step)
{
	unsigned char i;

	BusyCheck();
	LCD_reg.LCD_CMD_WR = 0x0C;				//Close cursor
	BusyCheck();
	LCD_reg.LCD_CMD_WR = 0x02;				//Cursor home
	
	if(m_step>=16)
	{	
		m_step=m_step-16;
		printfLCD("\n");
	}
	for(i=0;i<m_step;i++)
	{
		BusyCheck();
		if(m_direction==1)LCD_reg.LCD_CMD_WR = 0x10;//Left shift
		else LCD_reg.LCD_CMD_WR = 0x14;				//Right shift
	}
	BusyCheck();
	LCD_reg.LCD_CMD_WR = 0x0E;						//Open Cursor
}


	
/* The following conversion functions are used in conjunction with the
 displaying data on the LCD. */

/*------------------------------------------------------------------------------
htoa_lo(byte)

This function is used to convert the low nibble of an unsigned byte (0-F hex)
to ASCII.

byte	- byte 
		- byte to convert to ASCII.

Returns:
ASCII value result of the conversion.
------------------------------------------------------------------------------*/
char htoa_lo(byte)
				
unsigned char byte;
	{
	byte = byte & 0x0F;			// keep lower nibble only   
	if (byte <= 0x09)
		return(byte + 0x30);
	else
		return (byte + 0x37);
	}

/*------------------------------------------------------------------------------
htoa_hi(byte)

This function is used to convert the hi nibble of an unsigned byte (0-F hex)
to ASCII.

byte 	- byte 
		- byte to convert to ASCII.

Returns:
ASCII value result of the conversion.
------------------------------------------------------------------------------*/
char htoa_hi(byte)	 

unsigned char byte;
	{
	byte = byte & 0xF0;			// keep upper nibble only   
	byte = byte >> 4;
	if (byte <= 0x09)
		return(byte + 0x30);
	else
		return (byte + 0x37);
	}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品电影院| 丁香婷婷综合激情五月色| 久久成人18免费观看| 成人av资源网站| 91精品在线免费| 一区二区三区.www| 床上的激情91.| 久久久另类综合| 日本中文字幕一区二区有限公司| 国产成人在线网站| 日韩一区二区视频| 亚洲va欧美va国产va天堂影院| 成人精品视频一区二区三区| 精品久久久久久久人人人人传媒| 亚洲精品成人少妇| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 国产综合色产在线精品| 欧美性受xxxx| 亚洲一区二区三区四区在线免费观看| 成人午夜又粗又硬又大| 亚洲精品在线观| 日韩av在线发布| 欧美人牲a欧美精品| 亚洲一二三区视频在线观看| 99热99精品| 中文久久乱码一区二区| 国产伦精品一区二区三区在线观看| 欧美日韩国产高清一区二区三区| 亚洲综合自拍偷拍| 色999日韩国产欧美一区二区| 国产精品久久久久久久裸模| 成人a免费在线看| 国产精品三级av| 91美女视频网站| 一区二区三区四区不卡在线 | 9l国产精品久久久久麻豆| 国产日产欧美一区二区视频| 国产精品亚洲一区二区三区在线| 久久久久国产精品人| 国产成人精品免费在线| 国产精品亲子伦对白| 99精品黄色片免费大全| 一区二区三区在线免费视频| 欧美日韩精品免费观看视频| 视频在线在亚洲| 欧美大片在线观看一区二区| 精品一区二区三区免费观看| 久久综合久久鬼色中文字| 国产二区国产一区在线观看| 中文子幕无线码一区tr| 色综合中文字幕国产| 国产精品进线69影院| 91一区在线观看| 亚洲成在线观看| 日韩免费一区二区| 蜜臀a∨国产成人精品| 欧美激情中文不卡| 欧美亚洲动漫精品| 老汉av免费一区二区三区| 久久欧美中文字幕| 成人一区在线看| 香蕉av福利精品导航| 欧美不卡视频一区| 99精品视频一区二区三区| 五月综合激情日本mⅴ| 久久久99免费| 欧美伊人久久久久久久久影院| 琪琪久久久久日韩精品| 亚洲国产成人私人影院tom| 欧美自拍偷拍午夜视频| 日韩和欧美一区二区三区| 久久久不卡影院| 欧美午夜精品电影| 国产精品亚洲综合一区在线观看| 玉足女爽爽91| 久久亚洲捆绑美女| 日本乱码高清不卡字幕| 韩国女主播成人在线观看| 亚洲精选视频在线| 精品国产一二三区| 欧美日韩久久一区| 波多野结衣中文字幕一区| 日韩在线卡一卡二| 亚洲人吸女人奶水| 国产欧美一区视频| 日韩欧美亚洲国产另类| 欧美性色欧美a在线播放| 国产高清亚洲一区| 免费成人av在线| 亚洲国产一二三| 亚洲天堂a在线| 国产欧美一区视频| 精品国产青草久久久久福利| 欧美日韩国产成人在线91| 成人免费不卡视频| 国产风韵犹存在线视精品| 蜜臀91精品一区二区三区 | 中文在线一区二区| 日韩精品中午字幕| 欧美日韩高清不卡| 欧美亚洲一区二区三区四区| 成人夜色视频网站在线观看| 韩国av一区二区三区四区 | 亚洲美女少妇撒尿| 欧美国产精品久久| 久久久久久夜精品精品免费| 337p亚洲精品色噜噜狠狠| 91黄色小视频| 色呦呦一区二区三区| k8久久久一区二区三区| 成人sese在线| 91在线小视频| 一本到不卡精品视频在线观看| 成人黄色大片在线观看| 国产精品18久久久久久久久久久久| 美女看a上一区| 久久9热精品视频| 久久精品国产精品亚洲综合| 日韩精品免费专区| 蜜臀a∨国产成人精品| 国产一区二区三区免费| 国内成人精品2018免费看| 久久精品国产成人一区二区三区 | 国产精品亚洲午夜一区二区三区| 国内精品伊人久久久久影院对白| 另类欧美日韩国产在线| 国内国产精品久久| 成人高清免费观看| 99久久精品久久久久久清纯| 色婷婷激情综合| 欧美日韩国产首页| 日韩精品一区二区三区三区免费 | 在线播放国产精品二区一二区四区| 欧美日韩国产成人在线免费| 欧美一激情一区二区三区| 久久久美女艺术照精彩视频福利播放| 欧美国产视频在线| 亚洲精品福利视频网站| 日韩经典中文字幕一区| 国产一区二区三区在线观看免费视频| 国产精品亚洲视频| 91福利国产成人精品照片| 欧美日韩精品二区第二页| 精品捆绑美女sm三区| 国产精品色婷婷| 亚洲成人高清在线| 国产一区在线看| 99国内精品久久| 欧美日韩视频在线第一区| 欧美成人乱码一区二区三区| 中文字幕巨乱亚洲| 天天色 色综合| 国产99久久久国产精品潘金网站| 91免费在线看| 精品黑人一区二区三区久久| 亚洲少妇屁股交4| 久久精品国产秦先生| 91美女在线看| 久久久久久久网| 亚洲国产精品人人做人人爽| 狠狠色丁香久久婷婷综合_中| 91视频免费看| 久久综合九色综合欧美就去吻| 国产精品久久久久永久免费观看| 日本成人在线网站| 91影院在线观看| 久久久av毛片精品| 日韩高清不卡一区二区三区| 99久久精品国产毛片| 精品国产乱码91久久久久久网站| 亚洲欧美另类久久久精品2019| 久久精品免费观看| 欧美三区在线观看| 国产精品国产三级国产普通话99| 蜜桃视频一区二区三区| 欧美亚洲图片小说| 亚洲男同性视频| 粗大黑人巨茎大战欧美成人| 精品福利视频一区二区三区| 亚洲一线二线三线视频| 99久久婷婷国产综合精品| 久久精品一区二区| 看片网站欧美日韩| 91麻豆精品国产91久久久久| 一区二区三区蜜桃网| 91一区二区三区在线播放| 国产欧美日韩激情| 国内成人免费视频| 久久蜜桃av一区精品变态类天堂 | 亚洲卡通欧美制服中文| 成人激情小说网站| 日本一区二区三区免费乱视频 | 精品盗摄一区二区三区| 麻豆一区二区在线| 欧美精品 日韩| 午夜日韩在线观看| 欧美男人的天堂一二区| 日韩精品一区第一页| 91精品国产日韩91久久久久久| 日韩成人精品视频|