?? lm3123_example.c
字號(hào):
//-----------------------------------------
// Shenzhen TOPWAY Technology Co. Ltd.
// LCD Module: LM3123
// Display size: 160x32
// Driver/Controller: AX6120/AX6121
// Date: 2005-02-26
//-----------------------------------------
#include <stdio.h>
#include <reg51.h>
#include <intrins.h>
#define u_char unsigned char
#define u_int unsigned int
sbit _RES = P3^5;
sbit E1 = P3^1;
sbit E2 = P3^2;
sbit E3 = P3^3;
sbit A0 = P3^6;
sbit R_W = P3^7;
// DataBus = P1
//====================
// Display Data
//====================
/*-- 160x32 --*/
/*-- LM3123 Logo --*/
u_int code Logo1[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x7F,0x01,0x01,0x00,
0x3E,0x41,0x41,0x41,0x3E,0x00,0x7F,0x09,0x09,0x09,0x06,0x00,0x3F,0x40,0x38,0x40,
0x3F,0x00,0x7C,0x0A,0x09,0x0A,0x7C,0x00,0x03,0x04,0x78,0x04,0x03,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x40,0x00,0x7F,0x02,0x0C,0x02,0x7F,0x00,
0x22,0x41,0x49,0x49,0x36,0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x42,0x61,0x51,0x49,
0x46,0x00,0x22,0x41,0x49,0x49,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x26,0x49,0x49,0x49,0x32,0x00,0x01,0x01,0x7F,0x01,0x01,0x00,0x7F,0x04,
0x08,0x10,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x40,0x00,
0x3E,0x41,0x41,0x41,0x22,0x00,0x7F,0x41,0x41,0x22,0x1C,0x00,0x00,0x40,0x30,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x3E,0x49,
0x49,0x49,0x30,0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x44,0x28,0x10,0x28,0x44,0x00,
0x22,0x41,0x49,0x49,0x36,0x00,0x42,0x61,0x51,0x49,0x46,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x7C,0x14,0x14,0x14,0x08,0x00,0x00,0x44,0x7D,0x40,0x00,0x00,0x44,0x28,
0x10,0x28,0x44,0x00,0x38,0x54,0x54,0x54,0x18,0x00,0x00,0x41,0x7F,0x40,0x00,0x00,
0x48,0x54,0x54,0x54,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x42,0x7F,0x40,0x00,0x00,0x42,0x61,0x51,0x49,0x46,0x00,0x22,0x41,0x49,0x49,
0x36,0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x3E,0x49,
0x49,0x49,0x30,0x00,0x01,0x01,0x79,0x05,0x03,0x00,0x36,0x49,0x49,0x49,0x36,0x00,
0x26,0x49,0x49,0x49,0x3E,0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00,0x42,0x7F,0x40,
0x00,0x00,0x42,0x61,0x51,0x49,0x46,0x00,0x22,0x41,0x49,0x49,0x36,0x00,0x18,0x14,
0x12,0x7F,0x10,0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x3E,0x49,0x49,0x49,0x30,0x00,
0x01,0x01,0x79,0x05,0x03,0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x26,0x49,0x49,0x49,
0x3E,0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x42,0x61,
0x51,0x49,0x46,0x00,0x22,0x41,0x49,0x49,0x36,0x00,0x18,0x14,0x12,0x7F,0x10,0x00,
0x27,0x45,0x45,0x45,0x39,0x00,0x3E,0x49,0x49,0x49,0x30,0x00,0x01,0x01,0x79,0x05};
//====================
// delay routine
//====================
void delay100us(void) //delay 100us for 12MHz
{
u_char data i;
for(i=0;i<=70;i++)
{_nop_(); _nop_();}
}
void delay1ms(void) //delay 1ms for 12MHz
{
u_char data i;
for(i=0;i<=250;i++)
{_nop_(); _nop_();}
}
void delay100ms(void)
{
u_char data j;
for(j=0;j<=100;j++)
{delay1ms();}
}
//====================
// write command
//====================
void wr_command(u_char ChipNo,command)
{
P1 = command;
A0=0;
R_W=0;
_nop_();
switch(ChipNo)
{
case 0: E1=1; E2=1; E3=1; break;// write into all driver
case 1: E1=1; E2=0; E3=0; break;// write into 1st driver
case 2: E1=0; E2=1; E3=0; break;// write into 2nd driver
case 3: E1=0; E2=0; E3=1; break;// write into 3rd driver
}
E1=0; E2=0; E3=0;
delay100us();
}
//====================
// write data
//====================
void wr_data(u_char ChipNo,ddata)
{
P1 = ddata;
A0=1;
R_W=0;
_nop_();
switch(ChipNo)
{
case 0: E1=1; E2=1; E3=1; break; // write into all driver
case 1: E1=1; E2=0; E3=0; break; // write into 1st driver
case 2: E1=0; E2=1; E3=0; break; // write into 2nd driver
case 3: E1=0; E2=0; E3=1; break; // write into 3rd driver
}
E1=0; E2=0; E3=0;
}
//====================
// clear screen
//====================
void ClrScreen() // fill 00h into DD RAM
{
u_char i,j;
for(i=0;i<4;i++)
{
wr_command(0,0xb8 | i); // select page
wr_command(0,0x00); // start form column 0
for(j=0;j<80;j++)
{
wr_data(0,0x00);// fill 00h in to DD RAM
}
}
}
//====================
// Write a Screen
//====================
void WriteScreen(u_int *DisplayData) // DisplayData should be 160x32/8 = 640 bytes
{
u_char TempData;
u_char i, j;
for(i=0;i<4;i++)
{
wr_command(0,0xb8 | i); // select page
wr_command(1,0x14); // chip1 start form column 14h
wr_command(2,0x00); // chip2 start form column 00h
wr_command(3,0x13); // chip3 start form column 13h
for(j=0;j<159;j++)
{
TempData=(*(DisplayData+(i*160)+j));
if (j<60)
{
wr_data(1,TempData); // 0-59 column goto chip1
}
else if ((j>=60)&(j<=139))
{
wr_data(2,TempData); // 60-140 column goto chip2
}
else
{
wr_data(3,TempData); // 141-160 column goto chip3
}
}
}
}
//====================
// Write Icons Data
//====================
void WriteIcons(void)
{
wr_command(0,0xb8 | 1); // icons mapped at page 1
wr_command(1,0x13); // icons Mapped at column 13h
wr_data(1,0xF0); // turn on all icons
}
//====================
// Init LCD module
//====================
void initLCDM(void)
{
E1=0; E2=0; E3=0; // init E status
_RES = 1;
delay1ms();
_RES = 0;
delay1ms();
_RES = 1; // _RES=1, 68 I/F mode
wr_command(0,0xa9); // set duty cycle 1/32
wr_command(0,0xa4); // static drive = OFF
wr_command(0,0xa1); // adc=1
wr_command(0,0xc0); // display start line =0;
wr_command(0,0xaf); // display ON;
//wr_command(0,0xee); // read modify write=Off;
}
//************************
// Main Program
//************************
void main(void)
{
SP = 0x60; // stack pointer
EA = 0; // disable interrupts
initLCDM(); // init LCD module
ClrScreen(); // clear DD RAM
WriteScreen(Logo1); // send a screen of display
WriteIcons(); // accessing icons
while(1) // end of program
{
_nop_();
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -