📄 display.c
字号:
// 1、显示开/关设置 CODE:R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
// L L L L H H H H H H/L !!!!!3e/3f!!!!
//
//功能:设置屏幕显示开/关。DB0=H,开显示;DB0=L,关显示。不影响显示RAM(DD RAM)中的内容。
//CALL OUTI ;输出指令 OUT1 OUT2
//CALL SDELAY
//MOV A,#00111111B
//2、设置显示起始行 CODE:R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 !!!!!c0-ff!!!!
// L L H H 行地址(0~63)
//功能:执行该命令后,所设置的行将显示在屏幕的第一行。
//显示起始行是由Z地址计数器控制的,该命令自动将A0-A5位地址送入Z地址计数器,起始地址可以是0-63范围内任意一行。
//Z地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一.
//MOV A,#11000000B
//3、设置页地址 CODE:R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
// L L H L H H H 页地址(0~7) !!!!!b8-bf!!!
//功能:执行本指令后,下面的读写操作将在指定页内,直到重新设置。
//页地址就是DD RAM 的行地址,页地址存储在X地址计数器中,A2-A0可表示8页,读写数据对页地址没有影响.
//除本指令可改变页地址外,复位信号(RST)可把页地址计数器内容清零
//DD RAM地址映像表
///Y 地址 0 1 2 ……… 61 62 63
//DB0 ∫ PAGE0 DB7 X=0
//DB0 ∫ PAGE1 DB7 X=1
//∷
//DB0 ∫ PAGE6 DB7 X=7
//DB0 ∫ PAGE7 DB7 X=8
//4、设置列地址 CODE:R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 !!!!40-7f!!!!
// L L L H 列地址(0~63)
//功能: DD RAM 的列地址存储在Y地址计数器中,读写数据对列地址有影响,在对DD RAM进行读写操作后,Y地址自动加一。
//5、状态检测 CODE: R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 !!!!30-b0!!!
// H L BF L ON/OFF RST L L L L
//功能:读忙信号标志位(BF)、复位标志位(RST)以及显示状态位(ON/OFF)。
// BF=H:内部正在执行操作; BF=L:空闲状态。RST=H:正处于复位初始化状态;RST=L:正常状态。
//ON/OFF=H:表示显示关闭;ON/OFF=L:表示显示开。
//6、写显示数据 CODE:R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
// L H D7 D6 D5 D4 D3 D2 D1 D0 !!!!00-ff!!!
//功能:写数据到DD RAM,DD RAM是存储图形显示数据的,写指令执行后Y地址计数器自动加1。
//D7-D0位数据为1表示显示,数据为0表示不显示。写数据到DD RAM前,要先执行“设置页地址”及“设置列地址”命令。
//7、读显示数据 CODE:RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
// H H D7 D6 D5 D4 D3 D2 D1 D0 1!!00-ff!!!
//功能:从DD RAM读数据,读指令执行后Y地址计数器自动加1。从DD RAM读数据前要先执行“设置页地址” 及“设置列地址”命令
#include <avr/io.h>
#include <stdint.h>
#include <avr/delay.h>
#include "header.h"
#define outdata PORTA
#define CS1 PD7
#define CS2 PD6
#define D_I PD4
#define W_R PD1
#define E PD0
void shortdelay()
{
asm("nop");
asm("nop");
asm("nop");
}
void lcdwdata1(unsigned char i)
{
PORTD|=_BV(CS1);//CS1=1;
PORTD|=_BV(E);//E=1;
PORTD&=~_BV(W_R);//W_R=0;
PORTD|=_BV(D_I);//D_I=1;
outdata=i;
PORTD&=~_BV(E);//E=0;
PORTD&=~_BV(CS1);//CS1=0;
shortdelay();
}
void lcdwdata2(unsigned char i)
{
PORTD|=_BV(CS2);//CS2=1;
PORTD|=_BV(E);//E=1;
PORTD&=~_BV(W_R);//W_R=0;
PORTD|=_BV(D_I);//D_I=1;
outdata=i;
PORTD&=~_BV(E);//E=0;
PORTD&=~_BV(CS2);//CS2=0;
shortdelay();
}
/*unsigned char lcdrdata1()
{
unsigned char pindata;
CS1=1;
E=1;
W_R=1;
D_I=1;
pindata=outdata;
E=0;
CS1=0;
shortdelay();
return pindata;
}
*/
/*unsigned char lcdrdata2()
{
unsigned char pindata;
CS2=1;
E=1;
W_R=1;
D_I=1;
pindata=outdata;
E=0;
CS2=0;
shortdelay();
return pindata;
}
*/
void lcdwinst1(unsigned char i)
{
PORTD|=_BV(CS1);//CS1=1;
PORTD|=_BV(E);//E=1;
PORTD&=~_BV(W_R);//W_R=0;
PORTD&=~_BV(D_I);//D_I=0;
outdata=i;
PORTD&=~_BV(E);//E=0;
PORTD&=~_BV(CS1);//CS1=0;
shortdelay();
}
void lcdwinst2(unsigned char i)
{
PORTD|=_BV(CS2);//CS2=1;
PORTD|=_BV(E);//E=1;
PORTD&=~_BV(W_R);//W_R=0;
PORTD&=~_BV(D_I);//D_I=0;
outdata=i;
PORTD&=~_BV(E);//E=0;
PORTD&=~_BV(CS2);//CS2=0;
shortdelay();
}
void lcdreset()
{
DDRA=0;//数据口设置为输入
DDRD=_BV(D_I)|_BV(W_R)|_BV(E)|_BV(CS1)|_BV(CS2);//控制口设置为输出
lcdwinst1(0x3e);
shortdelay();
lcdwinst2(0x3e);
shortdelay();
lcdwinst1(0x3f);
shortdelay();
lcdwinst2(0x3f);
shortdelay();
lcdwinst1(0xc0);
shortdelay();
lcdwinst2(0xc0);
shortdelay();
}
void lcddisplay(unsigned char table[])
{
unsigned char pagenum,i,j;
pagenum=0xb8;
for(i=0;i<8;i++)
{
lcdwinst1(pagenum+i);
lcdwinst2(pagenum+i);
lcdwinst1(0x40);
for(j=0;j<64;j++)
{
lcdwdata1(*(table++));
}
lcdwinst2(0x40);
for(j=0;j<64;j++)
{
lcdwdata2(*(table++));
}
}
}
void converse(unsigned char page,unsigned char table[])
{
unsigned char pagenum,j;
pagenum=0xb8+page*2;//page0-3
lcdwinst1(pagenum);
lcdwinst2(pagenum);
lcdwinst1(0x40);
for(j=0;j<64;j++)
{
lcdwdata1(~table[256*page+j]);
}
lcdwinst2(0x40);
for(j=0;j<64;j++)
{
lcdwdata2(~table[256*page+j+64]);
}
lcdwinst1(pagenum+1);
lcdwinst2(pagenum+1);
lcdwinst1(0x40);
for(j=0;j<64;j++)
{
lcdwdata1(~table[256*page+j+128]);
}
lcdwinst2(0x40);
for(j=0;j<64;j++)
{
lcdwdata2(~table[256*page+j+64+128]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -