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

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

?? sed1520.c

?? Proteus simulation of graphical lcd
?? C
字號:
/**************************************************************************
 *                                                                         
 *   sed1520.c                                                             
 *   LCD display controller interface routines for graphics modules        
 *   with onboard SED1520 controller(s) in "write-only" setup              
 *                                                                         
 *   Version 1.02 (20051031)                                               
 *                                                                         
 *   For Atmel AVR controllers with avr-gcc/avr-libc                       
 *   Copyright (c) 2005                                                    
 *     Martin Thomas, Kaiserslautern, Germany                              
 *     <eversmith@heizung-thomas.de>                                       
 *     http://www.siwawi.arubi.uni-kl.de/avr_projects                      
 *
 *   Permission to use in NON-COMMERCIAL projects is herbey granted. For
 *   a commercial license contact the author.
 *
 *   The above copyright notice and this permission notice shall be included in all
 *   copies or substantial portions of the Software.
 *
 *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
 *   FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
 *   COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
 *   IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *                                                                         
 *
 *   partly based on code published by:                                    
 *   Michael J. Karas and Fabian "ape" Thiele
 *
 *
 ***************************************************************************/

/* 
   An Emerging Display EW12A03LY 122x32 Graphics module has been used
   for testing. This module only supports "write". There is no option
   to read data from the SED1520 RAM. The SED1520 R/W line on the 
   module is bound to GND according to the datasheet. Because of this 
   Read-Modify-Write using the LCD-RAM is not possible with the 12A03 
   LCD-Module. So this library uses a "framebuffer" which needs 
   ca. 500 bytes of the AVR's SRAM. The libray can of cause be used 
   with read/write modules too.
*/

/* tab-width: 4 */

#include <avr/io.h>
#include <avr/delay.h>
#include <stdint.h>
#include "sed1520.h"
#include "fonts.h"
#include "bmp.h"

/* pixel level bit masks for display */
/* this array is setup to map the order */
/* of bits in a byte to the vertical order */
/* of bits at the LCD controller */
const unsigned char l_mask_array[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; /* TODO: avoid or PROGMEM */

/* the LCD display image memory */
/* buffer arranged so page memory is sequential in RAM */
unsigned char l_display_array[LCD_Y_BYTES][LCD_X_BYTES];

/* control-lines hardware-interface (only "write") */
#define LCD_CMD_MODE()     LCDCTRLPORT &= ~(1<<LCDCMDPIN)
#define LCD_DATA_MODE()    LCDCTRLPORT |=  (1<<LCDCMDPIN)
#define LCD_ENABLE_E1()    LCDCTRLPORT &= ~(1<<LCDE1PIN)
#define LCD_DISABLE_E1()   LCDCTRLPORT |=  (1<<LCDE1PIN)
#define LCD_ENABLE_E2()    LCDCTRLPORT &= ~(1<<LCDE2PIN)
#define LCD_DISABLE_E2()   LCDCTRLPORT |=  (1<<LCDE2PIN)

/* 
**
** Low level LCD Controller Interface Support Routines
**
*/

static void lcd_strobe_delay(void)
 { //
#ifndef LCD_SIM
   _delay_us(1);
#endif
 }

static void lcd_long_delay(void)
 {
#ifndef LCD_SIM
   _delay_ms(100);
#endif
 }

static void lcd_strobe_e(const unsigned char ncontr)
 { lcd_strobe_delay();

   if ( ncontr & 0x01 ) 
      LCD_ENABLE_E1();

   if ( ncontr & 0x02 ) 
      LCD_ENABLE_E2();

   lcd_strobe_delay();

   LCD_DISABLE_E1();
   LCD_DISABLE_E2();
 }


/* 
**
** low level routine to send a byte value 
** to the LCD controller control register. 
** entry argument is the data to output 
** and the controller to use
** 1: IC 1, 2: IC 2, 3: both ICs
**
*/
void lcd_out_ctl(const unsigned char cmd, const unsigned char ncontr)
 { LCD_CMD_MODE();
   LCDDATAPORT = cmd;
   lcd_strobe_e(ncontr);
 }

/* 
**
** low level routine to send a byte value 
** to the LCD controller data register. entry argument
** is the data to output and the controller-number
**
*/
void lcd_out_dat(const unsigned char dat, const unsigned char ncontr)
 { LCD_DATA_MODE();
   LCDDATAPORT = dat;
   lcd_strobe_e(ncontr);
 }


/*
** 
** routine to initialize the operation of the LCD display subsystem
**
*/
void lcd_init(void)
 { LCDDATADDR = 0xff; /* all output */
   LCDCTRLDDR |= ( (1<<LCDCMDPIN) | (1<<LCDE1PIN) | (1<<LCDE2PIN) );

   lcd_out_ctl(0,3);
   lcd_out_ctl(LCD_RESET,3);
   lcd_long_delay();
   
   lcd_out_ctl(LCD_DISP_ON,3);
   lcd_out_ctl(LCD_SET_ADC_REV,3); // !
   lcd_out_ctl(LCD_SET_LINE+0,3);
   lcd_out_ctl(LCD_SET_PAGE+0,3);
   lcd_out_ctl(LCD_SET_COL+LCD_STARTCOL_REVERSE,3);
 } 


#ifdef LCD_DEBUG

/* fills complete area with pattern - direct to LCD-RAM */
void lcd_test(const unsigned char pattern)
 { unsigned char page, col;

	for (page=0; page<LCD_Y_BYTES; page++) 
    { lcd_out_ctl(LCD_SET_PAGE+page,3);
      lcd_out_ctl(LCD_SET_COL+LCD_STARTCOL_REVERSE,3); // !
      for (col=0; col<LCD_X_BYTES/2; col++) 
         lcd_out_dat(pattern,3);
		 
    }
 }

/* raw write to LCD-RAM - used for debugging */
void lcd_raw(const unsigned char page, const unsigned char col, const unsigned char nctrl, const unsigned char pattern)
 { lcd_out_ctl(LCD_SET_PAGE+page,nctrl);
   lcd_out_ctl(LCD_SET_COL+col,nctrl);	
   lcd_out_dat(pattern,nctrl);
 }

#endif /* LCD_DEBUG */


/* fill buffer and LCD with pattern */
void lcd_fill(const unsigned char pattern)
 { unsigned char page, col;

   for (page=0; page<LCD_Y_BYTES; page++) 
    { for (col=0; col<LCD_X_BYTES; col++) 
         l_display_array[page][col]=pattern;
    }
   lcd_update_all();
 }


void lcd_erase(void)
 { lcd_fill(0x00);
   lcd_update_all();
 }

/*
**
** Updates area of the display. Writes data from "framebuffer" 
** RAM to the lcd display controller RAM.
** 
** Arguments Used:
**    top     top line of area to update.
**    bottom  bottom line of area to update.
**    from MJK-Code
**
*/
void lcd_update(const unsigned char top, const unsigned char bottom)
 { unsigned char x;
   unsigned char y;
   unsigned char yt;
   unsigned char yb;
   unsigned char *colptr;
   
   /* setup bytes of range */
   yb = bottom >> 3;
   yt = top >> 3;		

   for(y = yt; y <= yb; y++)
    { lcd_out_ctl(LCD_SET_PAGE+y,3);	/* set page */
//     lcd_out_ctl(LCD_SET_COL+LCD_STARTCOL_REVERSE,3);
     lcd_out_ctl(LCD_SET_COL+0,3);
      colptr = &l_display_array[y][0];

      for (x=0; x < LCD_X_BYTES; x++)
       { if ( x < LCD_X_BYTES/2 ) 
            lcd_out_dat(*colptr++,1);
         else 
            lcd_out_dat(*colptr++,2);
       }
    }
 }



void lcd_update_all(void)
 { lcd_update(SCRN_TOP,SCRN_BOTTOM);
 }



/* sets/clears/switchs(XOR) dot at (x,y) */
void lcd_dot(const unsigned char x, const unsigned char y, const unsigned char mode) 
 { unsigned char bitnum, bitmask, yByte;
   unsigned char *pBuffer; /* pointer used for optimisation */

   if ( ( x > SCRN_RIGHT ) || ( y > SCRN_BOTTOM ) ) return;

   yByte   = y >> 3; 
   bitnum  = y & 0x07;
   bitmask = l_mask_array[bitnum]; // bitmask = ( 1 << (y & 0x07) );
   pBuffer = &(l_display_array[yByte][x]);
   switch (mode) 
    { case LCD_MODE_SET:
         *pBuffer |= bitmask;
         break;
      case LCD_MODE_CLEAR:
         *pBuffer &= ~bitmask;
         break;
      case LCD_MODE_XOR:
         *pBuffer ^= bitmask;
         break;
      default: break;
    }
 }


/* line- and circle-function from a KS0108-library by F. Thiele */

void lcd_line( uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, const uint8_t mode ) 
 { uint8_t length, xTmp, yTmp, i, y, yAlt;
   int16_t m;

   if(x1 == x2) 
    { // vertical line
      // x1|y1 must be the upper point
      if(y1 > y2) 
       { xTmp = x1;
         yTmp = y1;
         x1 = x2;
         y1 = y2;
         x2 = xTmp;
         y2 = yTmp;
       }
      length = y2-y1;
      for(i=0; i<=length; i++) 
         lcd_dot(x1, y1+i, mode);
    } 
   else if(y1 == y2) 
    { // horizontal line
      // x1|y1 must be the left point
      if(x1 > x2) 
       { xTmp = x1;
         yTmp = y1;
         x1 = x2;
         y1 = y2;
         x2 = xTmp;
         y2 = yTmp;
       }

      length = x2-x1;
      for(i=0; i<=length; i++) 
         lcd_dot(x1+i, y1, mode);
       
    } 
   else 
    { // x1 must be smaller than x2
      if(x1 > x2) 
       { xTmp = x1;
         yTmp = y1;
         x1 = x2;
         y1 = y2;
         x2 = xTmp;
         y2 = yTmp;
       }
		
      if((y2-y1) >= (x2-x1) || (y1-y2) >= (x2-x1)) 
       { // angle larger or equal 45

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品精品欲导航| 日日骚欧美日韩| 午夜精品福利在线| 国产一二三精品| 在线亚洲一区二区| 久久精品免费在线观看| 亚洲欧洲av色图| 亚洲激情自拍偷拍| 国产一区在线观看视频| 欧美日韩大陆在线| 最新成人av在线| 国产精品一级片| 欧美精品在线观看一区二区| 日韩码欧中文字| 成人永久免费视频| 精品国产乱码久久久久久浪潮| 一区二区不卡在线播放 | 亚洲成人av资源| 北岛玲一区二区三区四区| 欧美精品一区二区高清在线观看 | 亚洲欧洲另类国产综合| 国产**成人网毛片九色| 欧美猛男gaygay网站| 亚洲免费看黄网站| 成人国产精品免费观看动漫| 精品裸体舞一区二区三区| 五月综合激情日本mⅴ| 91社区在线播放| 国产精品久久久久aaaa樱花| 国产成人午夜电影网| 日韩欧美一级片| 奇米影视一区二区三区| 欧美一区二区私人影院日本| 日韩精品五月天| 日韩一区二区三区四区 | 精品日韩成人av| 精品制服美女久久| 精品久久国产97色综合| 国产一区二区剧情av在线| 蜜桃久久久久久| 久久精品亚洲麻豆av一区二区| 日本一区中文字幕| 欧美一级理论性理论a| 免费成人在线播放| 欧美一区二区三区免费大片| 秋霞av亚洲一区二区三| 日韩精品专区在线影院观看| 久热成人在线视频| 亚洲欧美日韩国产综合在线| 99久久er热在这里只有精品66| 国产精品超碰97尤物18| 欧美最猛黑人xxxxx猛交| 午夜精品久久久久久久久久| 精品国产免费人成在线观看| 国产剧情一区在线| 亚洲视频一区二区在线| 欧美日韩国产欧美日美国产精品| 日产国产高清一区二区三区| 久久九九国产精品| 91麻豆免费看| 不卡av在线免费观看| 亚洲欧洲av另类| 在线不卡免费av| 国产成人自拍网| 亚洲影视资源网| 26uuu欧美| 在线看日韩精品电影| 毛片av一区二区| 亚洲欧洲精品成人久久奇米网| 欧美人妇做爰xxxⅹ性高电影| 国产美女在线精品| 亚洲国产毛片aaaaa无费看| 精品日韩在线观看| 色天天综合色天天久久| 毛片一区二区三区| 一区二区三区鲁丝不卡| 久久久精品tv| 欧美二区在线观看| av网站免费线看精品| 免费美女久久99| 亚洲综合色成人| 国产精品无圣光一区二区| 欧美视频你懂的| 成人黄色在线网站| 久久成人综合网| 亚洲永久免费av| 国产精品久久久久国产精品日日| 欧美一区二区三区喷汁尤物| 97精品国产露脸对白| 国内精品写真在线观看| 午夜激情综合网| 亚洲精品视频在线看| 久久久久久久久久久电影| 欧美高清hd18日本| 91久久一区二区| 成人av影院在线| 在线观看一区不卡| 国产白丝精品91爽爽久久| 蜜臀精品久久久久久蜜臀| 亚洲国产精品久久久久婷婷884 | 91久久精品日日躁夜夜躁欧美| 国产福利一区二区三区视频在线 | 激情综合色丁香一区二区| 婷婷综合在线观看| 亚洲午夜久久久久久久久电影网| 国产精品家庭影院| 中文乱码免费一区二区| 2023国产精品自拍| 日韩视频在线观看一区二区| 91精品在线观看入口| 欧美精三区欧美精三区| 欧美午夜不卡在线观看免费| 欧美性受xxxx黑人xyx性爽| 99久久久国产精品免费蜜臀| 丁香婷婷综合网| 成人深夜视频在线观看| 成人小视频在线观看| www.在线成人| 色哟哟亚洲精品| 欧美中文一区二区三区| 欧美日韩国产综合久久| 精品视频资源站| 3d成人h动漫网站入口| 日韩欧美资源站| 久久精品一区二区三区不卡牛牛| 国产午夜久久久久| 国产精品久久三区| 亚洲精品少妇30p| 亚洲电影一区二区| 另类欧美日韩国产在线| 国产呦萝稀缺另类资源| 成人激情午夜影院| 在线免费不卡视频| 91精品国产日韩91久久久久久| 欧美videos大乳护士334| 久久蜜桃av一区二区天堂 | 玉米视频成人免费看| 午夜av电影一区| 国产在线乱码一区二区三区| 成人涩涩免费视频| 在线观看视频91| 精品欧美久久久| 亚洲欧洲韩国日本视频| 视频一区二区不卡| 国产精品一区二区久激情瑜伽| 99久久国产免费看| 欧美一二区视频| 国产精品久久久久久久久搜平片| 亚洲一区二区三区四区五区中文| 日本不卡一二三区黄网| 成人精品一区二区三区中文字幕| 欧洲另类一二三四区| 精品黑人一区二区三区久久| 成人欧美一区二区三区小说 | 国内不卡的二区三区中文字幕| 不卡视频免费播放| 日韩一区二区电影网| 国产精品另类一区| 蜜桃视频免费观看一区| av不卡免费在线观看| 日韩精品自拍偷拍| 亚洲柠檬福利资源导航| 国产在线精品一区二区| 91成人免费在线视频| 亚洲另类在线制服丝袜| 精品一区二区三区在线视频| 92国产精品观看| www日韩大片| 日韩中文字幕av电影| 91美女片黄在线观看| 久久综合中文字幕| 亚洲成av人影院| 91免费看视频| 欧美高清在线一区| 麻豆精品视频在线观看免费| 欧美影院午夜播放| 国产精品九色蝌蚪自拍| 国产毛片精品一区| 日韩欧美高清dvd碟片| 亚洲一区二区三区视频在线 | 午夜电影网亚洲视频| 不卡一区二区三区四区| 久久精品夜夜夜夜久久| 久久精品国产一区二区三| 欧美日韩成人高清| 亚洲一区二区三区不卡国产欧美| av电影在线观看完整版一区二区| 久久久久久久久97黄色工厂| 日韩 欧美一区二区三区| 欧美日韩在线播放一区| 一区二区三区四区在线播放| 成人在线一区二区三区| 国产欧美一区二区精品性色超碰 | 亚洲综合另类小说| 91高清视频在线| 亚洲麻豆国产自偷在线| 91网站在线观看视频| 亚洲情趣在线观看| 一本一本大道香蕉久在线精品| 最近日韩中文字幕|