📄 19264.c
字号:
/*The following is for lm12896 liquid crystal module drived
by S6B0741 LCD controller,4-pin Serial Interface */
/*
Set Page Address : 1 0 1 1 P3 P2 P1 P0//BX
Set Column Address MSB : 0 0 0 1 0 Y6 Y5 Y4
Set Column Address LSB : 0 0 0 0 Y3 Y2 Y1 Y0
*/
#include <stdio.h>
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
code uchar data_out[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
sbit LCD_RST=P3^6; //
sbit LCD_BK =P0^2;
sbit LCD_CS =P3^7; //
sbit LCD_RS =P3^4; //
sbit SID =P0^7; // 串行数据
sbit SCLK =P0^6; //
void delay100us(void) /*delay TIMER1*1 ms for 12MHz */
{
uchar data i;
for(i=0;i<25;i++)
{
_nop_();
_nop_();
}
}
void delay1ms(void) /*delay TIMER1*1 ms for 12MHz */
{
uchar data i;
for(i=0;i<250;i++)
{
_nop_();
_nop_();
}
}
/*-------以下是驱动函数 ---------- */
void wcode(uchar cc) //send insruction
{
uchar i;
LCD_RS=0;
SCLK=0;
for(i=0;i<8;i++)
{
if ((cc&data_out[i]) > 0)
{
SID=1;
_nop_();
SCLK=1;
_nop_();
SCLK=0;
}
else
{
SID=0;
_nop_();
SCLK=1;
_nop_();
SCLK=0;
}
}
}
void set_addr(uchar pager,uchar col_addr)
{
uchar datatemp;
LCD_RS=0;
delay100us();
wcode(0xb0|pager);/*设置页地址0xb0+pager*/
_nop_();
_nop_();
datatemp = col_addr; /*写列地址*/
wcode((datatemp >> 4)|0x10);/*设置列地址MSB:00010Y6Y5Y4*/
wcode(datatemp & 0x0f);/*设置列地址LSB:0000Y3Y2Y1Y0*/
}
void wdata(uchar dd) //send data
{
uchar i;
LCD_RS=1;
SCLK=0;
for(i=0;i<8;i++)
{
if ((dd&data_out[i]) > 0)
{
SID=1;
_nop_();
SCLK=1;
_nop_();
SCLK=0;
}
else
{
SID=0;
_nop_();
SCLK=1;
_nop_();
SCLK=0;
}
}
}
void CLRLCD(void)
{
uchar i,j;
for(i=0;i<12;i++) //clear lcd
{
wcode(0xb0|i); //set page add = 0~11
wcode(0x10); //set col. add MSB = 0
wcode(0x00); //set col. add LSB = 0
for(j=0;j<128;j++)
{
wdata(0x00);
wdata(0x00);
}
}
wcode(0x3f);/*开显示*/
}
void lcd_init()
{
delay1ms();
LCD_RST=0;
LCD_CS=0;
LCD_RS=0;
delay1ms();
LCD_RST=1;
delay1ms();
LCD_CS=0;
LCD_RS=0;
wcode(0xe2); //reset
wcode(0xae); //display off
wcode(0x48); //set partial display duty ratio
wcode(0x60);
wcode(0xa1); //adc = normal
wcode(0xc8); //SHL select = nomal
wcode(0x44); //set initial com0 reg
wcode(0x10);
wcode(0xab); //osc on strat
wcode(0x66); //select dc-dc stepup = 5 times
wcode(0x27); //select reg resistor = 7.2
wcode(0x81); //set elec. vol. reg
wcode(0x2C); //0x2c
wcode(0x55); //select bias = 1/10
wcode(0x40); //set ini. display line reg.
wcode(0x00);
wcode(0x4c); //set N-line inversion
wcode(0x00);
wcode(0x94); //set FRC PWM mode 3FRC 9PWM
wcode(0x88); //set white mode and 1st/2nd frame set pulse width
wcode(0x00);
wcode(0x89); //set white mode and 3st/4nd frame set pulse width
wcode(0x00);
wcode(0x8a); //set light gray mode and 1st/2nd frame set pulse width
wcode(0x09);
wcode(0x8b); //set light gray mode and 3st/4nd frame set pulse width
wcode(0x00);
wcode(0x8c); //set dark gray mode and 1st/2nd frame set pulse width
wcode(0x99);
wcode(0x8d); //set dark gray mode and 3st/4nd frame set pulse width
wcode(0x00);
wcode(0x8e); //set black mode and 1st/2nd frame set pulse width
wcode(0x99);
wcode(0x8f); //set black mode and 3st/4nd frame set pulse width
wcode(0x09);
wcode(0x2f); //power ctl = all on
wcode(0xaf);
CLRLCD();
}
void dis_any_dot(uchar pager,uchar col_addr,uchar dot,uchar reverse)
{
uchar tem=dot;
if(reverse==1)tem=~dot; /*反白显示*/
if(pager==0)tem=0x01|tem;/*第一页要显示上边框*/
if(pager==11)tem=0x80|tem;/*最后一页要显示下边框 */
if(col_addr==0|col_addr==127)tem=0xff; /*第一列要显示左边框,最后一列要显示右边框*/
wdata(tem);
wdata(tem);
}
/*void dis_16x16(uchar pager,uchar col_addr,uchar *character,uchar reverse)
{
uchar i;
set_addr(pager,col_addr);
for(i=0;i<16;i++)
{
dis_any_dot(pager,col_addr+i,*character++,reverse);
}
pager +=1;
set_addr(pager,col_addr);
for(i=0;i<16;i++)
{
dis_any_dot(pager,col_addr+i,*character++,reverse);
}
}*/
void dis_12x12(uchar pager,uchar col_addr,uchar *character,uchar reverse,uchar frame)
{
uchar i,tem;
set_addr(pager,col_addr);
for(i=0;i<12;i++)
{
tem=*character++;
if(((frame==1)|(frame==2))&(reverse==0))tem=tem|0x01;//显示上边框
if((frame==1)&(i==0)&(reverse==0))tem=0xff;//显示左边框
if((frame==2)&(i==11)&(reverse==0))tem=0xff;//显示右边框
dis_any_dot(pager,col_addr+i,tem,reverse);
}
pager +=1;
set_addr(pager,col_addr);
for(i=0;i<12;i++)
{
tem=*character++;
if(((frame==1)|(frame==2))&(reverse==0))tem=tem|0x80;//显示下边框
if((frame==1)&(i==0)&(reverse==0))tem=0x7f;//显示左边框
if((frame==2)&(i==11)&(reverse==0))tem=0x7f;//显示右边框
dis_any_dot(pager,col_addr+i,tem,reverse);
}
}
void dis_14x14(uchar pager,uchar col_addr,uchar *character,uchar reverse,uchar frame)
{
uchar i,tem;
set_addr(pager,col_addr);
for(i=0;i<14;i++)
{
tem=*character++;
if((frame==1)&(i==0)&(reverse==0))tem=0xff; //显示左边框
if((frame==2)&(i==13)&(reverse==0))tem=0xff;//显示右边框
if(((frame==1)|(frame==2)|(frame==3))&(reverse==0))tem=tem|0x01;//显示上边框
dis_any_dot(pager,col_addr+i,tem,reverse);
}
pager +=1;
set_addr(pager,col_addr);
for(i=0;i<14;i++)
{
tem=*character++;
if((frame==1)&(i==0)&(reverse==0))tem=0x3f;//显示左边框
if((frame==2)&(i==13)&(reverse==0))tem=0x3f;//显示右边框
if(((frame==1)|(frame==2)|(frame==3))&(reverse==0))tem=tem|0x40;//显示下边框
dis_any_dot(pager,col_addr+i,tem,reverse);
}
}
void dis_char_7x14(uchar pager,uchar col_addr,uchar *character,uchar reverse)
{
uchar i;
set_addr(pager,col_addr);
for(i=0;i<7;i++)
{
dis_any_dot(pager,col_addr+i,*character++,reverse);
}
pager +=1;
set_addr(pager,col_addr);
for(i=0;i<7;i++)
{
dis_any_dot(pager,col_addr+i,*character++,reverse);
}
}
void show_lcd_borad(void)//
{
uchar data i;
set_addr(0,1);
for(i=1;i<127;i++)
{
dis_any_dot(0,1,0x01,0);
};
set_addr(11,1);
for(i=1;i<127;i++)
{
dis_any_dot(11,1,0x80,0);
};
for(i=0;i<12;i++)
{
set_addr(i,0);
dis_any_dot(0,0,0xff,0);
set_addr(i,127);
dis_any_dot(0,0,0xff,0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -