⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 display.c

📁 单片机上的java虚拟机 用winavr 编译
💻 C
字号:
////  Nibo-NanoVM, a tiny java VM for the Nibo robot////  Copyright (C) 2007 by Nils Springob <nils@nicai-systems.de>//  Based on work by Benjamin Benz(c't-Bot) and Till Harbaum(NanoVM)////  This program is free software; you can redistribute it and/or modify//  it under the terms of the GNU General Public License as published by//  the Free Software Foundation; either version 2 of the License, or//  (at your option) any later version.////  This program is distributed in the hope that it will be useful,//  but WITHOUT ANY WARRANTY; without even the implied warranty of//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the//  GNU General Public License for more details.////  You should have received a copy of the GNU General Public License//  along with this program; if not, write to the Free Software//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA/*! *  @brief  Routinen zur Displaysteuerung *  @author Benjamin Benz (bbe@heise.de) *  @author modified by Nils Springob (nils@nicai-systems.de) *  @date   2007-01-26 */ #include <avr/io.h>#include <util/delay.h>#include <stdarg.h>#include <stdio.h>#include "nibo/display.h"#include "nibo/delay.h"#include "nibo/iodefs.h"/*! Puffergroesse fuer eine Zeile in bytes */#define DISPLAY_BUFFER_SIZE	(DISPLAY_LENGTH + 1)#define DISPLAY_CLEAR 0x01      /*!< Kommando zum Löschen */#define DISPLAY_CURSORHOME 0x02 /*!< Kommando für den Cursor *//**! Output-Pins des Displays */#define DISPLAY_OUT (_BV(IO_DISPLAY_RS_BIT)|_BV(IO_DISPLAY_RW_BIT)|_BV(IO_DISPLAY_EN_BIT))/**! Input-Pins des Displays */#define DISPLAY_IN (_BV(IO_DISPLAY_READY_BIT))#define clear_display_output_bits() do {IO_DISPLAY_PORT &= ~DISPLAY_OUT;} while(0)/* * Im Moment der Low-High-Flanke von ENABLE liest das Dislplay  * die Werte von RS und R/W ein. Ist zu diesem Zeitpunkt R/W=0,  * dann liest das Display mit der folgenden High-Low-Flanke von ENABLE  * den Datenbus ein (Schreibzyklus).  * War aber R/W=1, dann legt das Display ein Datenword auf den  * Datenbus (Lese-Zyklus), solange bis die High-Low-Flanke von ENABLE  * das Interface wieder deaktiviert. */void display_init(){  activate_output_bit(IO_DISPLAY_RS);  activate_output_bit(IO_DISPLAY_RW);  activate_output_bit(IO_DISPLAY_EN);  activate_output_bit(IO_DISPLAY_CS1);  activate_output_bit(IO_DISPLAY_CS2);  activate_output_bit(IO_DISPLAY_RST);  IO_DISPLAY_DDR = 0x00;  clear_output_bit(IO_DISPLAY_RS);  clear_output_bit(IO_DISPLAY_RW);  clear_output_bit(IO_DISPLAY_EN);  clear_output_bit(IO_DISPLAY_CS1);  clear_output_bit(IO_DISPLAY_CS2);  clear_output_bit(IO_DISPLAY_RST);  delay_ms(1);  set_output_bit(IO_DISPLAY_RST);  display_wait(0);  display_wait(1);}void display_write(uint8_t mode, uint8_t data){  set_output_bitval(IO_DISPLAY_CS1, !(mode&0x01));  set_output_bitval(IO_DISPLAY_CS2, mode&0x01);  set_output_bitval(IO_DISPLAY_RS, mode&0x02);  clear_output_bit(IO_DISPLAY_RW);  IO_DISPLAY_DDR = 0xff;  IO_DISPLAY_PORT = data;  delay_us(1);  set_output_bit(IO_DISPLAY_EN);  delay_us(1);  clear_output_bit(IO_DISPLAY_EN);  delay_us(1);  IO_DISPLAY_PORT = 0x00;  IO_DISPLAY_DDR = 0x00;}uint8_t display_read(uint8_t mode){  set_output_bitval(IO_DISPLAY_CS1, !(mode&0x01));  set_output_bitval(IO_DISPLAY_CS2, mode&0x01);  set_output_bitval(IO_DISPLAY_RS, mode&0x02);  set_output_bit(IO_DISPLAY_RW);  IO_DISPLAY_DDR = 0x00;  delay_us(1);  set_output_bit(IO_DISPLAY_EN);  delay_us(4);  uint8_t data = IO_DISPLAY_PIN;  clear_output_bit(IO_DISPLAY_EN);  delay_us(1);  return data;}// high level fuctionsvoid display_wait(uint8_t mode){  mode &= 0x01;  while (display_read(mode)&0x80){  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -