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

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

?? lcd.c.bak

?? port of ARM to NOkia 3310 display
?? BAK
?? 第 1 頁 / 共 2 頁
字號:
#include "globals.h"
#include "EcosLogo.c"


/* Beep Routines
   Buzzer PORTX, bitY 
   10,5  //1kHz per secund
   5,5   //2kHz 
   7,5   //1428 Hz for .56 sec
   6,5
   Anton Ivanov '02
*/


void beep(unsigned char Rate, unsigned char Num)
{
	unsigned char count,count1;
	
	while(Num--)
	{
		for (count1 = 0;count1 < 20; ++count1)   
		{
			beep_0;
			for (count=0;count < 10;count++)
			{
			       hal_delay_us(Rate);  
			}
			beep_1;
			for (count=0;count < 10;count++)
			{
				hal_delay_us(Rate);  
			}
		}
	}
	
	return;
}


/*
        music
*/
void music(void)
{
    unsigned char c;
    
    for(c=5;c!=15;++c)
    {
        beep(c,3);
    }
    hal_delay_us(10);  
    for(c=15; c!=5; --c)
    {
        beep(c,3);
    }
    return;
}


void LedButInit(void)
{
     (*(volatile unsigned long *)ASHLING_IODIR) |= 0x01<< LEDPIN ;    // define LED-Pin as output
     (*(volatile unsigned long *)ASHLING_IODIR) &=~(0x01<< SWPIN  );	// define Switch-Pin as input
     (*(volatile unsigned long *)ASHLING_IODIR) |= 0x01<< SOUNDPIN ;    // define SOUND-Pin as output
    return;
}


///////////////////////////////////////////////////// B/W LCD /////////////////////////////////////////////////////////////////////////////////////


/*
	NOKIA INIT SUB
*/
void nokia_init(unsigned char contrast)
{
       //init port
      (*(volatile unsigned long *)ASHLING_IODIR) |= 0x1F<< 26  ;        
        
               
	// nokia LCD init
	nok_dc_1;                                       // bytes are stored in the display data ram, address counter, incremented automatically
       nok_cs_1;                                       // chip disabled
                         
        nok_res_0;                                      // reset chip during 50ms
         hal_delay_us(20000);  
        nok_res_1;
        
	bytefornokia=0x21;			// set extins extended instruction set
	nokia_write_command();
         hal_delay_us(20000);  
        bytefornokia = contrast;		// Vop  {184d - 190d}
	nokia_write_command();
	 hal_delay_us(20000);  
	bytefornokia = 0x06;			// Temp Coeficient
	nokia_write_command();
         hal_delay_us(20000);  
   	bytefornokia=0x13;			// bias 
	nokia_write_command();
         hal_delay_us(20000);  
	bytefornokia=0x20;			// 0x20 horizontal mode from left to right, X axe are incremented automatically , 0x22 for vertical addressing ,back on normal instruction set too
	nokia_write_command();
         hal_delay_us(20000);  
	bytefornokia=0x09;			// all on
	nokia_write_command();
	 hal_delay_us(20000);  	
        nokia_build_DDRAM();			// reset DDRAM, otherwise the lcd is blurred with random pixels
         hal_delay_us(20000);  
	bytefornokia=0x08;			// mod control blank change (all off)
	nokia_write_command();
	 hal_delay_us(20000);  			
	bytefornokia=0x0c;			// mod control normal change 
	nokia_write_command();
	 hal_delay_us(20000);  
      
      	return;
}


void LcdContrast (unsigned char contrast)
{
	//  LCD Extended Commands.
	bytefornokia = 0x21;			// mod control normal change 
	nokia_write_command();
    
   	bytefornokia = 0x80 | contrast;			
	nokia_write_command();

    

    //  LCD Standard Commands, horizontal addressing mode.
	bytefornokia = 0x20;			
	nokia_write_command();

   	return;
}



/*
	NOKIA WRITE CMD SUB
*/
void nokia_write_command(void)
{
        nok_dc_0;	// byte is a command it is read with the eight SCLK pulse
	nok_cs_0;	// chip enabled 
	nokia_write_dorc();
	nok_cs_1;	// chip disabled
}



/*
	NOKIA WRITE DATA SUB
*/
void nokia_write_data(void)
{
	nok_dc_1;
	nok_cs_0;	// chip enabled
	nokia_write_dorc();
	nok_cs_1;	// chip disabled
}



/*	
	NOKIA WRITE DORC SUB
*/
void nokia_write_dorc(void)			// serial write data or command subroutine
{
	unsigned char c;
	
	for (c=8;c>0;c--) 
        {
		nok_sclk_0;
		if ((bytefornokia&0x80)==0)
		{
			nok_sda_0;
		}
		else 
		{
			nok_sda_1;
		}
		nok_sclk_1;
		bytefornokia = bytefornokia<<1;
	}
}



/*
	NOKIA BUILD DDRAM SUB
*/
void nokia_build_DDRAM(void)	// clear all DDRAM (set all bits to zero)
{
	signed char ch, cm, cl;
	
	nok_sda_0;
	nok_dc_1;
	nok_cs_0;
	for (ch=6;ch>0;ch--)
        {				// 6 rows
		for (cm=84;cm>0;cm--)
                {			// 84 columns
			for (cl=8;cl>0;cl--)
                        {		// 8 pixels
				nok_sclk_0;
				nok_sclk_1;
			}
		}
        }
		nok_cs_1;
}




/*
	NOKIA GOTO XY SUB
*/
void nokia_gotoxy (unsigned char  xnokia, unsigned char  ynokia)	// Nokia LCD Position cursor
{
		bytefornokia=(0x40|(ynokia&0x07));		// Y axe initialisation: 0100 0yyy	
		nokia_write_command();
		
		bytefornokia=(0x80|(xnokia&0x7f));		// X axe initialisation: 1xxx xxxx
		nokia_write_command();
		
		return;
}



/*
	PRINT MESSAGE SUB
*/
void nokia_printmessage(const char* message, unsigned char big)	// Write message to LCD (C string type)
{
	while (*message)							// Look for end of string
		ascii_to_nokia(*message++, big);			//	
		
	return;
}



/*
	PRINT CHARACTER SUB
*/
void nokia_printchar(unsigned char  c, unsigned char big )					// Write 1 character to LCD 
{
	ascii_to_nokia(FontLookup[c][0], big);
}






/*
	ASCII TABLE
*/
void ascii_to_nokia(unsigned char c, unsigned char big)
{
	unsigned char row;
	
	
		for (row=0;row!=5;row++)//5
		{
			bytefornokia=FontLookup[c][row];		// and get it				
			nokia_write_data();				// send data to nokia
		
		}
	        if(big)
	        {
	            	//beep
			beep(3,3);
			//delay
			hal_delay_us(50000);
	
	        }
              
	return;
}

/*

/*
    Writes a character on the LCD drive in decimal
*/
void LcdDec(int c)
{
	unsigned int temp;

        temp=c;
	//tentousends
	if ((c/10000)>0)  ascii_to_nokia((c/10000)+'0', 0);
	c-=(c/10000)*10000;

        temp=c; 
	//tousends
        if ((c/1000)>0)   ascii_to_nokia((c/1000)+'0', 0);
        c-=(c/1000)*1000; 
	
        temp=c;
        //hundreds
	if ((c/100)>0)    ascii_to_nokia((c/100)+'0', 0);
	c-=(c/100)*100;

	//tens
	if (((temp/10)>0) || ((temp/100)>0))  ascii_to_nokia((c/10)+'0', 0);
	c-=(c/10)*10;

	//ones
	ascii_to_nokia((c/1)+'0', 0);
	
	return;
}






/*
   Display byte in bin
*/
void LcdBin(unsigned char byte)
{
      
      unsigned char count=8;

      while(count --)
      {
           LcdDec((byte&128)?1:0);
           byte <<= 1;
      }
      
      return;
}



/*
    CLEAR DISPLAY
*/
void cls(void)
{
	int i;
	
        
	for(i=0; i != LCD_CACHE_SIZE; i++)
        {
                bytefornokia=0;
                LcdCache[i]=0;
                nokia_write_data();
        }
        nokia_gotoxy(0,0);
      	return;
}



void LcdPixel ( unsigned char x, unsigned char y, unsigned char mode )
{
    int  index;
    unsigned char  offset;
    unsigned char  data;

    if ( x > LCD_X_RES ) return;
    if ( y > LCD_Y_RES ) return;

    index = ((y / 8) * 84) + x;
    offset  = y - ((y / 8) * 8);

    data = LcdCache[index];

    if ( mode == PIXEL_OFF )
    {
        data &= (~(0x01 << offset));
    }
    else if ( mode == PIXEL_ON )
    {
        data |= (0x01 << offset);
    }
    else if ( mode  == PIXEL_XOR )
    {
        data ^= (0x01 << offset);
    }

    LcdCache[index] = data;

    if ( index < LoWaterMark )
    {
        //  Update low marker.
        LoWaterMark = index;
    }

    if ( index > HiWaterMark )
    {
        //  Update high marker.
        HiWaterMark = index;
    }
    
    return;
}

/*--------------------------------------------------------------------------------------------------

  Name         :  LcdLine

  Description  :  Draws a line between two points on the display.

  Argument(s)  :  x1, y1 -> Absolute pixel coordinates for line origin.
                  x2, y2 -> Absolute pixel coordinates for line end.
                  mode   -> Off, On or Xor. See enum.

  Return value :  None.

--------------------------------------------------------------------------------------------------*/
void LcdLine ( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char mode )
{
    int dx, dy, stepx, stepy, fraction;

    dy = y2 - y1;
    dx = x2 - x1;

    if ( dy < 0 )
    {
        dy    = -dy;
        stepy = -1;
    }
    else
    {
        stepy = 1;
    }

    if ( dx < 0 )
    {
        dx    = -dx;
        stepx = -1;
    }
    else
    {
        stepx = 1;
    }

    dx <<= 1;
    dy <<= 1;

    LcdPixel( x1, y1, mode );

    if ( dx > dy )
    {
        fraction = dy - (dx >> 1);
        while ( x1 != x2 )
        {
            if ( fraction >= 0 )
            {
                y1 += stepy;
                fraction -= dx;
            }
            x1 += stepx;
            fraction += dy;
            LcdPixel( x1, y1, mode );
        }
    }
    else
    {
        fraction = dx - (dy >> 1);
        while ( y1 != y2 )
        {
            if ( fraction >= 0 )
            {
                x1 += stepx;
                fraction -= dy;
            }
            y1 += stepy;
            fraction += dx;
            LcdPixel( x1, y1, mode );
        }
    }

   return; 
}







void LcdUpdate ( void )
{
    int i;

    if ( LoWaterMark < 0 )
        LoWaterMark = 0;
    else if ( LoWaterMark >= LCD_CACHE_SIZE )
        LoWaterMark = LCD_CACHE_SIZE - 1;

    if ( HiWaterMark < 0 )
        HiWaterMark = 0;
    else if ( HiWaterMark >= LCD_CACHE_SIZE )
        HiWaterMark = LCD_CACHE_SIZE - 1;

    //  Set base address according to LoWaterMark.
    bytefornokia = 0x80 | (LoWaterMark % LCD_X_RES);    	
    nokia_write_command();   
   
    bytefornokia = 0x40 | (LoWaterMark / LCD_X_RES);   	
    nokia_write_command();   
    
    
    //  Serialize the video buffer.
    for ( i = LoWaterMark; i <= HiWaterMark; i++ )
    {
	bytefornokia = LcdCache[i]; 	
    	 nokia_write_data();
    }

    //  Reset watermark pointers.
    LoWaterMark = LCD_CACHE_SIZE - 1;
    HiWaterMark = 0;

    return;
}


/*-----------------------------------------------------------------------------
  Name         :  LcdGotoXY
  Description  :  Sets cursor location to xy location corresponding to basic
                  font size.
  Argument(s)  :  x, y -> Coordinate for new cursor position. Range: 1,1..14,6
  Return value :  None.
-----------------------------------------------------------------------------*/
void LcdGotoXY ( unsigned char x, unsigned char y )
{
    LcdCacheIdx = (x - 1) * 6 + (y - 1) * 84;
}




/*-----------------------------------------------------------------------------
  Name         :  LcdChr
  Description  :  Displays a character at current cursor location
                  and increment cursor location.
  Argument(s)  :  size -> Font size. See enum.
                  ch   -> Character to write.
  Return value :  None.
-----------------------------------------------------------------------------*/
void LcdChr (unsigned char ch )
{
    unsigned char i;//, c;
    //byte b1, b2;
    //int  tmpIdx;

    if ( LcdCacheIdx < LoWaterMark )
    {
        //  Update low marker.
        LoWaterMark = LcdCacheIdx;
    }

    if ( (ch < 0x20) || (ch > 0x7b) )
    {
        //  Convert to a printable character.
        ch = 92;
    }

    //if ( size == FONT_1X )
    //{
        for ( i = 0; i < 5; i++ )//5
        {
            LcdCache[LcdCacheIdx++] = FontLookup[ch][i] << 1;//FontLookup[ch - 32][i] << 1;
        }
    //}
    /*
    else if ( size == FONT_2X )
    {
        tmpIdx = LcdCacheIdx - 84;

        if ( tmpIdx < LoWaterMark )
        {
            LoWaterMark = tmpIdx;
        }

        if ( tmpIdx < 0 ) return;

        for ( i = 0; i < 5; i++ )
        {
            c = FontLookup[ch - 32][i] << 1;
            b1 =  (c & 0x01) * 3;
            b1 |= (c & 0x02) * 6;
            b1 |= (c & 0x04) * 12;
            b1 |= (c & 0x08) * 24;

            c >>= 4;
            b2 =  (c & 0x01) * 3;
            b2 |= (c & 0x02) * 6;
            b2 |= (c & 0x04) * 12;
            b2 |= (c & 0x08) * 24;

            LcdCache[tmpIdx++] = b1;
            LcdCache[tmpIdx++] = b1;
            LcdCache[tmpIdx + 82] = b2;
            LcdCache[tmpIdx + 83] = b2;
        }

        //  Update x cursor position.
        LcdCacheIdx += 11;
    }
    */
    
    if ( LcdCacheIdx > HiWaterMark )
    {
        //  Update high marker.
        HiWaterMark = LcdCacheIdx;
    }

    //  Horizontal gap between characters.
    LcdCache[LcdCacheIdx++] = 0x00;
}






/*-----------------------------------------------------------------------------
  Name         :  LcdStr
  Description  :  Displays a character at current cursor location and increment
                  cursor location according to font size.
  Argument(s)  :  size    -> Font size. See enum.
                  dataPtr -> Pointer to null terminated ASCII string to display.
  Return value :  None.
-----------------------------------------------------------------------------*/
void LcdStr (unsigned char *dataPtr )
{
    while ( *dataPtr )
    {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人三级在线观看| 国产精品美女久久久久高潮| 裸体歌舞表演一区二区| 欧美xxx久久| 丁香激情综合五月| 中文av一区二区| 色欧美乱欧美15图片| 午夜影视日本亚洲欧洲精品| 欧美一区二区三区在线观看视频| 久久草av在线| 国产精品美女久久久久久久久| 91视频观看免费| 日韩精品视频网| 精品不卡在线视频| 99久久99久久精品国产片果冻| 亚洲国产精品久久一线不卡| 日韩免费观看高清完整版在线观看| 久久99国产精品免费网站| 国产精品三级av在线播放| 一本色道**综合亚洲精品蜜桃冫| 99视频精品全部免费在线| 一区二区三区免费在线观看| 欧美一区二区三区精品| 欧美精品日韩综合在线| 欧美性受xxxx黑人xyx| 首页国产欧美日韩丝袜| 精品久久一区二区| 99精品热视频| 免费在线视频一区| 日韩理论电影院| 色成人在线视频| 日韩欧美中文一区| 精品少妇一区二区三区在线播放| 日韩女优av电影在线观看| 亚洲欧洲av在线| 日韩视频一区二区在线观看| 岛国精品在线播放| 成人美女视频在线观看18| 大尺度一区二区| 国产69精品久久777的优势| 国产成人丝袜美腿| av中文字幕一区| 91精品国产免费久久综合| 7777精品伊人久久久大香线蕉经典版下载| 一区二区三区不卡视频| 精品国产免费一区二区三区四区| 一区二区三区成人| 丝袜亚洲另类欧美综合| 亚洲一区成人在线| 风间由美一区二区av101| 色综合一区二区| 欧美日本国产一区| 欧美va亚洲va香蕉在线| 久久久777精品电影网影网 | 欧美一区二区三区男人的天堂| 日韩小视频在线观看专区| 久久青草欧美一区二区三区| 亚洲男人都懂的| 大白屁股一区二区视频| 日韩久久免费av| 99久久精品国产导航| 欧洲av在线精品| 亚洲欧洲精品一区二区精品久久久 | 最新国产の精品合集bt伙计| 久久国产精品区| 欧美性三三影院| 有码一区二区三区| 在线免费不卡电影| 亚洲日本免费电影| 狠狠色丁香婷综合久久| 3atv在线一区二区三区| 首页国产欧美久久| 欧美午夜免费电影| 亚洲国产精品自拍| 日韩欧美色综合| 亚洲国产日韩a在线播放性色| 国产精品综合av一区二区国产馆| 91精选在线观看| 国产自产高清不卡| 26uuu国产在线精品一区二区| 美国三级日本三级久久99| 欧美性受xxxx| 日韩精品乱码免费| 欧美日韩成人在线| 欧美男同性恋视频网站| 精品美女在线播放| 精品国产乱码久久久久久牛牛| 亚洲国产精品影院| 欧美三级欧美一级| 三级欧美韩日大片在线看| 欧美精品免费视频| 日韩专区一卡二卡| 日韩欧美国产午夜精品| 一区精品在线播放| 成人美女视频在线观看18| 国产色综合一区| 91小视频免费观看| 久久99精品国产.久久久久久| 日韩一级免费观看| 在线看不卡av| 亚洲一区二区三区中文字幕| 91国在线观看| 狠狠色伊人亚洲综合成人| 亚洲日本在线看| 欧美成人一区二区三区片免费| 一本一道综合狠狠老| 美女视频黄频大全不卡视频在线播放| 久久精品网站免费观看| 天天综合色天天综合色h| 久久精品视频免费观看| 欧美日韩国产综合视频在线观看 | 国产一区二区三区在线观看免费| 亚洲香肠在线观看| 成人永久aaa| 久久精品人人做人人综合| 91丝袜高跟美女视频| 午夜电影网亚洲视频| 欧美国产一区二区在线观看| 3d动漫精品啪啪一区二区竹菊| 欧美少妇一区二区| 99re热视频精品| 国产精选一区二区三区| 麻豆freexxxx性91精品| 精品一区在线看| 一区二区三区在线视频观看 | 色综合天天在线| 成人h动漫精品| 国产一二精品视频| 黄色日韩网站视频| 国产成人av电影免费在线观看| 日本vs亚洲vs韩国一区三区二区| 亚洲一区欧美一区| 亚洲免费在线电影| 亚洲一区av在线| 亚洲一区免费观看| 麻豆久久一区二区| 国产99久久精品| 在线亚洲一区观看| 亚洲小说欧美激情另类| 亚洲成人高清在线| 亚洲成人自拍一区| 免费在线观看日韩欧美| 另类小说图片综合网| 亚洲精品在线网站| 精品福利在线导航| 国产精品国产精品国产专区不蜜| 欧美国产综合一区二区| 《视频一区视频二区| 亚洲大尺度视频在线观看| 蜜桃一区二区三区在线| 粉嫩av一区二区三区粉嫩| 色一情一伦一子一伦一区| 91.com在线观看| 欧美成人一区二区| 国产精品久久久久aaaa樱花 | 色婷婷综合久久久| 亚洲精品一区二区三区影院| 一区二区中文视频| 天堂av在线一区| 国产在线一区二区综合免费视频| 91丝袜呻吟高潮美腿白嫩在线观看| 国产综合久久久久影院| 色婷婷综合久久久中文字幕| 91精品国产91热久久久做人人| 久久精品日产第一区二区三区高清版| 亚洲午夜av在线| 91丨九色丨黑人外教| 日韩三区在线观看| 亚洲一区在线视频| 色婷婷综合久久久久中文 | 欧美美女网站色| 麻豆国产91在线播放| 成人黄色国产精品网站大全在线免费观看| 亚洲国产精品久久艾草纯爱 | 91丨porny丨在线| 日韩欧美区一区二| 日韩国产欧美在线视频| 欧美日韩精品电影| 午夜精品aaa| 欧美日韩精品一区二区在线播放| 国产精品久久久久久户外露出 | 一区二区三区在线免费播放| 色一情一乱一乱一91av| 国产精品电影一区二区| 国产精品一品二品| 亚洲欧美影音先锋| 欧美午夜精品一区二区三区| 18欧美乱大交hd1984| 国产xxx精品视频大全| 亚洲视频香蕉人妖| 欧美性猛片xxxx免费看久爱| 精品国产免费人成电影在线观看四季| 亚洲成人午夜影院| 91麻豆精品国产91久久久久久| 狠狠色伊人亚洲综合成人| 久久影院午夜片一区| 国内精品嫩模私拍在线| 国产精品久久三| 日韩欧美123| 99精品黄色片免费大全|