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

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

?? lcd.c

?? yampp mp3 reference
?? C
字號:

/*
  Copyright (C) 2001 Jesper Hansen <jesperh@telia.com>.

  This file is part of the yampp system.

  This program is free software; you can redistribute it and/or
  modify it under the terms of the GNU General Public License
  as published by the Free Software Foundation; either version 2
  of the License, or (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software Foundation, 
  Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/


#include <io.h>

#include "types.h"
#include "delay.h"
#include "uart.h"

#include "lcd.h"


static u08 lcd_x, lcd_y;


/*************************************************************/
/********************** LOCAL FUNCTIONS **********************/
/*************************************************************/


u08 LCDSetAddress(u08 adr) 
{ 
	return *(u08 *) (0xE000+adr);		
	// dummy return to avoid optimization problems
}



static void lcd_write(u08 data,u08 rs) 
{
	// setup RS and RW pins
    if (rs) 
    	LCDSetAddress(LCD_IO_DATA + LCD_IO_WRITE);
    else    
    	LCDSetAddress(LCD_IO_FUNCTION + LCD_IO_WRITE);

	cbi(MCUCR, SRE);				// disable EXTRAM
	outp(0xff, DDR(LCD_DATA_PORT));	// set port as output
	outp(data, LCD_DATA_PORT);		// write byte
	lcd_e_high();					// set LCD enable high
	lcd_e_low();					// set LCD enable low
	
	sbi(MCUCR, SRE);	// enable RAM
}



static u08 lcd_read(u08 rs) 
{
    register u08 data;

	// setup RS and RW pins
    if (rs) 
    	LCDSetAddress(LCD_IO_DATA + LCD_IO_READ);
    else    
    	LCDSetAddress(LCD_IO_FUNCTION + LCD_IO_READ);

	cbi(MCUCR, SRE);				// disable EXTRAM
	outp(0x00, DDR(LCD_DATA_PORT));	// set port as input
	lcd_e_high();					// set LCD enable high
	data = inp(PIN(LCD_DATA_PORT));	// read byte
	lcd_e_low();					// set LCD enable low
	sbi(MCUCR, SRE);				// enable EXTRAM

    return data;
}


static void lcd_waitbusy(void)
/* loops while lcd is busy */
{
	u16 i = 0;
    while (lcd_read(0) & (1<<LCD_BUSY)) 
    {
    	i++;
    	if (i>1000)
    		return;
    }
}


static void lcd_newline(void)
/* goto start of next line */
{
    lcd_x = 0;
    if (++lcd_y >= LCD_LINES)
        lcd_y = 0;
}


static void lcd_goto(void)
/* goto position (lcd_x,lcd_y) */
{
    lcd_command((1<<LCD_DDRAM)+LCD_LINE_LENGTH*lcd_y+lcd_x);
}


/*************************************************************/
/********************* PUBLIC FUNCTIONS **********************/
/*************************************************************/

void lcd_command(u08 cmd)
/* send commando <cmd> to LCD */
{
    lcd_waitbusy();
    lcd_write(cmd, 0);
}

void lcd_data(u08 data)
/* send data <data> to LCD */
{
    lcd_waitbusy();
    lcd_write(data, 1);
}


void lcd_gotoxy(u08 x, u08 y)
/* goto position (x,y) */
{
    lcd_x = x; lcd_y = y;
    lcd_goto();
}


void lcd_clrscr(void)
/* clear lcd */
{
    lcd_x = lcd_y = 0;
    lcd_command(1<<LCD_CLR);
    delay(2000);
}

void lcd_home(void)
/* set cursor to home position */
{
    lcd_x = lcd_y = 0;
    lcd_command(1<<LCD_HOME);
    delay(2000);
}

void lcd_putchar(u08 data)
/* print character to current cursor position */
{
    lcd_waitbusy();
    if (data=='\n') {
        lcd_newline();
        lcd_goto();
    }
    else {
        if (++lcd_x >= LCD_LINE_LENGTH) {
            lcd_newline();
            lcd_goto();
        }
        lcd_write(data, 1);
    }
}


void lcd_puts(char s[])
/* print string on lcd (no auto linefeed) */
{
    register u08 *c;

    if (!(c=s)) return;

    while (*c) {
        lcd_putchar(*c);    
        c++;
    }
}

void lcd_init(u08 cursor, u08 fnc)
/* cursor:   0 = off, 2 = on, 3 = blinking */
/* fnc: see LCD_FUNCTION_xxx */
{
    u08 wait[] = { 250, 78, 1, 1 };
    register u08 i;

    /* configure control line pins as output */
    sbi(DDR(LCD_E_PORT),  LCD_E_PIN);

    /* set enable line high */
    sbi(LCD_E_PORT, LCD_E_PIN);

    /* enable external SRAM (memory mapped lcd) and wait states */
    outp((1<<SRE)|(1<<SRW), MCUCR);


    fnc |= (1<<LCD_FUNCTION);
    /* reset lcd */
    for (i=0; i<4; i++) {
        delay(wait[i]<<6);                     /* 16ms, 5ms, 64us, 64us */
        lcd_write(fnc, 0);                     /* reset function */    
    }

    lcd_command(1<<LCD_ON);
    lcd_clrscr();
    
    lcd_command(LCD_MODE_DEFAULT);
    lcd_command((1<<LCD_ON)|(1<<LCD_ON_DISPLAY)|cursor);
} 


                             

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www.亚洲在线| 成人av网址在线观看| 国产欧美日韩精品a在线观看| 99这里只有久久精品视频| 琪琪一区二区三区| 亚洲人精品一区| 国产偷v国产偷v亚洲高清| 欧美日韩一区二区三区在线看 | 成人性生交大合| 日韩av高清在线观看| 亚洲精品免费在线观看| 国产午夜精品久久久久久久| 3d动漫精品啪啪一区二区竹菊| 99国产精品久久久久久久久久久| 狠狠色丁香久久婷婷综合_中| 亚洲国产精品自拍| 亚洲欧洲精品一区二区三区不卡| 欧美变态tickling挠脚心| 欧美日韩国产精品自在自线| 91视频一区二区| 丁香一区二区三区| 国产美女精品在线| 蜜桃av一区二区| 日韩精品亚洲一区二区三区免费| 亚洲毛片av在线| 中文字幕制服丝袜一区二区三区| 久久色在线视频| 欧美成人伊人久久综合网| 欧美日韩午夜精品| 欧美久久久久中文字幕| 欧美亚洲国产一区二区三区| 99久久久精品| 91视频在线观看免费| 91亚洲精品久久久蜜桃| www.99精品| eeuss国产一区二区三区| 丰满少妇久久久久久久| 国产99久久精品| 国产精品18久久久久久久久久久久| 蜜臀av性久久久久蜜臀aⅴ| 日本网站在线观看一区二区三区| 日韩中文字幕亚洲一区二区va在线| 亚洲猫色日本管| 亚洲欧美日韩国产中文在线| 亚洲婷婷国产精品电影人久久| 国产精品色呦呦| 亚洲国产成人私人影院tom| 国产午夜精品在线观看| 日本一区二区三区四区在线视频| 中文字幕av不卡| 综合色中文字幕| 一区二区三区 在线观看视频| 亚洲一区视频在线观看视频| 亚洲香蕉伊在人在线观| 日韩中文字幕亚洲一区二区va在线 | 日本一区二区三区电影| 国产精品久久久久影院| 亚洲欧洲精品一区二区三区不卡| 成人免费一区二区三区视频| 亚洲综合在线第一页| 午夜成人免费视频| 国产最新精品免费| 91一区一区三区| 欧美一区二区久久久| 精品电影一区二区| 国产精品国产三级国产aⅴ原创 | 综合久久久久综合| 亚洲一区二区三区激情| 日韩电影一二三区| 国产成人精品一区二| 99精品久久99久久久久| 欧美日本一区二区| 26uuu国产日韩综合| 日韩毛片一二三区| 视频一区二区不卡| 国产福利一区二区三区视频在线 | 韩国三级中文字幕hd久久精品| 韩国女主播一区| av中文字幕亚洲| 欧美日韩一区二区不卡| 精品毛片乱码1区2区3区| 国产精品嫩草久久久久| 日韩vs国产vs欧美| 99久久综合色| 精品日韩欧美在线| 亚洲精品亚洲人成人网| 久久国产精品露脸对白| 97久久久精品综合88久久| 日韩欧美国产一区二区在线播放| 国产精品久久久久天堂| 日韩精品免费视频人成| 成人av免费在线| 欧美第一区第二区| 亚洲一区二区三区国产| 成人免费观看男女羞羞视频| 91精品国产欧美日韩| 亚洲欧美日韩人成在线播放| 精品一区二区免费| 欧美色视频一区| 国产日韩综合av| 日本不卡免费在线视频| 日本韩国一区二区| 国产三级欧美三级日产三级99| 日韩在线a电影| 欧美午夜片在线观看| 国产精品久久三| 国产麻豆一精品一av一免费| 69av一区二区三区| 亚洲综合激情网| 国产91丝袜在线播放0| 欧美一区二区三区婷婷月色| 亚洲国产色一区| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 国产精品久久久久国产精品日日| 蜜桃视频免费观看一区| 欧美三级视频在线观看| 亚洲欧美日韩在线播放| av在线这里只有精品| 国产清纯白嫩初高生在线观看91| 免费三级欧美电影| 91精品国产一区二区| 亚洲第一精品在线| 欧美午夜一区二区三区 | 九九**精品视频免费播放| 欧美日韩国产综合一区二区三区| 亚洲欧洲三级电影| 不卡欧美aaaaa| 中文字幕在线不卡视频| jizzjizzjizz欧美| 国产精品传媒入口麻豆| 成人一区二区三区视频在线观看| 久久九九全国免费| 高清视频一区二区| 国产精品欧美精品| 国产69精品久久99不卡| 中文字幕的久久| 99久久久久久99| 亚洲精品国产a| 中文字幕永久在线不卡| 粉嫩嫩av羞羞动漫久久久 | 国产日韩精品一区二区三区在线| 国产乱码精品一区二区三区忘忧草 | 日韩精品一区二区三区视频播放| 免费观看一级欧美片| 欧美一区二区在线不卡| 麻豆视频一区二区| 精品国产免费一区二区三区四区 | 一区二区三区成人| 欧美群妇大交群中文字幕| 亚洲大片在线观看| 日韩欧美国产电影| 国产成人在线观看| 国产精品毛片高清在线完整版| 99久久精品国产一区| 亚洲精品欧美综合四区| 欧美日韩免费一区二区三区| 蜜桃av一区二区在线观看| 久久久www成人免费毛片麻豆| 国产aⅴ精品一区二区三区色成熟| 中文字幕国产一区| 欧美日免费三级在线| 奇米色777欧美一区二区| wwww国产精品欧美| 99精品热视频| 婷婷开心久久网| 久久久精品综合| 91麻豆国产福利精品| 日韩精品免费视频人成| 国产亚洲精品bt天堂精选| 99久久免费精品| 蜜臀av性久久久久蜜臀aⅴ| 国产精品天干天干在线综合| 在线亚洲一区观看| 日韩情涩欧美日韩视频| 国产激情91久久精品导航| 亚洲色图视频网站| 欧美一级淫片007| 成人黄色在线视频| 性做久久久久久久久| 久久精品欧美一区二区三区不卡| 色婷婷亚洲综合| 精品一区二区三区蜜桃| 一区二区三区在线免费播放| 精品少妇一区二区三区日产乱码 | 欧美男人的天堂一二区| 国内不卡的二区三区中文字幕| 亚洲美女免费视频| 久久综合九色综合97婷婷女人 | 日韩一区二区三区电影| 99re在线精品| 久久99久久久久| 亚洲最新视频在线观看| 国产亚洲精品aa| 欧美一区二区免费观在线| 色婷婷综合久久久| 国产一区欧美二区| 天天操天天色综合| 日韩一区在线免费观看| 欧美精品一区二区在线播放| 精品视频1区2区3区|