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

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

?? lcd.c

?? port of ARM to NOkia 3310 display
?? C
?? 第 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.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
粉嫩蜜臀av国产精品网站| 日本电影亚洲天堂一区| 色婷婷精品大在线视频| 精品久久久久av影院 | 欧美人牲a欧美精品| 久久精品这里都是精品| 午夜亚洲国产au精品一区二区 | 亚洲精品你懂的| 狠狠狠色丁香婷婷综合激情| 91国产免费看| 国产亚洲欧美日韩日本| 琪琪一区二区三区| 91女神在线视频| 国产精品麻豆一区二区| 精品一区二区在线免费观看| 在线不卡欧美精品一区二区三区| 亚洲美女精品一区| 成人av在线一区二区| 伊人婷婷欧美激情| 不卡一二三区首页| 欧美国产精品一区二区三区| 国产精品综合一区二区三区| 欧美成人精品福利| 久久国产精品无码网站| 欧美一级久久久久久久大片| 午夜久久久久久久久| 精品视频在线免费观看| 亚洲一区二区中文在线| 欧美在线你懂得| 亚洲一区在线看| 欧美视频你懂的| 亚洲电影第三页| 67194成人在线观看| 日本在线不卡视频| 日韩欧美的一区二区| 免费人成在线不卡| 久久只精品国产| 国产一区91精品张津瑜| 国产欧美一区视频| 成人精品国产免费网站| 亚洲女同一区二区| 在线观看区一区二| 免费成人结看片| 久久久久久久精| 成人黄色在线看| 亚洲自拍偷拍网站| 欧美精品乱人伦久久久久久| 麻豆国产精品一区二区三区| 日韩精品一区二| 成人动漫视频在线| 午夜国产精品一区| 精品精品欲导航| 成人丝袜视频网| 亚洲综合色视频| 精品美女在线播放| 99免费精品在线观看| 一区二区三区欧美在线观看| 国产精品国产a| 欧美色精品在线视频| 老司机精品视频一区二区三区| 国产日韩影视精品| 91久久精品一区二区| 美女诱惑一区二区| 亚洲色图在线播放| 欧美一级精品大片| eeuss鲁片一区二区三区在线看 | 久久久久久麻豆| 国产精品中文字幕一区二区三区| 国产精品三级视频| 欧美久久久久免费| 国产盗摄一区二区三区| 亚洲成人黄色影院| 国产欧美一区二区精品性色| 欧美视频自拍偷拍| 国产在线日韩欧美| 亚洲午夜日本在线观看| 国产欧美一区二区精品性色超碰| 欧美体内she精高潮| 国产成人综合亚洲91猫咪| 亚洲444eee在线观看| 国产精品国产自产拍在线| 3d动漫精品啪啪1区2区免费| 99久久久久久| 国产精品456露脸| 天天操天天综合网| 亚洲激情图片小说视频| 国产人成亚洲第一网站在线播放 | 日韩一区二区视频在线观看| 91丨九色丨黑人外教| 狠狠久久亚洲欧美| 日本美女一区二区| 性欧美大战久久久久久久久| 中文字幕一区二区三| 国产欧美精品一区二区三区四区| 3d成人h动漫网站入口| 欧亚一区二区三区| 91亚洲精品久久久蜜桃网站| 国产成人午夜99999| 久99久精品视频免费观看| 天堂蜜桃一区二区三区| 亚洲欧美一区二区久久| 中文字幕乱码一区二区免费| 欧美精品一区二区久久婷婷| 欧美日韩卡一卡二| 欧美日韩国产一级| 欧美日韩三级视频| 欧美三级视频在线观看| 91久久精品一区二区三| 一本色道亚洲精品aⅴ| fc2成人免费人成在线观看播放| 国产成人精品亚洲午夜麻豆| 国产精品综合在线视频| 国产成人福利片| 国产69精品久久99不卡| 成人免费观看视频| 成人高清伦理免费影院在线观看| 成人国产一区二区三区精品| 成人精品视频一区二区三区尤物| 日本精品免费观看高清观看| 成人一道本在线| 精品一区二区三区欧美| 美国十次综合导航| 国产一区二区三区久久久 | 欧美在线看片a免费观看| 99精品黄色片免费大全| 91久久精品日日躁夜夜躁欧美| 色网综合在线观看| 欧美日韩亚洲综合一区二区三区| 欧美三级视频在线播放| 欧美一区二区性放荡片| 久久人人爽人人爽| 中文字幕一区av| 亚洲成人午夜影院| 久久99久国产精品黄毛片色诱| 韩国一区二区三区| 成人app软件下载大全免费| 在线观看视频91| 欧美一卡2卡三卡4卡5免费| 久久综合中文字幕| 最新国产精品久久精品| 午夜免费欧美电影| 国产91露脸合集magnet| 在线观看欧美黄色| 久久免费的精品国产v∧| 国产精品久久免费看| 亚洲bdsm女犯bdsm网站| 国产福利一区二区三区视频在线 | 亚洲精品国产无套在线观| 亚洲成av人片www| 国产一区亚洲一区| 色香蕉成人二区免费| 欧美xxxxx牲另类人与| 日韩理论片一区二区| 蜜桃视频在线观看一区二区| www.在线成人| 日韩欧美国产综合一区| 亚洲乱码中文字幕综合| 精品一区二区三区香蕉蜜桃| 91日韩精品一区| 26uuu亚洲婷婷狠狠天堂| 亚洲一区在线播放| 成人小视频在线| 日韩欧美一区二区视频| 一区二区三区精品在线观看| 国产在线国偷精品免费看| 欧美视频在线不卡| 国产欧美日产一区| 精品一区二区在线看| 精品视频在线视频| 国产精品理论片在线观看| 久久99在线观看| 欧美日韩欧美一区二区| 国产精品国产精品国产专区不片| 韩国三级电影一区二区| 欧美乱妇23p| 洋洋av久久久久久久一区| a亚洲天堂av| 国产人伦精品一区二区| 久久精品国产999大香线蕉| 欧美图片一区二区三区| 亚洲狼人国产精品| 99久久综合精品| 中文字幕乱码日本亚洲一区二区| 免费观看91视频大全| 欧美精品视频www在线观看| 亚洲激情综合网| 99re视频精品| 中文字幕一区三区| 成人福利在线看| 国产女人18毛片水真多成人如厕| 久草中文综合在线| 日韩无一区二区| 蜜臀av一区二区| 欧美电影免费观看高清完整版在 | 99久久精品情趣| 中文无字幕一区二区三区| 国产精品99久久久久久似苏梦涵 | 欧美一区二区三区白人| 婷婷综合另类小说色区| 欧美另类久久久品|