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

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

?? lcd_4bit.c

?? STM32F103 SD卡控制程序
?? C
字號:
/*----------------------------------------------------------------------------
 * Name:    LCD_4bit.c
 * Purpose: Functions for 2 line 16 character Text LCD (4-bit interface)
 *                connected on MCBSTM32 evaluation board 
 * Version: V1.10
 *----------------------------------------------------------------------------
 * This file is part of the uVision/ARM development tools.
 * This software may only be used under the terms of a valid, current,
 * end user licence from KEIL for a compatible version of KEIL software
 * development tools. Nothing else gives you the right to use this software.
 *
 * Copyright (c) 2005-2007 Keil Software. All rights reserved.
 *---------------------------------------------------------------------------*/

#include <stm32f10x_lib.h>              /* STM32F10x Library Definitions      */

/*********************** 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 = PC3
   - DB5 = PC2
   - DB6 = PC1
   - DB7 = PC0
   - E   = PC10
   - RW  = PC11
   - RS  = PC12                                                               */

#define PIN_E                 (   1 << 10)
#define PIN_RW                (   1 << 11)
#define PIN_RS                (   1 << 12)
#define PINS_CTRL             (0x07 << 10)
#define PINS_DATA             (0x0F <<  0)
#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};

/* Enable Clock for peripheral driving LCD pins                               */
#define LCD_CLOCK_EN         (RCC->APB2ENR |= (1 << 4)); // enable clock for GPIOC

/* pin E  setting to 0 or 1                                                   */
#define LCD_E(x)              GPIOC->ODR = (GPIOC->ODR & ~PIN_E)  | (x ? PIN_E : 0);

/* pin RW setting to 0 or 1                                                   */
#define LCD_RW(x)             GPIOC->ODR = (GPIOC->ODR & ~PIN_RW) | (x ? PIN_RW : 0);

/* pin RS setting to 0 or 1                                                   */
#define LCD_RS(x)             GPIOC->ODR = (GPIOC->ODR & ~PIN_RS) | (x ? PIN_RS : 0);

/* Reading DATA pins                                                          */
#define LCD_DATA_IN           SWAP_DATA[(((GPIOC->IDR & PINS_DATA) >> 0) & 0x0F)]

/* Writing value to DATA pins                                                 */
#define LCD_DATA_OUT(x)       GPIOC->ODR = (GPIOC->ODR & ~PINS_DATA) | ((SWAP_DATA[x]) << 0);

/* Setting all pins to output mode                                            */
#define LCD_ALL_DIR_OUT       GPIOC->CRL = (GPIOC->CRL & 0xFFFF0000) | 0x00003333; \
                              GPIOC->CRH = (GPIOC->CRH & 0xFFF000FF) | 0x00033300;
 
/* Setting DATA pins to input mode                                            */
#define LCD_DATA_DIR_IN       GPIOC->CRL = (GPIOC->CRL & 0xFFFF0000) | 0x00004444;

/* Setting DATA pins to output mode                                           */
#define LCD_DATA_DIR_OUT      GPIOC->CRL = (GPIOC->CRL & 0xFFFF0000) | 0x00003333;

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


/* 8 user defined characters to be loaded into CGRAM (used for bargraph)      */
const char UserFont[8][8] = {
  { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
  { 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10 },
  { 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18 },
  { 0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C },
  { 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E },
  { 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F },
  { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
  { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }
};


/************************ Global function definitions *************************/


/*******************************************************************************
* 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)
{ 
  int i;
  char const *p;

  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 (0x06);                 /* 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++);
  }
}


/*******************************************************************************
* Print a bargraph to LCD display                                              *
*   Parameter:     val:  value 0..100 %                                        *
*                  size: size of bargraph 1..16                                *
*   Return:                                                                    *
*******************************************************************************/
void lcd_bargraph (int value, int size) {
   int i;

   value = value * size / 20;            /* Display matrix 5 x 8 pixels       */
   for (i = 0; i < size; i++) {
      if (value > 5) {
         lcd_putchar (0x05);
         value -= 5;
      }
      else {
         lcd_putchar (value);
         break;
      }
   }
}


/*******************************************************************************
* 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_bargraphXY (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盗摄 | 亚洲在线成人精品| 日韩av中文字幕一区二区三区| 精品一区免费av| 欧美色国产精品| 国产日产欧美一区二区视频| 午夜影院在线观看欧美| 不卡的av电影在线观看| 久久人人爽人人爽| 视频一区在线播放| 色呦呦日韩精品| 国产精品国产精品国产专区不片| 日本美女视频一区二区| 色一情一乱一乱一91av| 中文字幕不卡一区| 国产精品88av| 久久日一线二线三线suv| 水野朝阳av一区二区三区| 99久久er热在这里只有精品15| 久久这里只有精品首页| 久久精品国产99国产| 欧美一区二区三区播放老司机| 亚洲日本在线a| av亚洲精华国产精华精华| 久久久久久**毛片大全| 韩国v欧美v日本v亚洲v| 欧美电视剧免费全集观看| 日本中文字幕一区二区有限公司| 欧美一级片在线看| 亚洲图片有声小说| 欧美乱妇20p| 天天影视色香欲综合网老头| 欧美日韩国产大片| 亚洲第一久久影院| 欧美欧美欧美欧美| 日韩成人免费电影| 欧美一二三区在线观看| 久久电影国产免费久久电影| 欧美一卡二卡在线观看| 久久99精品久久久久久| 精品三级在线观看| 国产99一区视频免费| 日本一区二区久久| 一本久久a久久精品亚洲| 一区二区三区四区不卡在线 | 高清在线成人网| 国产欧美一区二区精品忘忧草| 国产盗摄一区二区| 国产精品国产三级国产有无不卡| 99国产精品国产精品毛片| 亚洲日本电影在线| 欧美日韩精品一区二区三区蜜桃 | 国产精品久久久久7777按摩 | 国产一区二区三区视频在线播放| 久久众筹精品私拍模特| 91在线视频18| 天堂影院一区二区| 久久综合九色综合97婷婷女人| 国产a视频精品免费观看| 亚洲蜜桃精久久久久久久| 欧美精品xxxxbbbb| 国产成人午夜片在线观看高清观看| 国产精品久久久久一区| 欧美欧美午夜aⅴ在线观看| 国产高清久久久久| 亚洲一区二区精品久久av| 欧美成人综合网站| 91在线精品秘密一区二区| 日韩黄色片在线观看| 国产亲近乱来精品视频| 欧美日韩精品是欧美日韩精品| 韩国av一区二区| 亚洲午夜视频在线| 欧美极品少妇xxxxⅹ高跟鞋 | 亚洲一区二区在线播放相泽| 日韩三级精品电影久久久| av亚洲精华国产精华精华| 日本视频一区二区三区| 亚洲人吸女人奶水| wwwwxxxxx欧美| 欧美美女喷水视频| 91社区在线播放| 激情综合色综合久久| 亚洲永久免费视频| 国产精品久久久久天堂| 日韩视频中午一区| 精品视频在线免费看| 成人sese在线| 国产九色精品成人porny| 午夜久久久久久久久| 亚洲欧美福利一区二区| 亚洲国产精品成人久久综合一区| 9191成人精品久久| 欧美在线啊v一区| 成人美女视频在线观看18| 狠狠久久亚洲欧美| 美女免费视频一区二区| 亚洲国产精品天堂| 一区二区三区在线观看网站| 中文乱码免费一区二区| 久久久久久亚洲综合| 日韩一区二区三区视频在线观看| 欧美性视频一区二区三区| 99re视频精品| 99在线精品观看| 风间由美一区二区av101| 国模套图日韩精品一区二区| 日韩激情在线观看| 天堂蜜桃91精品| 亚洲综合无码一区二区| 亚洲码国产岛国毛片在线| 国产精品电影一区二区三区| 中文字幕不卡在线播放| 久久久.com| 国产色一区二区| 欧美激情中文字幕一区二区| 亚洲精品写真福利| 日韩毛片高清在线播放| 亚洲欧美在线观看| 亚洲欧美色综合| 亚洲国产美女搞黄色| 丝袜亚洲另类丝袜在线| 麻豆精品久久久| 国产一区二区在线影院| 成人午夜av电影| 91亚洲国产成人精品一区二区三| 91视频在线看| 欧美日本在线看| 精品国产91乱码一区二区三区 | 国产欧美精品区一区二区三区| 国产日韩欧美一区二区三区乱码 | 18成人在线观看| 亚洲激情一二三区| 日韩在线卡一卡二| 国产一区二区免费看| 成人黄色大片在线观看| 欧美性大战久久| 欧美成人一区二区三区片免费| 精品播放一区二区| 亚洲人精品一区| 日韩精品电影一区亚洲| 国产盗摄一区二区三区| 91黄色免费看| 精品国产亚洲在线| 亚洲色图视频网| 青青草97国产精品免费观看无弹窗版| 狠狠色狠狠色综合系列| 91女人视频在线观看| 日韩一区二区三区精品视频| 国产视频亚洲色图| 午夜精品久久久久影视| 国产一区二区精品久久| 色婷婷av一区二区三区gif| 日韩区在线观看| 亚洲天堂福利av| 麻豆视频一区二区| 色综合久久九月婷婷色综合| 日韩一区二区三区观看| 亚洲欧美日韩人成在线播放| 久久精品国产精品亚洲红杏| 在线免费观看一区| 久久精品亚洲精品国产欧美kt∨| 亚洲一区在线观看视频| 国产精品香蕉一区二区三区| 欧美久久婷婷综合色| 中文字幕一区日韩精品欧美| 久久99热国产| 欧美日韩精品欧美日韩精品一综合| 国产欧美精品日韩区二区麻豆天美| 亚洲国产欧美日韩另类综合| 成人av网站免费观看| 欧美大尺度电影在线| 亚洲高清不卡在线| 99精品视频在线播放观看| 国产精品免费视频一区| 欧美96一区二区免费视频| 99re在线视频这里只有精品| 久久久久久久网| 久久精品国产99| 337p亚洲精品色噜噜狠狠| 亚洲国产三级在线| 99精品国产99久久久久久白柏| 26uuuu精品一区二区| 奇米一区二区三区| 欧美日韩中文另类| 亚洲一级电影视频| 色呦呦国产精品| 亚洲欧美一区二区三区国产精品| 国产成人免费9x9x人网站视频| 欧美tickling网站挠脚心| 日韩电影一区二区三区四区| 欧美视频一区二区三区在线观看| 自拍偷拍国产精品| av成人老司机| 综合色中文字幕| 色综合久久88色综合天天免费| 国产精品你懂的| 91在线porny国产在线看| 中文字幕一区二区三| jlzzjlzz亚洲日本少妇|