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

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

?? lcd_library_c.c

?? LCD library function in c for atmega 32.
?? C
字號:
//*****************************************************************************
//
// File Name	: 'lcd_lib.c'
// Title		: 8 and 4 bit LCd interface
// Author		: Scienceprog.com - Copyright (C) 2007
// Created		: 2007-03-29
// Revised		: 2007-08-08
// Version		: 1.0
// Target MCU	: Atmel AVR series
//
// This code is distributed under the GNU Public License
//		which can be found at http://www.gnu.org/licenses/gpl.txt
//
//*****************************************************************************
#include "lcd_lib.h"
#include <inttypes.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>

const uint8_t LcdCustomChar[] PROGMEM=//define 8 custom LCD chars
{
	0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, // 0. 0/5 full progress block
	0x00, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x00, // 1. 1/5 full progress block
	0x00, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x00, // 2. 2/5 full progress block
	0x00, 0x1F, 0x1C, 0x1C, 0x1C, 0x1C, 0x1F, 0x00, // 3. 3/5 full progress block
	0x00, 0x1F, 0x1E, 0x1E, 0x1E, 0x1E, 0x1F, 0x00, // 4. 4/5 full progress block
	0x00, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, // 5. 5/5 full progress block
	0x03, 0x07, 0x0F, 0x1F, 0x0F, 0x07, 0x03, 0x00, // 6. rewind arrow
	0x18, 0x1C, 0x1E, 0x1F, 0x1E, 0x1C, 0x18, 0x00  // 7. fast-forward arrow
};


void LCDsendChar(uint8_t ch)		//Sends Char to LCD
{

#ifdef LCD_4bit
	//4 bit part
	LDP=(ch&0b11110000);
	LCP|=1<<LCD_RS;
	LCP|=1<<LCD_E;		
	_delay_ms(1);
	LCP&=~(1<<LCD_E);	
	LCP&=~(1<<LCD_RS);
	_delay_ms(1);
	LDP=((ch&0b00001111)<<4);
	LCP|=1<<LCD_RS;
	LCP|=1<<LCD_E;		
	_delay_ms(1);
	LCP&=~(1<<LCD_E);	
	LCP&=~(1<<LCD_RS);
	_delay_ms(1);
#else
	//8 bit part
	LDP=ch;
	LCP|=1<<LCD_RS;
	LCP|=1<<LCD_E;		
	_delay_ms(1);
	LCP&=~(1<<LCD_E);	
	LCP&=~(1<<LCD_RS);
	_delay_ms(1);
#endif
}
void LCDsendCommand(uint8_t cmd)	//Sends Command to LCD
{
#ifdef LCD_4bit	
	//4 bit part
	LDP=(cmd&0b11110000);
	LCP|=1<<LCD_E;		
	_delay_ms(1);
	LCP&=~(1<<LCD_E);
	_delay_ms(1);
	LDP=((cmd&0b00001111)<<4);	
	LCP|=1<<LCD_E;		
	_delay_ms(1);
	LCP&=~(1<<LCD_E);
	_delay_ms(1);
#else
	//8 bit part
	LDP=cmd;
	LCP|=1<<LCD_E;		
	_delay_ms(1);
	LCP&=~(1<<LCD_E);
	_delay_ms(1);	
#endif
}
void LCDinit(void)//Initializes LCD
{
#ifdef LCD_4bit	
	//4 bit part
	_delay_ms(15);
	LDP=0x00;
	LCP=0x00;
	LDDR|=1<<LCD_D7|1<<LCD_D6|1<<LCD_D5|1<<LCD_D4;
	LCDR|=1<<LCD_E|1<<LCD_RW|1<<LCD_RS;
   //---------one------
	LDP=0<<LCD_D7|0<<LCD_D6|1<<LCD_D5|1<<LCD_D4; //4 bit mode
	LCP|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS;		
	_delay_ms(1);
	LCP&=~(1<<LCD_E);
	_delay_ms(1);
	//-----------two-----------
/*	LDP=0<<LCD_D7|0<<LCD_D6|1<<LCD_D5|1<<LCD_D4; //4 bit mode
	LCP|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS;		
	_delay_ms(1);
	LCP&=~(1<<LCD_E);
	_delay_ms(1);
	//-------three-------------
	LDP=0<<LCD_D7|0<<LCD_D6|1<<LCD_D5|0<<LCD_D4; //4 bit mode
	LCP|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS;		
	_delay_ms(1);
	LCP&=~(1<<LCD_E);
	_delay_ms(1);
*/	//--------4 bit--dual line---------------
	LCDsendCommand(0b00101000);
   //-----increment address, invisible cursor shift------
	LCDsendCommand(0b00001100);
		//init 8 custom chars
	uint8_t ch=0, chn=0;
	while(ch<64)
	{
		LCDdefinechar((LcdCustomChar+ch),chn++);
		ch=ch+8;
	}


#else
	//8 bit part
	_delay_ms(15);
	LDP=0x00;
	LCP=0x00;
	LDDR|=1<<LCD_D7|1<<LCD_D6|1<<LCD_D5|1<<LCD_D4|1<<LCD_D3
			|1<<LCD_D2|1<<LCD_D1|1<<LCD_D0;
	LCDR|=1<<LCD_E|1<<LCD_RW|1<<LCD_RS;
   //---------one------
	LDP=0<<LCD_D7|0<<LCD_D6|1<<LCD_D5|1<<LCD_D4|0<<LCD_D3
			|0<<LCD_D2|0<<LCD_D1|0<<LCD_D0; //8 it mode
	LCP|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS;		
	_delay_ms(1);
	LCP&=~(1<<LCD_E);
	_delay_ms(1);
	//-----------two-----------
	LDP=0<<LCD_D7|0<<LCD_D6|1<<LCD_D5|1<<LCD_D4|0<<LCD_D3
			|0<<LCD_D2|0<<LCD_D1|0<<LCD_D0; //8 it mode
	LCP|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS;		
	_delay_ms(1);
	LCP&=~(1<<LCD_E);
	_delay_ms(1);
	//-------three-------------
	LDP=0<<LCD_D7|0<<LCD_D6|1<<LCD_D5|1<<LCD_D4|0<<LCD_D3
			|0<<LCD_D2|0<<LCD_D1|0<<LCD_D0; //8 it mode
	LCP|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS;		
	_delay_ms(1);
	LCP&=~(1<<LCD_E);
	_delay_ms(1);
	//--------8 bit dual line----------
	LDP=0<<LCD_D7|0<<LCD_D6|1<<LCD_D5|1<<LCD_D4|1<<LCD_D3
			|0<<LCD_D2|0<<LCD_D1|0<<LCD_D0; //8 it mode
	LCP|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS;		
	_delay_ms(1);
	LCP&=~(1<<LCD_E);
	_delay_ms(1);
   //-----increment address, invisible cursor shift------
	LDP=0<<LCD_D7|0<<LCD_D6|0<<LCD_D5|0<<LCD_D4|1<<LCD_D3
			|1<<LCD_D2|0<<LCD_D1|0<<LCD_D0; //8 it mode
	LCP|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS;		
	_delay_ms(1);
	LCP&=~(1<<LCD_E);
	_delay_ms(5);
		//init custom chars
	uint8_t ch=0, chn=0;
	while(ch<64)
	{
		LCDdefinechar((LcdCustomChar+ch),chn++);
		ch=ch+8;
	}

#endif
}			
void LCDclr(void)				//Clears LCD
{
	LCDsendCommand(1<<LCD_CLR);
}
void LCDhome(void)			//LCD cursor home
{
	LCDsendCommand(1<<LCD_HOME);
}
void LCDstring(uint8_t* data, uint8_t nBytes)	//Outputs string to LCD
{
register uint8_t i;

	// check to make sure we have a good pointer
	if (!data) return;

	// print data
	for(i=0; i<nBytes; i++)
	{
		LCDsendChar(data[i]);
	}
}
void LCDGotoXY(uint8_t x, uint8_t y)	//Cursor to X Y position
{
	register uint8_t DDRAMAddr;
	// remap lines into proper order
	switch(y)
	{
	case 0: DDRAMAddr = LCD_LINE0_DDRAMADDR+x; break;
	case 1: DDRAMAddr = LCD_LINE1_DDRAMADDR+x; break;
	case 2: DDRAMAddr = LCD_LINE2_DDRAMADDR+x; break;
	case 3: DDRAMAddr = LCD_LINE3_DDRAMADDR+x; break;
	default: DDRAMAddr = LCD_LINE0_DDRAMADDR+x;
	}
	// set data address
	LCDsendCommand(1<<LCD_DDRAM | DDRAMAddr);
	
}
//Copies string from flash memory to LCD at x y position
//const uint8_t welcomeln1[] PROGMEM="AVR LCD DEMO\0";
//CopyStringtoLCD(welcomeln1, 3, 1);	
void CopyStringtoLCD(const uint8_t *FlashLoc, uint8_t x, uint8_t y)
{
	uint8_t i;
	LCDGotoXY(x,y);
	for(i=0;(uint8_t)pgm_read_byte(&FlashLoc[i]);i++)
	{
		LCDsendChar((uint8_t)pgm_read_byte(&FlashLoc[i]));
	}
}
//defines char symbol in CGRAM
/*
const uint8_t backslash[] PROGMEM=
{
0b00000000,//back slash
0b00010000,
0b00001000,
0b00000100,
0b00000010,
0b00000001,
0b00000000,
0b00000000
};
LCDdefinechar(backslash,0);
*/
void LCDdefinechar(const uint8_t *pc,uint8_t char_code){
	uint8_t a, pcc;
	uint16_t i;
	a=(char_code<<3)|0x40;
	for (i=0; i<8; i++){
		pcc=pgm_read_byte(&pc[i]);
		LCDsendCommand(a++);
		LCDsendChar(pcc);
		}
}

void LCDshiftLeft(uint8_t n)	//Scrol n of characters Right
{
	for (uint8_t i=0;i<n;i++)
	{
		LCDsendCommand(0x1E);
	}
}
void LCDshiftRight(uint8_t n)	//Scrol n of characters Left
{
	for (uint8_t i=0;i<n;i++)
	{
		LCDsendCommand(0x18);
	}
}
void LCDcursorOn(void) //displays LCD cursor
{
	LCDsendCommand(0x0E);
}
void LCDcursorOnBlink(void)	//displays LCD blinking cursor
{
	LCDsendCommand(0x0F);
}
void LCDcursorOFF(void)	//turns OFF cursor
{
	LCDsendCommand(0x0C);
}
void LCDblank(void)		//blanks LCD
{
	LCDsendCommand(0x08);
}
void LCDvisible(void)		//Shows LCD
{
	LCDsendCommand(0x0C);
}
void LCDcursorLeft(uint8_t n)	//Moves cursor by n poisitions left
{
	for (uint8_t i=0;i<n;i++)
	{
		LCDsendCommand(0x10);
	}
}
void LCDcursorRight(uint8_t n)	//Moves cursor by n poisitions left
{
	for (uint8_t i=0;i<n;i++)
	{
		LCDsendCommand(0x14);
	}
}
//adapted fro mAVRLIB
void LCDprogressBar(uint8_t progress, uint8_t maxprogress, uint8_t length)
{
	uint8_t i;
	uint16_t pixelprogress;
	uint8_t c;

	// draw a progress bar displaying (progress / maxprogress)
	// starting from the current cursor position
	// with a total length of "length" characters
	// ***note, LCD chars 0-5 must be programmed as the bar characters
	// char 0 = empty ... char 5 = full

	// total pixel length of bargraph equals length*PROGRESSPIXELS_PER_CHAR;
	// pixel length of bar itself is
	pixelprogress = ((progress*(length*PROGRESSPIXELS_PER_CHAR))/maxprogress);
	
	// print exactly "length" characters
	for(i=0; i<length; i++)
	{
		// check if this is a full block, or partial or empty
		// (u16) cast is needed to avoid sign comparison warning
		if( ((i*(uint16_t)PROGRESSPIXELS_PER_CHAR)+5) > pixelprogress )
		{
			// this is a partial or empty block
			if( ((i*(uint16_t)PROGRESSPIXELS_PER_CHAR)) > pixelprogress )
			{
				// this is an empty block
				// use space character?
				c = 0;
			}
			else
			{
				// this is a partial block
				c = pixelprogress % PROGRESSPIXELS_PER_CHAR;
			}
		}
		else
		{
			// this is a full block
			c = 5;
		}
		
		// write character to display
		LCDsendChar(c);
	}

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本不卡免费在线视频| 久久久久久久性| 亚洲综合自拍偷拍| 欧美又粗又大又爽| 亚洲成人久久影院| 日韩欧美色综合网站| 国产精品一区专区| 国产精品丝袜一区| 色婷婷久久久亚洲一区二区三区| 一区二区三区日韩精品视频| 这里只有精品99re| 国产高清无密码一区二区三区| 日本一区二区久久| 欧美亚洲国产一区二区三区| 日本不卡一区二区三区高清视频| 亚洲精品一区二区三区蜜桃下载 | 欧美中文字幕久久| 日韩成人伦理电影在线观看| 久久亚洲影视婷婷| 91浏览器入口在线观看| 石原莉奈在线亚洲二区| 久久久久国产精品厨房| 色国产综合视频| 美国毛片一区二区| 1024亚洲合集| 91精品国产福利| a级高清视频欧美日韩| 天天影视涩香欲综合网 | 国产性色一区二区| 色狠狠色狠狠综合| 国产激情91久久精品导航| 亚洲一区二区五区| 欧美国产综合一区二区| 在线成人小视频| 丁香网亚洲国际| 免费在线观看一区| 一区二区三区中文字幕在线观看| 欧美成人a在线| 色先锋久久av资源部| 国产一级精品在线| 亚洲国产婷婷综合在线精品| 国产欧美一区二区精品性| 欧美精品一二三四| 91碰在线视频| 国产99一区视频免费| 日日摸夜夜添夜夜添国产精品 | 97se亚洲国产综合在线| 国产在线一区二区综合免费视频| 亚洲一区二区影院| 中文字幕在线观看不卡视频| 精品国产sm最大网站| 欧美色倩网站大全免费| 99re成人精品视频| 国产成人午夜视频| 国内外成人在线| 日本美女一区二区三区视频| 亚洲第一福利一区| 亚洲精品视频自拍| 国产精品福利一区| 欧美国产精品专区| 久久久另类综合| 久久久久国产精品厨房| 久久久久久电影| 精品精品国产高清a毛片牛牛| 7777精品伊人久久久大香线蕉经典版下载 | 色综合天天做天天爱| 国v精品久久久网| 国产精品自拍网站| 精品亚洲成a人在线观看| 免费成人小视频| 日本成人在线网站| 久久精品国产色蜜蜜麻豆| 青草国产精品久久久久久| 日日夜夜免费精品视频| 日韩高清在线一区| 欧美96一区二区免费视频| 蜜臀精品久久久久久蜜臀| 奇米精品一区二区三区在线观看 | 色久综合一二码| 日本韩国视频一区二区| 色哟哟精品一区| 在线免费亚洲电影| 欧美视频一区在线观看| 91.成人天堂一区| 日韩欧美一级二级三级| 久久综合狠狠综合久久综合88| 亚洲精品在线观| 国产精品免费视频一区| 亚洲三级视频在线观看| 亚洲最新视频在线观看| 午夜视频一区二区三区| 欧美aaaaa成人免费观看视频| 久久精品av麻豆的观看方式| 国产精品99久久久| av在线不卡观看免费观看| 日本韩国一区二区三区视频| 欧美久久久久久久久中文字幕| 欧美一区二区三区系列电影| 精品国内二区三区| 综合欧美一区二区三区| 午夜成人免费电影| 国产一区二区网址| 一本久道久久综合中文字幕| 欧美日产在线观看| 久久久不卡网国产精品一区| 亚洲图片欧美激情| 肉肉av福利一精品导航| 国产成人精品免费视频网站| 在线亚洲一区观看| 精品少妇一区二区三区 | 亚洲卡通欧美制服中文| 日韩经典中文字幕一区| 国产91在线看| 欧美日韩在线电影| 久久亚洲综合色| 性做久久久久久免费观看| 国产一区欧美一区| 91久久人澡人人添人人爽欧美| 制服丝袜亚洲网站| 最近中文字幕一区二区三区| 美女爽到高潮91| 一本久久综合亚洲鲁鲁五月天| 精品免费一区二区三区| 亚洲另类色综合网站| 国产在线一区二区| 欧美手机在线视频| 国产精品乱码妇女bbbb| 蜜臀av一区二区| 一本到三区不卡视频| 精品对白一区国产伦| 亚洲国产日韩综合久久精品| 成人av手机在线观看| 日韩亚洲欧美一区二区三区| 亚洲精品v日韩精品| 国产一本一道久久香蕉| 欧美精品高清视频| 亚洲欧美乱综合| 国产suv精品一区二区883| 日韩一级完整毛片| 亚洲国产日韩综合久久精品| bt7086福利一区国产| 久久九九影视网| 看电视剧不卡顿的网站| 欧美日本精品一区二区三区| 日韩美女视频一区| 成人少妇影院yyyy| 久久久久久久久久久黄色| 日韩电影在线免费| 欧美日韩国产乱码电影| 亚洲精品视频自拍| 91蜜桃免费观看视频| 国产精品三级视频| 国产成都精品91一区二区三 | 久久久久久久av麻豆果冻| 秋霞国产午夜精品免费视频| 欧美精品久久99| 天天综合色天天综合色h| 欧美日韩精品一区二区三区| 亚洲伦理在线精品| 91精品办公室少妇高潮对白| 亚洲色图另类专区| 91国产视频在线观看| 一区二区三区在线视频观看58 | 一本大道久久a久久精二百| 国产精品免费av| kk眼镜猥琐国模调教系列一区二区| 欧美精品一区二区三区四区| 久久av资源网| 精品国产一区二区精华| 国产一区二区伦理片| 久久一二三国产| 成人午夜激情片| 亚洲色图视频网| 欧洲视频一区二区| 午夜精品福利一区二区三区av| 欧美乱妇一区二区三区不卡视频| 亚洲电影激情视频网站| 日韩午夜激情视频| 国产精品538一区二区在线| 国产精品素人视频| 欧美亚洲一区三区| 视频一区在线播放| 26uuu欧美| 97超碰欧美中文字幕| 亚洲已满18点击进入久久| 538在线一区二区精品国产| 麻豆精品新av中文字幕| 久久蜜桃av一区二区天堂| hitomi一区二区三区精品| 一区二区三区波多野结衣在线观看| 欧美在线观看视频在线| 免费观看一级特黄欧美大片| 久久影院电视剧免费观看| gogogo免费视频观看亚洲一| 一区二区免费视频| 日韩午夜电影在线观看| av午夜一区麻豆| 日韩激情视频网站| 国产精品污网站| 欧美日韩亚洲国产综合|