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

📄 lcd.c

📁 这是Mega8I2c通讯时的主机访问程序.
💻 C
字号:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/delay.h>
#include <avr/wdt.h>

#include "main.h"
#include "init.h"
#include "inter.h"
#include "func.h"
#include "lcd.h"

/* write lcd  */
void write_data(uint8_t c)
{
	  wait_free();
	  PORTC |= _BV(RS);			//SET RS,SEND DATA
	  delay_ms(1);
	  PORTC &= ~_BV(RW);			//SET WRITE STATU
	  delay_ms(1);
	  PORTC |= _BV(E_LCD);			//READ START
	  delay_ms(1);
	  DDRB  = 0XFF;				//设置为输出
	  delay_ms(1);
	  PORTB = c;
	  delay_ms(1);
	  PORTC &= ~_BV(E_LCD);		//READ OVER	
	  write_over();
}

/*         write command        */
void write_command(uint8_t c)
{
	  wait_free();
	  PORTC &= ~_BV(RS);			//清RS,发COMMAND
	  PORTC &= ~_BV(RW);			//SET WRITE STATU
	  PORTC |= _BV(E_LCD);			// START WRITE
	  delay_us(10);
	  DDRB  = 0XFF;				//设置为输出
	  PORTB = c;
	  PORTC &= ~_BV(E_LCD);		//WRITE OVER	
	  write_over();
}
	
/*write over SET*/
void write_over(void)
{		
	  PORTC &= ~_BV(RS);
	  PORTC &= ~_BV(RW);
	  PORTC &= ~_BV(E_LCD);
}

/*    wati daly                */            
void wait_free(void)
{
	  uint8_t i;
	  DDRB  = 0XFF;				//设置为输出
	  PORTB = 0XFF;				//全置1
    PORTC &= ~_BV(RS);			//清RS,发COMMAND
	  PORTC |= _BV(RW);			//SET READ STATU
	  
	  do
	  {
		  PORTC |= _BV(E_LCD);		//READ START
		  delay_us(10);
		  i=PINC & 0X80;
		  delay_us(10);
		  PORTC &= ~_BV(E_LCD);	//READ OVER
	  }
	  while(i);
	  
	  PORTC &= ~_BV(RS);			//清RS,发COMMAND
	  PORTC &= ~_BV(RW);			//SET WRITE STATU
	  write_over();
}

/*lcd初始化*/
void lcd_init(void)
{
	  delay_ms(1000);
	  write_command(0b00110000);	//select basic instruction ,8bit parall
	  delay_us(900);
	  write_command(0b00110000);	//set basic mode
//	write_command(0b00000100);	//enter dot setup
	  delay_us(900);
	  write_command(0b00001100);	//turn on lcd
	  delay_us(900);
	  write_command(0b00000001);	//clr screen text
	  delay_ms(100);
	  write_command(0b00000110);	//enter dot setup
	  delay_ms(100);
	  write_command(0b10000000);
  	write_over();
}

void putchar_lcd(uint8_t *p)
{
	  uint8_t counter = 0;
	  while (!(counter==20))
	  {
		  delay_ms(1);
		  write_data(*p ++);
		  counter++;
	  }
	  counter = 0;
//	p-=21;
	  write_command(0x90);
	  while(!(counter==20) && (*p))
	  {
		  delay_ms(1);
		  write_data(*p ++);
		  counter++;
	  }
}

⌨️ 快捷键说明

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