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

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

?? stm32_lcd1602.c

?? 51單片機的內存優化和中斷的有用知識
?? C
字號:
/*-------------------------------------------------------------------------------
The function is for LCD1602 4 bit operation 
In the main function you only need to use these function which are listing behind
Design By: U-easytech
Data:13/03/2008

_-------------------------------------------------------------------------------*/
#include <stm32f10x_lib.h>              /* STM32F10x Library Definitions      */
void lcd_init     (void);		  //初始化LCD1602及相應I/O PORTS
void lcd_clear    (void);		  //清屏
void lcd_putchar  (char c);
void set_cursor   (int column, int line);
void lcd_print     (char *string);	 //顯示
void lcd_bargraph (int pos_x, int pos_y, int value);	//顯示

/******************************************************************************/

/*********************** Hardware specific configuration **********************/

/*------------------------- Speed dependant settings -------------------------*/

/* If processor works on high frequency delay has to be increased, it can be 
   increased by factor 2^N by this constant                                   */
#define DELAY_2N     0

/*------------------------- Text LCD size definitions ------------------------*/

#define LineLen     16                  /* Width (in characters)              */
#define NumLines     2                  /* Hight (in lines)                   */

/*-------------------- LCD interface hardware definitions --------------------*/

/* PINS: 
   - DB4 = 	 PB12
   - DB5 = 	 PB13      
   - DB6 = 	 PB14
   - DB7 = 	 PB15
   - E   =   PB5
   - RW  =   PB6
   - RS  =   PB7                                                  */

#define PIN_E                 (   1 << 5)
#define PIN_RW                (   1 << 6)
#define PIN_RS                (   1 << 7)
#define PINS_CTRL             0x00E0
#define PINS_DATA             0xF000
#define PINS_ALL              (PINS_CTRL | PINS_DATA)
//const unsigned int SWAP_DATA[16] = { 0x0, 0x8, 0x4, 0xC, 0x2, 0xA, 0x6, 0xE, 
//                                  0x1, 0x9, 0x5, 0xD, 0x3, 0xB, 0x7, 0xF};
 const unsigned int SWAP_DATA[16]={0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xA,0xB,0xc,0xd,0xe,0xF	} ;
/* Enable Clock for peripheral driving LCD pins                               */
#define LCD_CLOCK_EN          RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOB, ENABLE);

/* pin E  setting to 0 or 1                                                   */
#define LCD_E(x)              GPIOB->ODR = (GPIOB->ODR & ~PIN_E)  | (x ? PIN_E : 0);
/* pin RW setting to 0 or 1                                                   */
#define LCD_RW(x)             GPIOB->ODR = (GPIOB->ODR & ~PIN_RW) | (x ? PIN_RW : 0);
/* pin RS setting to 0 or 1                                                   */
#define LCD_RS(x)             GPIOB->ODR = (GPIOB->ODR & ~PIN_RS) | (x ? PIN_RS : 0);

/* Reading DATA pins                                                          */

#define LCD_DATA_IN           SWAP_DATA[(((GPIOB->IDR & PINS_DATA) >> 12) & 0x0F)]
/* Writing value to DATA pins                                                 */

#define LCD_DATA_OUT(x)       GPIOB->ODR = (GPIOB->ODR & ~PINS_DATA) | ((SWAP_DATA[x]) << 12);
																			   
/* Setting all pins to output mode                                            */
#define LCD_ALL_DIR_OUT       GPIOB->CRL = (GPIOB->CRL & 0x000FFFFF) | 0x33300000; \
                              GPIOB->CRH = (GPIOB->CRH & 0x0000FFFF) | 0x33330000;
 
/* Setting DATA pins to input mode                                            */
#define LCD_DATA_DIR_IN       GPIOB->CRH = (GPIOB->CRH & 0x0000FFFF) | 0x44440000;

/* Setting DATA pins to output mode                                           */
#define LCD_DATA_DIR_OUT      GPIOB->CRH = (GPIOB->CRH & 0x0000FFFF) | 0x33330000;

/******************************************************************************/



/*******************************************************************************
* Delay in while loop cycles                                                   *
*   Parameter:    cnt:    number of while cycles to delay                      *
*   Return:                                                                    *
*******************************************************************************/

static void delay (int cnt)
{
  cnt <<= DELAY_2N;

  while (cnt--);
}


/*******************************************************************************
* Read status of LCD controller                                                *
*   Parameter:    none                                                         *
*   Return:       Status byte contains busy flag and address pointer           *
*******************************************************************************/

static unsigned char lcd_read_status (void)
{
  unsigned char status;

  LCD_DATA_DIR_IN
  LCD_RS(0)
  LCD_RW(1)
  delay(10);
  LCD_E(1)
  delay(10);
  status  = LCD_DATA_IN << 4;
  LCD_E(0)
  delay(10);
  LCD_E(1)
  delay(10);
  status |= LCD_DATA_IN;
  LCD_E(0)
  LCD_DATA_DIR_OUT
  return (status);
}


/*******************************************************************************
* Wait until LCD controller busy flag is 0                                     *
*   Parameter:                                                                 *
*   Return:       Status byte of LCD controller (busy + address)               *
*******************************************************************************/

static unsigned char wait_while_busy (void)
{
  unsigned char status;

  do  {
    status = lcd_read_status();
  }  while (status & 0x80);             /* Wait for busy flag                 */

  return (status);
}


/*******************************************************************************
* Write 4-bits to LCD controller                                               *
*   Parameter:    c:      command to be written                                *
*   Return:                                                                    *
*******************************************************************************/

void lcd_write_4bit (unsigned char c)
{
  LCD_RW(0)
  LCD_E(1)
  LCD_DATA_OUT(c&0x0F)
  delay(10);
  LCD_E(0)
  delay(10);
}


/*******************************************************************************
* Write command to LCD controller                                              *
*   Parameter:    c:      command to be written                                *
*   Return:                                                                    *
*******************************************************************************/

void lcd_write_cmd (unsigned char c)
{
  wait_while_busy();

  LCD_RS(0)
  lcd_write_4bit (c>>4);
  lcd_write_4bit (c);
}


/*******************************************************************************
* Write data to LCD controller                                                 *
*   Parameter:    c:      data to be written                                   *
*   Return:                                                                    *
*******************************************************************************/

static void lcd_write_data (unsigned char c)
{
  wait_while_busy();

  LCD_RS(1)
  lcd_write_4bit (c>>4);
  lcd_write_4bit (c);
}


/*******************************************************************************
* Print Character to current cursor position                                   *
*   Parameter:    c:      character to be printed                              *
*   Return:                                                                    *
*******************************************************************************/

void lcd_putchar (char c)
{ 
  lcd_write_data (c);
}


/*******************************************************************************
* Initialize the LCD controller                                                *
*   Parameter:                                                                 *
*   Return:                                                                    *
*******************************************************************************/

void lcd_init (void)
{ 
 

  LCD_CLOCK_EN                          /* Enable clock for peripheral        */

  /* Set all pins for LCD as outputs                                          */
  LCD_ALL_DIR_OUT

  delay (15000);
  LCD_RS(0)
  lcd_write_4bit (0x3);                 /* Select 4-bit interface             */
  delay (4100);
  lcd_write_4bit (0x3);
  delay (100);
  lcd_write_4bit (0x3);
  lcd_write_4bit (0x2);

  lcd_write_cmd (0x28);                 /* 2 lines, 5x8 character matrix      */
  lcd_write_cmd (0x0C);                 /* Display ctrl:Disp=ON,Curs/Blnk=OFF */
  lcd_write_cmd (0x0E);                 /* Entry mode: Move right, no shift   */

  /* Load user-specific characters into CGRAM                                 */
 // lcd_write_cmd(0x40);                  /* Set CGRAM address counter to 0     */
 // p = &UserFont[0][0];
  //for (i = 0; i < sizeof(UserFont); i++, p++)
  //  lcd_putchar (*p);

  lcd_write_cmd(0x80);                  /* Set DDRAM address counter to 0     */
}


/*******************************************************************************
* Set cursor position on LCD display                                           *
*   Parameter:    column: column position                                      *
*                 line:   line position                                        *
*   Return:                                                                    *
*******************************************************************************/

void set_cursor (int column, int line)
{
  unsigned char address;

  address = (line * 40) + column;
  address = 0x80 + (address & 0x7F);
  lcd_write_cmd(address);               /* Set DDRAM address counter to 0     */
}

/*******************************************************************************
* Clear the LCD display                                                        *
*   Parameter:                                                                 *
*   Return:                                                                    *
*******************************************************************************/

void lcd_clear (void)
{
  lcd_write_cmd(0x01);                  /* Display clear                      */
  set_cursor (0, 0);
}


/*******************************************************************************
* Print sting to LCD display                                                   *
*   Parameter:    string: pointer to output string                             *
*   Return:                                                                    *
*******************************************************************************/

void lcd_print (char *string)
{
  while (*string)  {
    lcd_putchar (*string++);
  }
}


/*******************************************************************************
* Display bargraph on LCD display                                              *
*   Parameter:     pos_x: horizontal position of bargraph start                *
*                  pos_y: vertical position of bargraph                        *
*                  value: size of bargraph active field (in pixels)            *
*   Return:                                                                    *
*******************************************************************************/

void lcd_bargraph (int pos_x, int pos_y, int value) {
  int i;

  set_cursor (pos_x, pos_y);
  for (i = 0; i < 16; i++)  {
    if (value > 5) {
      lcd_putchar (0x05);
      value -= 5;
    } else {
      lcd_putchar (value);
      while (i++ < 16) lcd_putchar (0);
    }
  }
}

/******************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱淫av一区二区三区| 欧美高清hd18日本| 欧美一级欧美三级| 中文字幕欧美区| 欧美aaa在线| 欧美偷拍一区二区| 国产精品国产精品国产专区不片| 亚洲成人你懂的| 成人免费毛片嘿嘿连载视频| 欧美电影免费观看高清完整版在线观看 | 亚洲精品视频在线看| 国产毛片精品视频| 欧美一区二区三区电影| 一区二区三区在线播放| 成人性生交大片免费| 欧美电影免费观看高清完整版在线观看 | 国内偷窥港台综合视频在线播放| 欧美日韩精品一区二区三区四区| 综合婷婷亚洲小说| 成人一区二区三区在线观看| 日韩视频一区在线观看| 日韩电影一区二区三区四区| 欧美日韩精品综合在线| 亚洲国产一区二区三区青草影视 | 国产一区二区电影| 欧美videos大乳护士334| 美女视频第一区二区三区免费观看网站| 色婷婷国产精品综合在线观看| 国产日本欧美一区二区| 国产91精品一区二区| 国产欧美精品一区二区色综合| 久草中文综合在线| 精品国产网站在线观看| 精品午夜久久福利影院| 337p日本欧洲亚洲大胆色噜噜| 久久av资源站| 国产视频不卡一区| 99久久精品情趣| 有坂深雪av一区二区精品| 色婷婷综合久久久久中文 | 91精品国产综合久久香蕉的特点| 五月婷婷激情综合| 欧美tickle裸体挠脚心vk| 经典三级一区二区| 国产欧美日韩另类视频免费观看| 成人午夜碰碰视频| 亚洲视频网在线直播| 色综合久久久久久久久| 亚洲成人免费视| 欧美tickle裸体挠脚心vk| 国产精品影视网| 亚洲精品成人精品456| 欧美精品在线视频| 国产精品小仙女| 一区二区三区四区在线| 欧美日韩精品久久久| 国内精品伊人久久久久av一坑| 久久久91精品国产一区二区精品| a级高清视频欧美日韩| 亚洲一区二区三区四区中文字幕| 欧美日韩国产片| 国产成人福利片| 亚洲一卡二卡三卡四卡五卡| 精品不卡在线视频| 91热门视频在线观看| 免费人成在线不卡| 国产精品二三区| 日韩欧美国产一区二区在线播放| eeuss鲁片一区二区三区在线观看| 亚洲一卡二卡三卡四卡无卡久久| 久久久久亚洲蜜桃| 欧美日韩国产精品自在自线| 国产91高潮流白浆在线麻豆| 亚洲图片欧美视频| 欧美激情一区二区| 欧美一区二区三区在线| av一区二区三区在线| 精品亚洲porn| 亚洲成人三级小说| 亚洲色图一区二区三区| 久久综合狠狠综合久久激情| 欧美色成人综合| voyeur盗摄精品| 国产二区国产一区在线观看| 日本人妖一区二区| 亚洲一区二区综合| 国产精品第五页| 久久综合狠狠综合久久综合88 | 欧美激情综合五月色丁香小说| 欧美性猛交xxxxxx富婆| av一二三不卡影片| 国产精品一区二区不卡| 日本一区中文字幕 | 国产精品77777| 久久成人精品无人区| 天天影视涩香欲综合网| 一级特黄大欧美久久久| 亚洲人成网站影音先锋播放| 中文字幕免费不卡| 久久久三级国产网站| 欧美大片日本大片免费观看| 欧美日韩一区视频| 欧美午夜在线一二页| 91久久免费观看| 在线亚洲免费视频| 91黄色免费网站| 99re成人在线| 91年精品国产| 91丨九色丨黑人外教| 成av人片一区二区| heyzo一本久久综合| 99久久免费国产| 在线亚洲免费视频| 欧美吞精做爰啪啪高潮| 欧美日韩激情一区二区三区| 欧美日韩国产a| 3d动漫精品啪啪一区二区竹菊 | 欧美视频日韩视频| 91网址在线看| 在线一区二区三区四区五区| 91黄色小视频| 宅男噜噜噜66一区二区66| 日韩三级高清在线| 久久久久久久久久久久久久久99| 久久久精品影视| 国产精品短视频| 亚洲靠逼com| 日韩和欧美的一区| 激情综合网av| 大美女一区二区三区| 色哟哟国产精品| 91精品国产91久久久久久最新毛片| 日韩美女天天操| 国产精品看片你懂得| 亚洲自拍欧美精品| 麻豆成人综合网| 99久久精品国产精品久久| 欧美性受xxxx| 久久久久9999亚洲精品| 亚洲精品中文字幕乱码三区| 日韩精品国产欧美| 国产不卡免费视频| 欧美日韩一区二区三区在线| 日韩欧美国产精品一区| 国产精品系列在线| 午夜视频久久久久久| 国产精品一区二区男女羞羞无遮挡| 99精品久久久久久| 91精品国产91久久综合桃花| 国产日产欧美一区| 天堂久久一区二区三区| 高清不卡一区二区| 宅男噜噜噜66一区二区66| 国产精品高潮呻吟| 久久99蜜桃精品| 欧洲人成人精品| 中文字幕免费观看一区| 午夜精品123| 成人黄色777网| 欧美大片一区二区| 亚洲成精国产精品女| 国产精品羞羞答答xxdd| 制服丝袜亚洲播放| 一区二区三区在线视频播放| 国产福利精品导航| 欧美一二三区在线观看| 又紧又大又爽精品一区二区| 国产成人精品一区二区三区网站观看| 欧美在线观看18| 中文字幕色av一区二区三区| 日本aⅴ亚洲精品中文乱码| 99久久精品99国产精品| 精品日韩一区二区| 亚洲小说欧美激情另类| 成人国产一区二区三区精品| 精品国产免费久久| 日韩精品乱码av一区二区| 在线观看中文字幕不卡| 中文字幕一区二区三区在线观看 | 久久国产精品免费| 欧美剧情电影在线观看完整版免费励志电影| 欧美韩国日本不卡| 国产一区二区不卡在线| 欧美一区二区三区免费在线看| 日韩美女视频19| 成人高清视频免费观看| 国产亚洲精品福利| 久久超碰97人人做人人爱| 91精品国产欧美一区二区成人 | 欧美电影免费观看高清完整版在| 亚洲一级在线观看| 在线精品观看国产| 亚洲在线中文字幕| 91精品福利视频| 亚洲国产一二三| 欧美网站一区二区| 亚洲大尺度视频在线观看| 欧美性欧美巨大黑白大战| 亚洲成人激情综合网| 欧美肥妇毛茸茸|