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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? lcd_4bit.c

?? 該程序是演示ARM的5個(gè)ADC轉(zhuǎn)換功能
?? C
字號(hào):
/******************************************************************************/
/* LCD_4BIT.C: Functions for 2 line 16 character Text LCD (4-bit interface)   */
/*             connected on MCBSTM32 evaluation board                         */
/******************************************************************************/
/* This file is part of the uVision/ARM development tools.                    */
/* Copyright (c) 2005-2007 Keil Software. All rights reserved.                */
/* 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.  */
/******************************************************************************/

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

/*********************** 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 << 8)
#define PIN_RW                (   1 << 15)
#define PIN_RS                (   1 << 7)

//#define PINS_CTRL             (0x07 << 10)
#define PINS_DATA             (0xF0 <<  0)
//#define PINS_ALL              (PINS_CTRL | PINS_DATA)

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_GPIOA|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE, ENABLE);

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

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

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

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

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

/* Setting all pins to output mode                                            */
//#define LCD_ALL_DIR_OUT       GPIOC->CRL = (GPIOC->CRL & 0xFFFF0000) | 0x00003333; \
//                              GPIOC->CRH = (GPIOC->CRH & 0xFFF000FF) | 0x00033300;
#define LCD_ALL_DIR_OUT       GPIOA->CRL = (GPIOA->CRL & 0xFFF00000) | 0x00033333; \
                              GPIOA->CRH = (GPIOA->CRH & 0xFFFF0000) | 0x00003333; \
							  GPIOD->CRL = (GPIOD->CRL & 0x00000000) | 0x33333333; \
                              GPIOD->CRH = (GPIOD->CRH & 0x00000000) | 0x33333333; \
							  GPIOE->CRL = (GPIOE->CRL & 0x00000000) | 0x33333333; \
                              GPIOE->CRH = (GPIOE->CRH & 0x00000000) | 0x33333333; 

/* Setting DATA pins to input mode                                            */
//#define LCD_DATA_DIR_IN       GPIOC->CRL = (GPIOC->CRL & 0xFFFF0000) | 0x00004444;
 #define LCD_DATA_DIR_IN       GPIOE->CRL = (GPIOE->CRL & 0x00000000) | 0x44444444;


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


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

/*******************************************************************************
* 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);
    }
  }
}

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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品成人一区二区三区四区| 性做久久久久久久久| 国产精品夜夜嗨| 综合久久一区二区三区| 国产乱色国产精品免费视频| 欧美吞精做爰啪啪高潮| 男女男精品视频网| 精品人在线二区三区| 91日韩精品一区| 蜜桃视频一区二区三区| 麻豆精品精品国产自在97香蕉| 中文字幕在线一区二区三区| 福利电影一区二区| 久久精品夜夜夜夜久久| 成人激情免费网站| 亚洲精品国产无天堂网2021| 久久视频一区二区| 欧美天堂一区二区三区| 国产高清视频一区| 日产精品久久久久久久性色| 日韩美女久久久| 国产精品久久夜| 亚洲精品在线免费观看视频| 制服丝袜一区二区三区| 在线观看精品一区| 91视频国产观看| 亚洲一区二区精品视频| 亚洲国产成人一区二区三区| 久久网站热最新地址| 亚洲精品一区二区在线观看| 欧美日韩欧美一区二区| 欧美在线一区二区| 欧美少妇xxx| 欧美男同性恋视频网站| 精品视频1区2区| 91精品免费在线| 欧美经典三级视频一区二区三区| 日本一二三不卡| 一区二区三区四区在线免费观看| 五月天激情小说综合| 韩国精品久久久| 91福利在线播放| 精品久久久久99| 日韩午夜在线影院| 亚洲综合色丁香婷婷六月图片| 国产一区在线不卡| 91精品免费在线观看| 国产精品色一区二区三区| 日韩国产欧美三级| 国精产品一区一区三区mba视频| 亚洲亚洲精品在线观看| 国产老妇另类xxxxx| 欧美综合一区二区| 欧美精品一区二区三区在线播放| 国产精品国产自产拍高清av| 日韩精品成人一区二区三区| 99久久精品国产毛片| 精品国产一区二区三区久久久蜜月| 亚洲伦理在线免费看| 精品亚洲aⅴ乱码一区二区三区| 久久精品国产第一区二区三区| 久久成人免费电影| 欧美日韩大陆在线| 亚洲午夜久久久久久久久电影网| 国产成人av网站| 欧美一区二区三区色| 亚洲午夜在线电影| 色88888久久久久久影院野外| 中文字幕国产精品一区二区| 七七婷婷婷婷精品国产| 日日噜噜夜夜狠狠视频欧美人| 99这里都是精品| 亚洲色图清纯唯美| 欧美午夜在线观看| 午夜视频一区二区| 欧美一级搡bbbb搡bbbb| 五月开心婷婷久久| 日韩欧美精品三级| 国产伦精品一区二区三区免费| 日韩免费福利电影在线观看| 国产麻豆欧美日韩一区| 亚洲国产精华液网站w| 色网站国产精品| 午夜电影一区二区| 国产亚洲综合av| 色欧美乱欧美15图片| 日韩电影一区二区三区四区| 久久综合九色综合久久久精品综合| 99re6这里只有精品视频在线观看| 精品国产一区二区亚洲人成毛片 | 日韩精品一区二区三区蜜臀| 亚洲天堂a在线| 一本久道久久综合中文字幕| 亚洲欧美日本韩国| 91高清视频免费看| 亚洲成人资源网| 日韩欧美你懂的| 麻豆专区一区二区三区四区五区| 欧美日韩精品福利| 裸体歌舞表演一区二区| 中文字幕不卡一区| 色综合久久久久综合体| 国内成人免费视频| 亚洲福利一区二区三区| 久久久综合激的五月天| 欧日韩精品视频| 蜜桃视频在线观看一区| 国产精品乱人伦| 欧美高清性hdvideosex| 在线国产电影不卡| 在线观看亚洲a| 日韩精品五月天| 国产亚洲精品bt天堂精选| 欧美日韩成人一区二区| 91香蕉视频mp4| 国产大陆a不卡| 美女一区二区久久| 亚洲一区在线看| 久久久99久久精品欧美| 久久婷婷国产综合精品青草| 91在线码无精品| 色悠悠久久综合| 粉嫩aⅴ一区二区三区四区| 国内外精品视频| 麻豆精品久久精品色综合| 久久成人免费电影| 美女国产一区二区| 国产精品一二三四区| 日精品一区二区| 亚洲一区二区三区自拍| 亚洲成av人片观看| 蜜臀久久99精品久久久久宅男 | 欧美mv和日韩mv国产网站| 欧美日韩一级视频| 亚洲精品在线三区| 日韩免费看网站| 欧美一级xxx| 亚洲欧美另类小说| 国产精品成人一区二区三区夜夜夜| 日韩精品最新网址| 久久久久久99精品| 久久久国产精品麻豆| 一区二区三区加勒比av| 免费高清不卡av| 91女厕偷拍女厕偷拍高清| 在线免费av一区| 这里是久久伊人| 国产日产欧美精品一区二区三区| 亚洲色图.com| 男女男精品视频| 色综合一个色综合亚洲| 欧美日韩第一区日日骚| 国产欧美一区二区三区在线看蜜臀 | 人妖欧美一区二区| 精品亚洲aⅴ乱码一区二区三区| 国产+成+人+亚洲欧洲自线| a级精品国产片在线观看| 欧美日韩综合一区| 亚洲国产精品99久久久久久久久| 日韩精品欧美精品| 欧美日韩国产精选| 国产精品灌醉下药二区| 久久精品国产网站| 欧美日韩欧美一区二区| 亚洲欧美另类在线| 不卡av在线网| 日本一区二区三区dvd视频在线| 三级久久三级久久久| 欧美主播一区二区三区| 亚洲视频每日更新| 94色蜜桃网一区二区三区| 国产欧美日韩亚州综合| 国产美女在线精品| 91麻豆精品国产91久久久久久久久 | 五月天欧美精品| 92国产精品观看| 亚洲免费伊人电影| 在线视频一区二区三区| 国产精品乱码一区二三区小蝌蚪| 粉嫩蜜臀av国产精品网站| 国产欧美精品一区aⅴ影院| 高清日韩电视剧大全免费| 国产蜜臀97一区二区三区| 成人免费视频免费观看| 日韩一区欧美小说| 色婷婷久久久亚洲一区二区三区 | 亚洲与欧洲av电影| 在线免费不卡视频| 天天色综合天天| 精品久久久久久久久久久久包黑料 | 香蕉久久一区二区不卡无毒影院| 欧美日韩一本到| 日本中文字幕一区二区视频| 日韩午夜中文字幕| 99v久久综合狠狠综合久久| 亚洲午夜一区二区| 欧美一区二区二区| 懂色av中文一区二区三区| 亚洲一区二区三区小说| 日韩欧美色综合|