📄 xianshi2.c
字号:
#include<reg55.h>
#include<intrins.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit fmq=P1^6;
//*********文字定义****************
extern uchar code yuan[32];
extern uchar code ding[32];
extern uchar code jin[32];
extern uchar code sheng[32];
extern uchar code tan[32];
//*************LCD与ECU接口定义***************
sbit A0=P2^2;
sbit e1=P2^5;
sbit e2=P2^4;
sbit rw=P2^3;
//*******************delay********************
void delay(uint num)
{ while(num--); }
//****************SEND COMMAND****************
//-----------内部函数,不直接调用-------------
void send_command(uchar cmd)
{
A0=rw=0; //A0=0,选择指令;rw=0,写。
e1=e2=1;
P0=cmd;
delay(2);
e1=e2=0;
}
//*******SELECT PAGE AND LINE AND PUT DATA IN*********
//----------内部函数,不直接调用--------------
void lw(uchar x,uchar y,uchar dd) //x为列地址,y为页地址,dd为数据。
{
if (x<61)
{
e1=1;
A0=rw=0; //A0=0,选择指令.
P0=0xb8|y;
e1=0;
e1=1;
A0=rw=0;
P0=0x00|x;
e1=0;
e1=1;
A0=1; //A0=1,选择数据;
rw=0;
P0=dd;
e1=0;
}
else
{
x=x-61;
e2=1;
A0=rw=0;
P0=0x00|x;
e2=0;
e2=1;
A0=rw=0;
P0=0xb8|y;
e2=0;
e2=1;
A0=1;
rw=0;
P0=dd;
e2=0;
}
P0=0xff;
}
//***********INITIALIZE LCD*************
void lcd_init(void)
{
uchar x,y;
e1=e2=0;
A0=rw=0;
send_command(0xae); //关显示
send_command(0xc0); //设置显示起始行为第0行
send_command(0xa4); //关静态驱动模式
send_command(0xbb); //设置页地址为第三页
send_command(0xa9); //设置为1/32DUTY
send_command(0xa0); //设置显示方向为反向
send_command(0xee); //关闭读-修改-写模式并恢复列地址指针到读修改-写模式前的位置。
send_command(0xaf); //开显示
}
//****************CLEAR SCREEN ALL******************
void clr_screen_all(void)
{
uchar x,y;
for (y=0;y<4;y++)
{
for (x=0;x<122;x++)
lw(x,y,0);
}
}
//*******************WRITE CHINESE******************
void write_chinese(x,y,array) //x为列地址,y为页地址,array为字模数组。
uchar x,y;
uchar array[];
{
uchar j,dd; //j为汉字32个字模
for(j=0;j<32;j++)
{
dd=array[j];
if(y==0)
{
if(j<16) lw(x+j,2,dd);
else lw(x+j-16,3,dd);
}
else if(y==1)
{
if(j<16) lw(x+j,3,dd);
else lw(x+j-16,0,dd);
}
else if(y==2)
{
if(j<16) lw(x+j,0,dd);
else lw(x+j-16,1,dd);
}
}
}
//******************WRITE CHINESE REVERSE*********************
void write_chinese_reverse(x,y,array)
uchar x,y;
uchar array[];
{
uchar j,dd;
for(j=0;j<32;j++)
{
dd=~array[j];
if(y==0)
{
if(j<16) lw(x+j,2,dd);
else lw(x+j-16,3,dd);
}
else if(y==1)
{
if(j<16) lw(x+j,3,dd);
else lw(x+j-16,0,dd);
}
else if(y==2)
{
if(j<16) lw(x+j,0,dd);
else lw(x+j-16,1,dd);
}
}
}
//*********************WRITE CHINESE LOVE******************
void ily(void)
{
write_chinese(15,1,yuan);
write_chinese(35,1,ding);
write_chinese_reverse(55,1,jin);
write_chinese_reverse(75,1,sheng);
write_chinese(95,1,tan);
}
//*********************MAIN**********************
void main(void)
{
fmq=0;
lcd_init();
clr_screen_all();
delay(20000);
ily();
delay(20000);
}
//****************汉字代码*****************
uchar code yuan[32]= {0x20,0x38,0xA7,0x62,0x10,0x20,0xA0,0x6C,0x6B,0xAA,0x2A,0x3A,0x26,0xA0,0x20,0x00,
0x12,0x13,0x12,0x0A,0x29,0x25,0x12,0x12,0x49,0x85,0x7F,0x02,0x0D,0x18,0x08,0x00};
uchar code ding[32]= {0x00,0x10,0x0C,0xA4,0x24,0x24,0x25,0xE6,0x24,0x24,0x24,0x24,0x14,0x0C,0x04,0x00,
0x40,0x20,0x18,0x07,0x08,0x10,0x20,0x7F,0x42,0x42,0x42,0x42,0x40,0x40,0x00,0x00};
uchar code jin[32]= {0x80,0x80,0x40,0x20,0x10,0x08,0x24,0x43,0xC4,0x08,0x10,0x20,0x60,0xC0,0x40,0x00,
0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x82,0x42,0x32,0x0E,0x02,0x00,0x00,0x00,0x00};
uchar code sheng[32]= {0x00,0x80,0x60,0x1E,0x10,0x10,0x10,0x10,0xFF,0x12,0x10,0x10,0x98,0x10,0x00,0x00,
0x01,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x61,0x40,0x00};
uchar code tan[32]= {0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x5F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -