📄 character_demo.c
字号:
#pragma DEBUG CODE SMALL ot(7)
#include <reg51.h>
#include <absacc.h>
#include <intrins.h>
#define LCDCOM XBYTE[ 0X8000 ]
#define LCDDATA XBYTE[ 0X8001 ]
bit NO_BUSY;
#define Data_4bit 0
#define IO_BUS 1
#define DATA_BUS P1
#define uchar unsigned char
uchar data AUTO_RUN;
uchar bdata LCM_STATUS ;
sbit busy_flag=LCM_STATUS^7;
uchar Auto_Run_Count;
#ifdef DEMO 44
sbit RS = P3^7;
sbit RW = P3^6;
sbit E = P3^0;
sbit NEXT_KEY = P3^2;
#else
sbit RS = P3^2;
sbit RW = P3^3;
sbit E = P3^4;
sbit NEXT_KEY = P3^5;
#endif
bit Next_Key_Status =0;
uchar code font1[]={0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00};
uchar code font2[]={0x00,0x00,0x0e,0x0e,0x0e,0x00,0x00,0x00};
uchar code font3[]={0x00,0x1f,0x1f,0x1f,0x1f,0x1f,0x00,0x00};
uchar code font4[]={0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x00};
uchar code font11[]={0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f};
uchar code font12[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
uchar code font13[]={0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15};
uchar code font14[]={0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05};
uchar code font15[]={0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00};
uchar code font16[]={0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f};
uchar code font17[]={0x15,0x0a,0x15,0x0a,0x15,0x0a,0x15,0x0a};
uchar code font18[]={0x0a,0x15,0x0a,0x15,0x0a,0x15,0x0a,0x15};
void Waite(void);
void Busy(void);
void Next_SW(void);
void Timer0_Delay(uchar i);
void Write_Com(uchar send_data)
{
Busy();
if(IO_BUS)
{
E = 0;
DATA_BUS = send_data;
RS = 0;
RW = 0;
E=1;
_nop_();
E = 0;
if(Data_4bit)
{
DATA_BUS = send_data<<4;
E=1;
_nop_();
E = 0;
}
}
else
{
LCDCOM = send_data;
if(Data_4bit)
{
LCDCOM = send_data<<4;
}
}
}
void Write_Com_4bit(uchar send_data)
{
if(IO_BUS)
{
E = 0;
DATA_BUS = send_data;
RS = 0;
RW = 0;
E=1;
_nop_();
E = 0;
}
else
{
LCDCOM = send_data;
}
}
void Write_Data(uchar send_data)
{
Busy();
if(IO_BUS)
{
E = 0;
DATA_BUS = send_data;
RS = 1;
RW = 0;
E=1;
_nop_();
E = 0;
if(Data_4bit)
{
DATA_BUS = send_data<<4;
E=1;
_nop_();
E = 0;
}
}
else
{
LCDDATA = send_data;
if(Data_4bit)
{
LCDDATA = send_data<<4;
}
}
}
uchar Read_Com(void)
{
uchar Read_Data,Temp;
if(IO_BUS)
{
DATA_BUS = 0xFF;
E = 0;
RS = 0;
RW = 1;
E=1;
_nop_();
Read_Data = DATA_BUS;
E = 0;
if(Data_4bit)
{
E=1;
_nop_();
Temp = DATA_BUS;
E = 0;
}
}
else
{
Read_Data = LCDCOM;
if(Data_4bit)
{
Temp = LCDCOM;
}
}
return(Read_Data);
}
void Busy(void)
{
if(NO_BUSY)
{
Waite();
return;
}
else
{
do
{
LCM_STATUS = Read_Com();
}while(busy_flag);
}
}
void Init_Lcd(void)
{
NO_BUSY = 1;
if(Data_4bit)
{
Write_Com_4bit(0x22);
Waite();
Write_Com(0x28);
Write_Com(0x2c);
Write_Com(0x08);
Write_Com(0x28);
Write_Com_4bit(0x22);
Waite();
Write_Com(0x28);
Write_Com(0x2c);
Write_Com(0x08);
Write_Com(0x28);
}
else
{
Write_Com(0x38);
Write_Com(0x38);
}
Write_Com(0x0c);
Write_Com(0x06);
Write_Com(0x01);
NO_BUSY = 1;
}
void Display_String(uchar x, uchar *s)
{
uchar i=0;
Write_Com(x);
while(s[i]!=0x00)
{
Write_Data(s[i]);
i++;
}
}
void Display_String_loop(uchar x, uchar s,uchar number)
{
uchar i,j;
Write_Com(x);
for(j=0;j<40;)
{
for(i=0;i<number;i++)
{
Write_Data(s+i);
}
j = j + number;
}
}
void Display_Same_Font(uchar x,uchar s,uchar number)
{
uchar i;
Write_Com(x);
for(i=0;i<number;i++)
{
Write_Data(s);
}
}
void Save_One_Font(uchar x, uchar *s)
{
uchar i ;
Write_Com(x);
for(i=0;i<8;i++)
{
Write_Data(s[i]);
}
}
void Clear(void)
{
Write_Com(0x01);
}
void Display_Shift_Left(void)
{
Write_Com(0x18);
}
void Display_Shift_Right(void)
{
Write_Com(0x1c);
}
void Display_Table()
{
uchar i,j;
uchar s;
s = ' ';
for(j=0;j<1;j++)
{
Write_Com(0x80);
for(i=0;i<40;i++)
{
Write_Data(s++);
Timer0_Delay(5);
}
Timer0_Delay(200);
Write_Com(0xc0);
for(i=0;i<40;i++)
{
Write_Data(s++);
Timer0_Delay(5);
}
Timer0_Delay(200);
}
}
void Display_Table1()
{
uchar i,j;
uchar s;
s =0xa0;
for(j=0;j<1;j++)
{
Write_Com(0x80);
for(i=0;i<40;i++)
{
Write_Data(s++);
Timer0_Delay(5);
}
Timer0_Delay(200);
Write_Com(0xc0);
for(i=0;i<40;i++)
{
Write_Data(s++);
Timer0_Delay(5);
}
Timer0_Delay(200);
Next_SW();
}
}
void Timer0_Delay(uchar i)
{
uchar j;
TMOD = 0x01;
for(j=0;j<i;j++)
{
TR0 = 0 ;
TF0 = 0 ;
TH0 = 0x0fc;
TL0 = 0X1;
TR0 = 1;
while(TF0==0);
}
TR0 = 0;
}
void Read_Key(void)
{
if(!NEXT_KEY)
{
Next_Key_Status = !Next_Key_Status;
}
while(!NEXT_KEY);
}
void Next_SW(void)
{
if(!AUTO_RUN)
{
do{
Read_Key();
}while(Next_Key_Status);
Timer0_Delay(250);
Timer0_Delay(250);
return;
}
do{
if(!NEXT_KEY)
{
Timer0_Delay(1);
if(NEXT_KEY) break;
}
}while(1);
}
uchar Flash_SW()
{
if(AUTO_RUN)
{
do{
Read_Key();
}while(Next_Key_Status);
Timer0_Delay(150);
return(Auto_Run_Count-- );
}
if(!NEXT_KEY)
{
Timer0_Delay(250);
return(0);
}
else
{
Timer0_Delay(250);
return(1);
}
}
void Check_Auto_SW(void)
{
if(!NEXT_KEY)
{
Timer0_Delay(20);
if(NEXT_KEY)
{
AUTO_RUN = 0;
}
else
{
AUTO_RUN = 1;
}
}
else
{
AUTO_RUN = 0;
}
}
void Waite(void)
{
Timer0_Delay(1);
}
void main(void)
{
uchar next=0;
EA=0;
Auto_Run_Count = 0;
Timer0_Delay(250);
Check_Auto_SW();
Init_Lcd();
Timer0_Delay(250);
AUTO_RUN = 1;
do
{
Save_One_Font(0x70,font11);
Display_Same_Font(0x80,0x06,40);
Display_Same_Font(0xc0,0x06,40);
Timer0_Delay(150);
Next_SW();
Save_One_Font(0x70,font12);
Timer0_Delay(150);
Next_SW();
Save_One_Font(0x70,font13);
Timer0_Delay(150);
Next_SW();
Save_One_Font(0x70,font14);
Timer0_Delay(150);
Next_SW();
Save_One_Font(0x70,font15);
Timer0_Delay(150);
Next_SW();
Save_One_Font(0x70,font16);
// Clear();
Timer0_Delay(150);
Next_SW();
Save_One_Font(0x70,font17);
Timer0_Delay(150);
Next_SW();
Save_One_Font(0x70,font18);
Timer0_Delay(150);
Next_SW();
Auto_Run_Count = 12;
do
{
Save_One_Font(0x70,font12);
Save_One_Font(0x70,font1);
if(!Flash_SW() ) break;
Save_One_Font(0x70,font2);
if(!Flash_SW() ) break;
Save_One_Font(0x70,font3);
if(!Flash_SW() ) break;
Save_One_Font(0x70,font4);
if(!Flash_SW() ) break;
Save_One_Font(0x70,font11);
if(!Flash_SW() ) break;
Save_One_Font(0x70,font4);
if(!Flash_SW() ) break;
Save_One_Font(0x70,font3);
if(!Flash_SW() ) break;
Save_One_Font(0x70,font2);
if(!Flash_SW() ) break;
Save_One_Font(0x70,font1);
if(!Flash_SW() ) break;
}while(Auto_Run_Count);
Next_SW();
Display_String(0x80,"1234567890123456789012345678901234567890");
Display_String(0xC0,"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMN");
Timer0_Delay(250);
Next_SW();
Write_Com(0x0F);
Display_String_loop(0x80, ' ',40);
Display_String_loop(0xC0, 'H',40);
Timer0_Delay(250);
Next_SW();
Display_String_loop(0x80, 0xa0,40);
Display_String_loop(0xC0, 0xc8,40);
Timer0_Delay(250);
Next_SW();
//Write_Com(0x0C);
// Display_String_loop(0x80, ' ',40);
// Display_String_loop(0xC0, 'H',40);
//Next_SW();
Write_Com(0x0C);
Clear();
Display_Table();
Clear();
Display_Table1();
// Clear();
// Next_SW();
Display_String(0x80," S-TEK CO.,LTD S-TEK CO.,LTD ");
Display_String(0xC0,"Your Best Choice Character LCM serial");
Next_SW();
Auto_Run_Count = 8;
do
{
Display_Shift_Left();
next = Flash_SW();
}while(next);
Auto_Run_Count = 8;
Next_SW();
do
{
Display_Shift_Right();
next = Flash_SW();
}while(next);
Timer0_Delay(250);
Next_SW();
Clear();
}while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -