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

📄 main.c

📁 dsp2407驱动液晶DWY12864I,以及DWY12864I单片机驱动程序
💻 C
字号:
//选择6800总线。MS=1,按键3 M80/68#=0

#include "global.c"
unsigned char char1[1][32]={{0x40,0x3C,0x10,0xFF,0x10,0xD0,0x20,0x18,0xCF,0x38,0x08,0xF8,0x08,0xF8,0x00,0x00,
0x04,0x04,0x02,0x7F,0x01,0x44,0x22,0x11,0x08,0x04,0x43,0x80,0x40,0x3F,0x00,0x00}};//物
#define uchar unsigned char
#define uint unsigned int

#define	  Setres	PADATDIR = PADATDIR | 0xFF80
#define	  Clrres	PADATDIR = PADATDIR & 0xFF7F
#define	  SetDC		PADATDIR = PADATDIR | 0xFF08
#define	  ClrDC		PADATDIR = PADATDIR & 0xFFF7
#define	  SetRW		PADATDIR = PADATDIR | 0xFF10
#define	  ClrRW		PADATDIR = PADATDIR & 0xFFEF
#define	  SetE		PADATDIR = PADATDIR | 0xFF20
#define	  ClrE		PADATDIR = PADATDIR & 0xFFDF

void 	KickDog();



uchar picture[];
uchar high;
uchar low;
void	delay(uint  number)
{
	uint  j;
	for(j = 0;j < number;j++);
}



//系统初始化子程序
void initial()
{

 
	asm(" SETC	INTM ");	/* 关闭总中断 */
	asm(" CLRC  SXM  ");	/* 禁止符号位扩展 */ 
	asm(" CLRC  CNF  ");    /* B0块映射为 on-chip DARAM*/
	asm(" CLRC  OVM  ");    /* 累加器结果正常溢出*/
	SCSR1=0x02FC;         	/* 系统时钟CLKOUT=20*2=40M */
	WDCR=0x006F;			/* 禁止看门狗,看门狗时钟64分频 */ 
	KickDog();    			/* 初始化看门狗 */  
	IMR=0x00;		//中断禁止
	IFR=0xffff;		//清除全部中断标志,写1清0

}
void	LCDPIN(void)
{
		PBDATDIR = PBDATDIR & 0x00FF;
}
void	LCDPOUT(void)
{
		PBDATDIR = PBDATDIR | 0xFF00;
}
//查忙
void LCDSTA()
{
	uint	Temp = 0x0080;
	LCDPIN();		//IOPB口为输入口
	delay(200);
	ClrDC;
	SetRW;			//cs=0,e=0,r/w=1,d/c=o.读液晶状态
	while(Temp)
	{
		ClrE;
		delay(50);
		Temp = PBDATDIR;
		Temp = Temp & 0x0080;
		SetE;
		delay(50);
	}
}
//写指令:
void write_command(int command)
{
	LCDSTA();
	delay(100);
	LCDPOUT();	
	ClrRW;	//cs=0,e=0,r/w=0,d/c=0.以便写入命令
	ClrDC;
	delay(50);
	ClrE;
	PBDATDIR=(PBDATDIR & 0xff00) | command;	//命令字送入数据线上\
	delay(50);
	SetE;		//e=1.写使能
	//PADATDIR=PADATDIR|0x0040;		//cs=1	
}
//写入数据:
void write_data(int data_aa)
{
	LCDSTA();
	delay(100);	
	LCDPOUT();	//IOPB口为输出口
	delay(200);
	SetDC;	//cs=0,e=0,r/w=0,d/c=1.以便写入数据
	ClrRW;
	delay(50);
	ClrE;
	PBDATDIR=(PBDATDIR & 0xff00) | data_aa;	//显示RAM中的数据送入数据线上
	delay(50);
	SetE;		//e=1.写使能
	//PADATDIR=PADATDIR|0x0040;		//cs=1	
}
//开显示子程序
void DISP()
{
	
	uint	Temp = 0x0020;
		LCDSTA();
		delay(200);
		LCDPIN();
		write_command(0xaf);		//送出控制命令
		delay(1000);
		SetRW;	//cs=0,e=0,r/w=1,d/c=o.读液晶状态
		ClrDC;
		while(Temp)
		{
		ClrE;
		delay(50);
		Temp = PBDATDIR;
		Temp = Temp & 0x0020;
		SetE;
		delay(50);	//如果液晶没被打开,则继续打开
		}
}
//关显示子程序
void DISP_OFF()
{
		uint	Temp = 0x0000;
		LCDSTA();
		delay(200);
		write_command(0xae);		//送出控制命令
		delay(1000);
		SetRW;
		ClrDC;		//cs=0,e=0,r/w=1,d/c=o.读液晶状态
		while(Temp==0)
		{
			ClrE;
			delay(50);
			Temp = PBDATDIR;
			Temp = Temp & 0x0020;
			SetE;
			delay(50);	//如果液晶没被打开,则继续打开
		}
}
//清屏子程序
void CLEAR()
{
	int page,j;
	for(page=0;page<8;page++)
	{
		write_command(0xB0+page); //set page address
		write_command(0x00); //set low address
		write_command(0x10); //set higher address
		for(j=0;j<128;j++)
		{
			write_data(0x00); //送数据到显存
			delay(200);
		}	       
	}

}

//全屏显示子程序
void ALL_SCREEN(int display_data)
{
	int page,j;
	for(page=0;page<8;page++)
	{
		write_command(0xB0+page); //set page address

		write_command(0x00); //set low address

		write_command(0x10); //set higher address

		for(j=0;j<128;j++)
		{
			write_data(display_data); //送数据到显存
			delay(200);
		}	       
	}

}
//OLED初始化
void OLED_INIT()
{
Clrres;
delay(1000);
Setres;
delay(1000);
	DISP_OFF();			//关显示
	delay(1000);
	write_command(0xad);
	delay(1000);
	write_command(0x8a);
	delay(1000);
	write_command(0xa8);		//占空比1/64
	delay(1000);
	write_command(0x3f);
	delay(1000);
	write_command(0xd3);		//设置行地址偏置
	delay(1000);
	write_command(0x00);		//为0 滚动
	delay(1000);
	write_command(0x40);		//Set Display Start Line
	delay(1000);
	
	
	
	write_command(0xa0);		//Set Segment Re-map
	delay(1000);
	write_command(0xc8);		//Set COM Output Scan Direction,反向扫描
delay(1000);
	write_command(0xa6);		//Set Normal Display
	delay(1000);
	write_command(0xa4);		//正常模式 
	delay(1000);
	write_command(0x81);		//设置对比度
	delay(1000); 
	write_command(0x80);		//128级对比度 
	delay(1000);
	write_command(0xd5);		//Set Clock Divide
	delay(1000);
	write_command(0x60);		// 
	delay(1000);
	write_command(0xd8);		//Set Area Color Mode ON / OFF
	delay(1000);
	write_command(0x00);		// 
	delay(1000);
	write_command(0xd9);		//Set Pre-Charge Period 
	delay(1000);
	write_command(0x84);		//
	delay(1000);
	write_command(0xda);		//配置列驱动方向
	delay(1000);
	write_command(0x12);		//
	delay(1000);
	write_command(0xaf);		//开OLED显示功能
	delay(1000);

}



//显示一幅图画:
void oled_display(int picture[]) //picture[]是一幅图片的数据

{

	int page,j;

	for(page=0;page<8;page++)

	{

		write_command(0xB0+page); //set page address

		write_command(0x00); //set low address

		write_command(0x10); //set higher address

		for(j=0;j<128;j++)

		{

		write_data(picture[j+page*128]); //送数据到显存
		delay(200);

		} 

	}

}
//显示16*16汉字
void word_1616(uchar p,uchar h,uchar l,uchar a)//write chinese word of1616
{
	uchar i,j,k,m=0;
	k=p+2;
	for(i=p;i<k;i++)
	{
		write_command(0xB0+p); //set page address
		write_command(0x00+l);    //列地址为0xhl
		write_command(0x10+h);  
		for(j=0;j<16;j++)
		{
			write_data(char1[a][j+m*16]);
			delay(200);
		}
	m++;
      }
}
//显示24*24汉字
/*void word_2424(uchar high,uchar low,uchar n)  //high是地址字节的高四位 low是地址字节的低四位 n是汉字数组中
//的哪个汉字 
{
    uchar i,j,m=0;
    for(i=1;i<4;i++)  //page number
    {
		write_command(0xB0+i); //set page address
		write_command(0x00+low);    //set low address
		write_command(0x10+high);   //set high address
        for(j=0;j<24;j++)
        {
            write_data(word2424[n][j+m*24]);
         }
	m++;
     }
}*/



//主程序	
main()
{
	initial();		//系统初始化
	MCRA=MCRA & 0x0007;      //IOPB0-7设置为IO口模式,IOPA3-7设置为IO口模式
	PADATDIR = (PADATDIR | 0x4000) & 0xFFBF;//cs=0,IOPA6=0
	OLED_INIT();		//OLED初始化
	while(1)
	{
		ALL_SCREEN(0xff);
		delay(5000);
		ALL_SCREEN(0xff);
	delay(5000);	
		word_1616(1,0,0,1);
			delay(5000);
		word_1616(1,0,0,1);
		delay(5000);

	}
}

void KickDog()				/*踢除看门狗 */
{
	WDKEY=0x5555;
	WDKEY=0xAAAA;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -