📄 lcd12864_8.c
字号:
#include <common.h>
#include<C8051F000.h>
sbit LCD_CS = P3^0;
sbit LCD_RES = P3^1;
sbit LCD_A0 = P3^2;
sbit LCD_SCK = P3^3;
sbit LCD_DA = P3^4;
void mydelay(unsigned int i)
{
unsigned int j;
for(j=0;j<i;j++);
}
void lcd_senddata(unsigned char da)
{
unsigned char i;
LCD_CS = 0;
LCD_A0 = 1; //数据通道
LCD_SCK = 1;
for(i = 0; i < 8; i++)
{
da <<= 1;
LCD_DA = CY;
LCD_SCK = 0;
mydelay(20);
LCD_SCK = 1;
mydelay(10);
}
LCD_CS = 1;
mydelay(20);
}
void lcd_sendcmd(unsigned char da)
{
unsigned char i;
LCD_CS = 0;
LCD_A0 = 0; //指令通道
LCD_SCK = 1;
for(i = 0; i < 8; i++)
{
da <<= 1;
LCD_DA = CY;
LCD_SCK = 0;
mydelay(10);
LCD_SCK = 1;
mydelay(10);
}
LCD_CS = 1;
mydelay(20);
}
void lcd_init(void)
{
LCD_RES = 1;
mydelay(32767);
lcd_sendcmd(0xE2); //internal reset
lcd_sendcmd(0xA2); //d0:Set LCD drive voltage bias ratio 0=1/9bias 1=1/7bias
lcd_sendcmd(0xC8); //d3:select COM output direction 0=normal 1=reverse
lcd_sendcmd(0xA0); //d0:select SEG output direction 0=normal 1=reverse
lcd_sendcmd(0xA6); //d0=0display normal;=1reverse
lcd_sendcmd(0xf8); //select booster ratio
lcd_sendcmd(0x00); //d0\d1=00:4x
lcd_sendcmd(0x2C); //d2:1=select internal power supply operating mode
lcd_sendcmd(0x2E); //
lcd_sendcmd(0x2F);
// lcd_sendcmd(0x25); //select internal resistor ratio(RB/RA)mode
lcd_sendcmd(0x81); //select the VO output voltage electronic volume register
lcd_sendcmd(0x14); //select the VO output voltage electronic volume register
lcd_sendcmd(0x0e); //select the VO output voltage electronic volume register
lcd_sendcmd(0xAF); //d0:LCD display ON=1/OFF=0
lcd_sendcmd(0xE0);
lcd_sendcmd(0x40); //Set the display RAM start line address
}
void Set_Page_Address(unsigned char dat)
{
lcd_sendcmd(0xb0|dat);
}
void Set_Colume_Address(unsigned char dat)
{
unsigned char tmp;
tmp=dat>>4;
lcd_sendcmd(0x10|tmp); //送列地址高三位
tmp=0x0f&dat;
lcd_sendcmd(tmp); //送列地址低四位
}
void lcd_clr(void)
{
unsigned char i,j;
for(i = 0; i < 8; i++)
{
Set_Page_Address(i);
Set_Colume_Address(0);
for(j = 0; j < 128; j++)
{
lcd_senddata(0x00);
}
}
}
void lcd_drawpot(unsigned char x/*0-127*/, unsigned char y/*0-63*/)
{
unsigned char temp;
Set_Colume_Address(x);
Set_Page_Address(y>>3);
y &= 0x07;
temp = 1<<y;
lcd_senddata(temp);
}
//x每写一个字+16,y换行+1
void lcd_drawhanzimo(unsigned char x/*0-127*/,unsigned char y/*0-7*/,unsigned char* ptr)
{
unsigned int i;
Set_Page_Address(y);
Set_Colume_Address(x);
for(i = 0; i<16; i ++)
lcd_senddata(*(ptr+i));
Set_Page_Address(y+1);
Set_Colume_Address(x);
for(i = 0; i<16; i++)
lcd_senddata(*(ptr+i+16));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -