📄 lcd1602.c
字号:
/*********************************************
example program for PIC download board
16F877A @3.6864MHz
test LCD 1602
www.mcufan.com
*********************************************/
#include <pic.h>
#define LCD_E_SET PORTB |= 0x20 //PB5
#define LCD_E_CLR PORTB &= ~0x20
#define LCD_RS_SET PORTB |= 0x10 //PB4
#define LCD_RS_CLR PORTB &= ~0x10
__CONFIG(WDTDIS & HS & LVPDIS & DEBUGDIS);
unsigned char line1[16],line2[16];
const unsigned char cgram1[64]={0x00,0x1f,0x12,0x09,0x1f,0x11,0x01,0x0f,
0x1e,0x04,0x04,0x08,0x1f,0x01,0x00,0x1e,
0x02,0x03,0x06,0x05,0x04,0x09,0x09,0x12,
0x00,0x1c,0x04,0x08,0x10,0x18,0x04,0x07,
0x04,0x04,0x04,0x04,0x1f,0x09,0x09,0x09,0x00,0x1f,0x01,0x02,0x04,0x04,0x04,0x1f,
0x11,0x19,0x06,0x04,0x06,0x0b,0x12,0x10,0x04,0x04,0x04,0x04,0x04,0x04,0x14,0x08};//爱好
void delay5ms()
{
unsigned int i;
for (i=0;i<4000;i++)
;
}
void delay50us()
{
register int i;
for (i=0;i<100;i++)
;
}
wr_com_8(unsigned char comm)
{
unsigned char pb;
LCD_E_CLR;
LCD_RS_CLR;
LCD_E_SET;
pb=PORTB;
// pb=pb&0x0F;
// pb +=comm&0xF0;
pb=pb&0xF0;
pb +=comm&0x0F;
PORTB =pb;
LCD_RS_CLR;
LCD_E_CLR;
}
wr_data_8(unsigned char dat)
{
unsigned char pb;
LCD_E_CLR;
LCD_RS_CLR;
LCD_RS_SET;
LCD_E_SET;
pb=PORTB;
pb=pb&0xF0;
pb +=dat&0x0F;
PORTB =pb;
LCD_E_CLR;
LCD_RS_CLR;
}
wr_com(unsigned char comm)
{
unsigned char i;
unsigned char pb;
i=(comm>>4)&0x0f;//i=comm&0xf0;
LCD_E_CLR;
LCD_RS_CLR;
LCD_E_SET;
pb=PORTB;
pb=pb&0xF0;
pb +=i&0x0F;
PORTB =pb;
LCD_RS_CLR;
LCD_E_CLR;
LCD_E_SET;
i=comm&0x0f;
pb=PORTB;
pb=pb&0xF0;
pb +=i&0x0F;
PORTB =pb;
LCD_E_CLR;
LCD_RS_CLR;
}
wr_data(unsigned char dat)
{
unsigned char i;
unsigned char pb;
i=(dat>>4)&0x0f;
LCD_E_CLR;
LCD_RS_CLR;
LCD_RS_SET;
LCD_E_SET;
pb=PORTB;
pb=pb&0xF0;
pb +=i&0x0F;
PORTB =pb;
LCD_E_CLR;
i=dat&0x0f;
LCD_E_SET;
pb=PORTB;
pb=pb&0xF0;
pb +=i&0x0F;
PORTB =pb;
LCD_E_CLR;
LCD_RS_CLR;
}
unsigned char rd_bf()
{
}
void init()
{
unsigned char in,i;
// DDRB |= 0xFF; // Set SCK, MOSI & SS PB1,2,3 as outputs
//PORTB &= 0x5F; // clear bits MOSI, & SCK
wr_com_8(0x03);
delay5ms();
wr_com_8(0x03);
delay5ms();
wr_com_8(0x03);
delay5ms();
delay5ms();
/* wr_com(0x01);
delay5ms();
delay5ms();
wr_com(0x06);
delay5ms();
delay50us(); */
wr_com(0x28);
delay50us();
delay50us();
wr_com(0x0c);
delay50us();
delay50us();
wr_com(0x40);
delay50us();
delay50us();
for(i=0;i<64;i++)
{
wr_data(cgram1[i]); //display "0"
delay50us();
}
}
/*系统各输入输出口初始化子程序*/
void initial_port()
{
TRISB=0x00; /*B口设置为输出*/
INTCON=0x00; /*关闭所有中断*/
}
display_162()
{
unsigned char in,i;
wr_com(0x80);
delay50us();
delay50us();
for(i=0;i<16;i++)
{
wr_data(line1[i]); //display "0"
delay50us();
}
delay50us();
wr_com(0xc0);
delay50us();
delay50us();
for(i=0;i<16;i++)
{
wr_data(line2[i]); //display "0"
delay50us();
}
}
main()
{
unsigned char in,i,da;
delay5ms();
initial_port();
init();
while(1)
{
line1[0]=0x20;
line1[1]=0; //display "爱好"
line1[2]=1;
line1[3]=4;
line1[4]=5;
line1[5]=0x20;
line1[6]=0; //display "爱好"
line1[7]=1;
line1[8]=4;
line1[9]=5;
line1[10]=0x20;
line1[11]=0; //display "爱好"
line1[12]=1;
line1[13]=4;
line1[14]=5;
line1[15]=0x20;
line2[0]=0x20;
line2[1]=2; //display "爱好"
line2[2]=3;
line2[3]=6;
line2[4]=7;
line2[5]=0x20;
line2[6]=2; //display "爱好"
line2[7]=3;
line2[8]=6;
line2[9]=7;
line2[10]=0x20;
line2[11]=2; //display "爱好"
line2[12]=3;
line2[13]=6;
line2[14]=7;
line2[15]=0x20;
display_162();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -