📄 splc501_mega64.c
字号:
#include <iom64v.h>
#include <macros.h>
#define P_IO_Data_Data PORTA
#define P_IO_Control_Data PORTG
#define C_RST_Pin PG0
#define C_AOP_Pin PG1
#define C_EP_Pin PG3
#define C_RWP_Pin PG2
#define Busy 0x80
/*-----------------------------------------------------------------------
延时函数
系统时钟:8M
-----------------------------------------------------------------------*/
void delay_1us(void) //1us延时函数
{
asm("nop");
}
void _nop_(void)
{
asm("nop");
}
void delay_nus(unsigned int n) //N us延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1us();
}
void delay_1ms(void) //1ms延时函数
{
unsigned int i;
for (i=0;i<1140;i++);
}
void delay_nms(unsigned int n) //N ms延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1ms();
}
//========================================================
//字模/* 纵向正序*/
//========================================================
char lv[]={
/*-- 文字1: 张 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x4F,0x4F,0x48,0x78,0x78,0x01,0x01,0xFF,0xFF,0x0D,0x19,0x71,0x61,0x21,0x01,
0x80,0xC0,0xC2,0x83,0xFF,0xFE,0x00,0x02,0xFF,0xFF,0xC6,0xF4,0x38,0x0E,0x06,0x04,
/*-- 文字2: 子 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x47,0x4F,0x58,0x70,0x60,0x40,0x01,0x01,0x00,
0x80,0x80,0x80,0x80,0x80,0x82,0x83,0xFF,0xFE,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
/*-- 文字3: 凤 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x7F,0x7F,0x4A,0x4B,0x49,0x4B,0x4F,0x4C,0x7F,0x7F,0x00,0x00,0x00,
0x02,0x0E,0x3C,0xF8,0xD8,0x30,0x60,0xC0,0xC0,0x70,0x30,0xD0,0xF8,0x3C,0x1E,0x1E,
/*-- 文字4: 书 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x01,0x01,0x11,0x11,0x11,0x11,0xFF,0xFF,0x11,0x11,0x11,0x5F,0x7F,0x39,0x39,0x10,
0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0x00,0x08,0x0C,0x06,0x0E,0xFC,0xF0,0x00,
};
char *q=lv;
//========================================================
//函数声明
//========================================================
void InitGraphic(void);
void sendorder(void);
void senddata(void);
void setpage( int a);
void setaddr( int addr);
void ClearScreen( int a);
void show(char a,char b,char n);
void x(char n);
//========================================================
//初始化LCD
//========================================================
void InitGraphic(void)
{
P_IO_Data_Data =0xaf; //LCD_ON
sendorder();
P_IO_Data_Data =0x2f; //上电模式
sendorder();
P_IO_Data_Data =0x81; //电量设置模式(屏幕亮度)
sendorder();
P_IO_Data_Data =0x30; //指令数据
sendorder();
P_IO_Data_Data =0x27; //内部电压调节电阻设置
sendorder();
P_IO_Data_Data =0xa2; //偏压设置
sendorder();
P_IO_Data_Data =0xc0; //Com 扫描方式设置(0xc8反向)
sendorder();
//P_IO_Data_Data =0xa1;
P_IO_Data_Data =0xa0; //Segment方向选择(0xa1反向)
sendorder();
P_IO_Data_Data =0xa4; //全屏变亮(0xa5变亮)
sendorder();
P_IO_Data_Data =0xa6; //正相反相显示控制指令,RAM中数据不变(0xa7)
sendorder();
P_IO_Data_Data =0xac; //静态指示器控制指令(0xad为on)
sendorder();
P_IO_Data_Data =0x00;
sendorder();
P_IO_Data_Data =0x40; //设置显示起始行对应RAM行号
sendorder();
ClearScreen(0);
}
//========================================================
//初始化LCD结束
//发送命令子函数
//========================================================
void sendorder(void)
{
char c;
c=(1<<C_AOP_Pin)|(1<<C_EP_Pin)|(1<<C_RWP_Pin);
c^=0xff;
P_IO_Control_Data=c;
asm("nop");
P_IO_Control_Data=c|(1<<C_EP_Pin);
asm("nop");asm("nop");//delay_nus(2);
P_IO_Control_Data=c;
delay_nus(10);
}
//========================================================
//写入数据子函数
//========================================================
void senddata(void)
{
char c;
c=(1<<C_AOP_Pin)|(1<<C_EP_Pin)|(1<<C_RWP_Pin);//c=(C_AOP_Pin|C_EP_Pin|C_RWP_Pin);
c^=0xff;
P_IO_Control_Data=c;
delay_nus(1);
P_IO_Control_Data=c|(1<<C_AOP_Pin)|(1<<C_EP_Pin);
delay_nus(2);
P_IO_Control_Data=c;
delay_nus(10);
}
//========================================================
//页设置子函数
//========================================================
void setpage( int a)
{
a|=0xb0;
P_IO_Data_Data =a;
sendorder();
}
//========================================================
//列设置子函数
//========================================================
void setaddr( int addr)
{
int b;
b=addr>>4;
b&=0x1f;
b|=0x10;
addr&=0x0f;
P_IO_Data_Data =addr;
sendorder();
P_IO_Data_Data =b;
sendorder();
}
//========================================================
//清屏子函数 fill ROM with 0 or 1
//========================================================
void ClearScreen( int a)
{
int z1,z2;
if(a!=0) a=0xff;
for(z1=0;z1<8;z1++)
{
setpage(z1);
setaddr(0);
for(z2=0;z2<128;z2++)
{
P_IO_Data_Data =a;
senddata();
}
}
}
//========================================================
//显示汉字
//========================================================
void show(char a,char b,char n) //汉字
{char i,*p;
p=q+32*n;
setpage(a+1);
setaddr(b);
for(i=0;i<16;i++)
{x(*p);
p++;}
setpage(a);
setaddr(b);
for(i=16;i<32;i++)
{x(*p);
p++;}
}
void x(char n)
{
P_IO_Data_Data =n;
senddata();
}
main()
{
PORTA=0xFF; //本口线一定要上拉
DDRA=0xff;
PORTG=0x00; //本地方不要上拉
DDRG=0x1f;
InitGraphic();
while(1)
{
show(6,9,0);
show(4,40,1);
show(2,69,2);
show(0,104,3);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -