📄 ide1.c
字号:
#include <c8051f020.h>
#include <intrins.h>
#define SYSCLK 11059200
sbit P30 = P3^3;
sbit P31 = P3^4;
sbit P32 = P3^5;
sbit P33 = P3^6;
sbit P34 = P3^7;
sbit P35 = P3^0;
#define LCD_DATA P2
#define LCD_RS P30
#define LCD_RW P31
#define LCD_E P32
#define LCD_CS1 P33
#define LCD_CS2 P34
#define LCD_RST P35
#define SELECTCS 0
unsigned char Count1ms;
void Delay1ms(unsigned char);
char code screen1[]=
{
0x00,0x10,0x61,0x06,0xC0,0x30,0x02,0x3E,0xC2,0x02,0x82,0x62,0x1F,0x02,0x00,0x00,
0x00,0x02,0x02,0x3F,0x20,0x20,0x10,0x08,0x05,0x02,0x05,0x08,0x10,0x30,0x10,0x00,
};
char code screen2[]=
{
0x00,0x00,0x10,0x0C,0x14,0x14,0x14,0x15,0xD6,0x54,0x34,0x14,0x14,0x8C,0x00,0x00,
0x00,0x01,0x01,0x01,0x01,0x01,0x11,0x21,0x1F,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
};
/*-- 文字: 汉 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
char code Han[]=
{
0x00,0x10,0x61,0x06,0xC0,0x30,0x02,0x3E,0xC2,0x02,0x82,0x62,0x1F,0x02,0x00,0x00,
0x00,0x02,0x02,0x3F,0x20,0x20,0x10,0x08,0x05,0x02,0x05,0x08,0x10,0x30,0x10,0x00,
};
/*-- 文字: 字 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
char code Zi[]=
{
0x00,0x00,0x10,0x0C,0x14,0x14,0x14,0x15,0xD6,0x54,0x34,0x14,0x14,0x8C,0x00,0x00,
0x00,0x01,0x01,0x01,0x01,0x01,0x11,0x21,0x1F,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
};
//------------------------------------------------
void LCD_WaitReady1(void)
{
LCD_DATA = 0xff;
_nop_();
LCD_CS2 = SELECTCS;
LCD_RW = 1;
LCD_RS = 0;
LCD_E = 1;
while(LCD_DATA&0x80);
LCD_CS2 =!SELECTCS;
}
//--------------------------------------------
void LCD_WaitReady2(void)
{
LCD_DATA = 0xff;
_nop_();
LCD_CS1 =SELECTCS;
LCD_RW = 1;
LCD_RS = 0;
LCD_E = 1;
while(LCD_DATA&0x80);
LCD_CS1 =!SELECTCS;
}
//---------------------------------------------
void LCD_WriteCommand1(char ch)
{
LCD_WaitReady1();
LCD_CS2 = SELECTCS;
LCD_RW = 0;
LCD_RS = 0;
LCD_DATA = ch;
LCD_E = 1;
LCD_E = 0;
LCD_CS2 =!SELECTCS;
}
//------------------------------------------
void LCD_WriteCommand2(char ch)
{
LCD_WaitReady2();
LCD_CS1 = SELECTCS;
LCD_RW = 0;
LCD_RS = 0;
LCD_DATA = ch;
LCD_E = 1;
LCD_E = 0;
LCD_CS1 =!SELECTCS;
}
//---------------------------------------------
void LCD_WriteData1(char ch)
{
LCD_WaitReady1();
LCD_CS2 = SELECTCS;
LCD_RW = 0;
LCD_RS = 1;
LCD_DATA = ch;
LCD_E = 1;
LCD_E = 0;
LCD_CS2 =!SELECTCS;
}
//-----------------------------------------
void LCD_WriteData2(char ch)
{
LCD_WaitReady2();
LCD_CS1 = SELECTCS;
LCD_RW = 0;
LCD_RS = 1;
LCD_DATA = ch;
LCD_E = 1;
LCD_E = 0;
LCD_CS1 =!SELECTCS;
}
//--------------------------------------------
void LCD_WriteHZ(char x,char y,char *Dot)
{
char i;
for(i=0;i<32;i ++)
{
if((x+i%16)<64)
{
LCD_WriteCommand1(0xB8+y+i/16);
LCD_WriteCommand1(0x40+x+i%16);
LCD_WriteData1(Dot[i]);
}
else
{
LCD_WriteCommand2(0xB8+y+i/16);
LCD_WriteCommand2(0x40+x-64+i%16);
LCD_WriteData2(Dot[i]);
}
}
}
//-------------------------------------------
void InitLCD(void)
{
char i,j;
LCD_RST = 0;
Delay1ms(1);
LCD_RST = 1;
LCD_WriteCommand1(0xc0);
LCD_WriteCommand2(0xc0);
LCD_WriteCommand1(0x3f);
LCD_WriteCommand2(0x3f);
for(j=0;j<8;j++)
{
LCD_WriteCommand1(0xB8+j);
LCD_WriteCommand1(0x40);
for (i=0;i<64;i++)
LCD_WriteCommand2(0xB8+j);
LCD_WriteCommand2(0x40);
for (i=0;i<64;i++)
LCD_WriteData2(0x00);
}
}
//-------------------------------------------
void DispBmp(char *buf)
{
int i,j;
for(j=0;j<8;j++)
{
LCD_WriteCommand1(0xB8+j);
LCD_WriteCommand1(0x40);
for (i=0;i<64;i++)
LCD_WriteData1(buf[(j*2)*64+i]);
LCD_WriteCommand2(0xB8+j);
LCD_WriteCommand2(0x40);
for (i=0;i<64;i++)
LCD_WriteData2(buf[(j*2+1)*64+i]);
}
}
//----------------------------------------------
void SYSCLK_Init(void)
{
int i;
OSCXCN = 0x67;
for (i=0;i<256;i++);
while(!(OSCXCN&0x80));
OSCICN = 0x88;
}
//------------------------------------------
void PORT_Init()
{
XBR2 = 0x40;
}
//----------------------------------------------
void Timer0_Init(void)
{
CKCON = 0x8;
TMOD = 0x1;
Count1ms = 10;
TR0 = 0;
TH0 = (-SYSCLK/1000)>>8;
TL0 = -SYSCLK/1000;
TR0 = 1;
IE = 0x2;
}
void Timer0_ISR(void) interrupt 1
{
Count1ms = 10;
TH0 =(-SYSCLK/1000)>>8;
TL0 = -SYSCLK/1000;
if (Count1ms)Count1ms--;
}
//------------------------------------------------------
void Delay1ms(unsigned char T)
{
Count1ms = T;
while(Count1ms);
}
//-----------------------------------------
void Delay1s(unsigned char T)
{
while(T)
{
Delay1ms(200);
Delay1ms(200);
Delay1ms(200);
Delay1ms(200);
Delay1ms(200);
T --;
}
}
//--------------------------------------
void main(void)
{
WDTCN = 0xde;
WDTCN = 0xad;
SYSCLK_Init();
Timer0_Init();
PORT_Init();
EA = 1;
InitLCD();
Delay1s(1);
for(;;)
{
DispBmp(screen1);
Delay1s(3);
DispBmp(screen2);
Delay1s(3);
InitLCD();
LCD_WriteHZ(2,1,Han);
Delay1ms(100);
LCD_WriteHZ(60,3,Zi);
Delay1s(3);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -