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

📄 lcd.c

📁 ATMEGA16与串行DA-TLC5615的通讯程序
💻 C
字号:
/**********************************
	标题:12864液晶串行通讯常用子函数
	文件名:lcd.c
	编译:WinAVR-20080411
  硬件环境:
			时钟:外部6MHz
					
	
***********************************/
#include <avr/io.h>
#include <util/delay.h>
#include <stdint.h>
#include "spi.c"

#define  lcd_cs PB0 //LCD片选可选PB0-PB4


void lcd_init(void);
void lcd_wri(uint8_t data_i);//写指令子函数,参数为欲写数据
void lcd_wrd(uint8_t data_d);//写数据子函数,参数为欲写数据
void lcd_write(uint8_t lcd_data1,uint8_t lcd_data2,uint8_t lcd_data3);
void lcd_dis(uint8_t lcd_addr,uint8_t dis_data);//显示子程序,第一参数为显示地址(0x80~0x9f)
                                                //地址会自加连续显示时可指定一范围外地址,第二
                                                //参数为显示数据 
void lcd_clear(void);//清屏

uint8_t lcd_tmp1,lcd_tmp2,lcd_tmp3;

void lcd_init(void)
{
       _delay_ms(40);//延时40ms
       lcd_wri(0x30);//功能设置---8BIT控制界面,基本指令集
       _delay_ms(1);
       lcd_wri(0x0c);//显示打开,光标关,反白显示关
       _delay_ms(1);
       lcd_wri(0x01);//清除屏幕显示,将DDRAM的地址计数器归零
       _delay_ms(10);
       lcd_wri(0x06);//DDRAM的地址计数器(AC)加1
}

void lcd_wri(uint8_t data_i)
{
     lcd_tmp1=0xf8;       //串行通讯第一字节为1 1 1 1 1 1 Rw Rs 0
                          //写指令RS=RW=0
     lcd_tmp2=data_i&0xf0;//第二字节为D7 D6 D5 D4 0 0 0 0
     lcd_tmp3=data_i<<4;  //第三字节为D3 D2 D1 D0 0 0 0 0
     lcd_write(lcd_tmp1,lcd_tmp2,lcd_tmp3);
}

void lcd_wrd(uint8_t data_d)
{
     lcd_tmp1=0xfa;        //串行通讯第一字节为1 1 1 1 1 1 Rw Rs 0
                           //写数据RS=1 RW=0
     lcd_tmp2=data_d&0xf0; //第二字节为D7 D6 D5 D4 0 0 0 0
     lcd_tmp3=data_d<<4;   //第三字节为D3 D2 D1 D0 0 0 0 0
     lcd_write(lcd_tmp1,lcd_tmp2,lcd_tmp3);

}

void lcd_clear(void)
{
     	lcd_wri(1);
}	

void lcd_dis(uint8_t lcd_addr,uint8_t dis_data)
{
     	if((lcd_addr>=0x80)&&(lcd_addr<=0x9f)) lcd_wri(lcd_addr);
     	lcd_wrd(dis_data);
}
     
void lcd_write(uint8_t lcd_data1,uint8_t lcd_data2,uint8_t lcd_data3)
{
      PORTB|=(1<<lcd_cs);      //LCD选通
      SPCR|=(1<<SPE);          //SPI使能
      SPDR=lcd_data1;          //SPI传送第一字节
      while(!(SPSR&(1<<SPIF)));//等待传送完成
      SPDR=lcd_data2;          //SPI传送第一字节
      while(!(SPSR&(1<<SPIF)));
      SPDR=lcd_data3;          //SPI传送第一字节
      while(!(SPSR&(1<<SPIF)));
	    SPCR&=(~(1<<SPE));       //SPI关闭
	    PORTB&=(~(1<<lcd_cs));   //LCD关闭
}
      
      

⌨️ 快捷键说明

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