⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 splc501_mega64.c

📁 SPLC501在AVR单片机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 + -