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

📄 lcd._c

📁 ATMEGA16L 驱动的串口12864
💻 _C
字号:
#include "lcd.h"

#define CS BIT(5)
#define SID BIT(6)
#define SCLK BIT(7)

#define LCD_ON PORTD &=~ BIT(7)
#define LCD_OFF PORTD &=~ BIT(7)


#define EN_CS PORTA  |=  CS
#define DIS_CS PORTA &=~ CS

#define ST_SID PORTA |= SID
#define CLS_SID PORTA &=~ SID

#define ST_SCLK PORTA |= SCLK
#define CLS_SCLK PORTA &=~ SCLK


unsigned char  ma[] ={"汉字显示LCD"};
unsigned char flash ma2[]={"自带字库图文混排"};
unsigned char flash ma3[]={"控制IC:ST7920  "};
unsigned char flash ma4[]={"功能强大使用方便"};

void portini(void)
{
    DDRD=0xff;
    PORTD = 0xff;
    DDRB = 0xff;
    PORTB = 0xff;
}

void delaynms(uint di) //延时
{
 uint da,db;
 for(da=0;da<di;da++)
   for(db=0;db<3000;db++);
}


void lcdinit(void)//初始化LCD
{
    delaynms(10);
    EN_CS;
    write(0,0x30); //8位界面,基本指令集
	delaynms(10);
    write(0,0x30); //显示打开,光标关,反白关
	delaynms(10);
	write(0,0x0c); //显示打开,光标关,反白关
		delaynms(10);
    write(0,0x01); //清屏
		delaynms(10);
	write(0,0x60); 
}

void write(uchar start,uchar ddata) //写指令或数据
{
    uchar start_data,Hdata,Ldata;
    if(start==0)
        start_data = 0xf8; //写指令
    else 
        start_data = 0xfa; //写数据
    Hdata = ddata&0xf0;  //取高4位
	Ldata = (ddata<<4)&0xf0; //取低4位
	sendbyte(start_data);   //发送起始信号
	delaynms(100);
	sendbyte(Hdata);  //发送高四位
	delaynms(50);
	sendbyte(Ldata);  //发送低四位
	delaynms(50);
}

void sendbyte(uchar bbyte) //发送一个字节
{
    unsigned char i;
    for(i=0;i<8;i++)
    {    
	
        if((bbyte&0x80)==1) //取出最高位
    		{ST_SID;}
		else
    		{CLS_SID;}
        ST_SCLK;
		delay_nus(100);
    CLS_SCLK;
        bbyte<<=1;
		delay_nus(100);
    }
}

void lcdtest(void) //图形方式下屏幕全黑
{
    uchar i,j;
    for(i=0;i<32;i++)
    {
        write(0,0x80+i);write(0,0x80);
        for(j=0;j<16;j++)write(1,0xff);
    }
    for(i=0;i<32;i++)
    { 
    	write(0,0x80+i);write(0,0x88);
        for(j=0;j<16;j++) write(1,0xff);
    }
}

void lcdcls(void) //图形方式下清屏
{
   unsigned char i,j;
   for(i=0;i<32;i++)
   { 
       {write(0,0x80+i);delaynms(10);write(0,0x80);}
       for(j=0;j<16;j++){ write(1,0x00);delaynms(10);}
   }
   
   for(i=0;i<32;i++)
   { 
       {write(0,0x80+i);delaynms(10);write(0,0x88);}
       for(j=0;j<16;j++) {write(1,0x00);delaynms(10);}
   }
}

void main()
{
 unsigned char i;
 delaynms(1000);
 portini();
 lcdinit();
 LCD_ON;
 while(1)
 { 
  lcdtest();
  lcdcls();
  write(0,0x80); for(i=0;i<16;i++)  write(1,ma[i]);
  delaynms(10);
  write(0,0x90); for(i=0;i<16;i++)  write(1,ma2[i]);
  delaynms(10);
  write(0,0x88); for(i=0;i<16;i++)  write(1,ma3[i]);
  delaynms(10);
  write(0,0x98); for(i=0;i<16;i++)  write(1,ma4[i]);
  delaynms(10);
  write(0,0x36); //图形方式
 }

}

⌨️ 快捷键说明

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