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

📄 sed1335io.c

📁 320*240点阵液晶(sed1335)驱动程序,keil c调试通过,io连接方式
💻 C
字号:

/******************************************************
sed1335模拟io读写程序(8080模式)
c51 sed1335模拟io读写程序(8080模式)


condition:
controller pcb: ACP-LCM-1.53
controller:  sed1335
  timing mode:  8080
  compiler:  keil c51 

target: LM32019T display test

designer: hex
********************************************************
I/O configure:
1-8.DB0-DB7-----------P2
9.A0------------------P3.5
10.RD-----------------P3.7
11.WR-----------------P3.6
12.CS-----------------P3.3
13.RST----------------P3.4
14.VDD
15.VSS
********************************************************/

#include <REG1210.H>
#include "bin.h"
#include "comm.h" 
#include "1210_Key_Disp.h"

//#include<reg51.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

#define system_set  	0x40	//初始化设置
#define sleep_in  		0x53	//休闲模式设置
#define disp_on   		0x59	//显示状态设置
#define disp_off  		0x58	//显示状态设置
#define scroll   		0x44	//显示域设置
#define scrform   		0x5d	//光标形状设置
#define cgram_adr  		0x5c	//CGRAM首址设置
#define csrdir_right 	0x4c	//光标移动方向设置
#define csrdir_left  	0x4d	//光标移动方向设置
#define csrdir_up  		0x4e	//光标移动方向设置
#define csrdir_down  	0x4f	//光标移动方向设置
#define hdot_scr  		0x5a	//电位移设置
#define ovlay   		0x5b	//显示合成设置
#define csrw   			0x46	//光标指针设置
#define csrr   			0x47	//读取光标指针
#define mwrite   		0x42	//数据写入
#define mread   		0x43	//数据读取



sbit write=P3^6;		//写数据或命令信号
sbit read=P3^7;			//读数据或命令信号
sbit cs=P3^5;			//片选 low
sbit a0=P3^4;			//数据或命令的选择信号
sbit rst=P3^3;			//复位信号 low

#define databus 		P0		//数据总线
sbit key=P1^0;


/*
unsigned char code system_set_ini[8]={
										0x34,
										0x87,
										0x07,
										0x27,
										0x4a,
										0xf0,
										0x28,
										0x00
									};
*/
/*
P1	0  0  B  1  	W/S  M2  M1  M0
B:调整负向显示字符时的屏面边界,
		通常B=1
   		B=0:画面首行为边界;B=1:无边界。
W/S:驱动器系统配置。
	W/S=0	为单屏结构LCD的驱动系统;
	W/S=1	为双屏结构LCD的驱动系统。
M2: 选择外部字符发生器的字符点阵格式;
	M2=0:	8×8点阵字体
	M2=1:	8×16点阵字体
M1: 选择外部发生器CGRAM的字符代码范围:
	M1=0:	选择80H-9FH范围字符代码;
	M1=1:	选择80H-9FH和E0H-FFH两个范围的字符代码。
M0: 内、外字符发生器的选择
	M0=0	为内部字符发生器有效;
	M0=1	为外部字符发生器有效,此时内部字符发生器被屏蔽,字符代码全部供给外部字符发生器使用。

P1=B0011_0100

P2	WF    0    0    0    0   fill  FX fill
WF:选择驱动器的交流驱动器的波形,通常WF=1
FX:显示字符的宽度,FX=字符高+字间距,FX=0-7H

P3	    0    0    0    0   fill   FY  fill fill
FY:显示字符的高度,FY=字符高+行间距,FY=0-FH

P4	fill fill fill  C/R  fill fill fill fill
C/R:	设置有效显示窗口的长度。C/R表示在LCD上有效显示的字符数。
	比如:LCD一行能显示30个字符,C/R设置为30,则一行全显示满了;
	若C/R设置为25,则LCD一行左起显示25个字符而后5个字符位置为空白。C/R取值在00H-EFH。

P5     fill fill fill   TC/R  fill fill fill fill 
TC/R:将晶振频率fosc转换成LCD工作频率的时间常数,TC/R由公式:
         fosc≥TC/R×9×L/F×FR
         TC/R≥C/R+4
	联合求解。一般情况下的简便计算,以C/R+4的值设置即可。其中L/F为扫描点行数,FR为LCD驱动频率,
	通常FR=70Hz
P6	fill fill fill  L/F fill fill fill fill 
L/F:LCD的点行数,取值在00H-FFH范围内。
P7	fill fill fill  APL  fill fill fill fill 
P8	fill fill fill  APH  fill fill fill fill 
AP:	显示屏一行所占显示缓冲区的字节数,AP为双字节参数:APH高8位,APL低8位。通常取:AP=C/R+1
*/
unsigned char code system_set_ini[8]={
										B0011_0100,
										B1000_0111,
										0x07,
										0x27,
										0x4a,
										0xf0,
										0x28,
										0x00,
									};

unsigned char code scroll_ini1[6]={0x00,0x00,0xef,0x60,0x09,0xf0};
unsigned char code scroll_ini2[6]={0xb0,0x04,0x1e,0x60,0x09,0xf0};
unsigned char code scrform_ini[2]={0x07,0x86};
unsigned char code hdot_scr_ini[2]={0x00,0x0b};
unsigned char code ovlay_ini[1]={0x01};
unsigned char code disp_on_ini[1]={0x16};
unsigned char code disp_off_ini[1]={0x00};
unsigned char code cur_set_ini[2]={0x28,0x00};
unsigned char code cur_set_ini1[2]={0x00,0x00};
unsigned char code cur_set_ini2[2]={0xb8,0x04};
unsigned char code cur_set_ini3[2]={0x60,0x09};


unsigned char code word1[]={0x41,0x4e,0x44,0x4f,0x52,0x49,0x4e,0x20,0x4f,0x50,0x54,0x4f,0x45,0x4c,0x45,0x43,
							0x20,0x54,0x45,0x43,0x48,0x4e,0x4f,0x4c,0x4f,0x47,0x59,0x20,0x4c,0x54,0x44,0xa5,0x43,0x4f};
unsigned char code word2[8]={0x20,0x41,0x4e,0x44,0x4f,0x52,0x49,0x4e};
unsigned char code word3[]={0x00};
unsigned char code send[32]={0x21,0x31, 0x41,0x51,0x61,0x71,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
unsigned char code null[1]={0x00};
unsigned char code block_cur_set[2]={0x60,0x09};
unsigned char code an[32]={0x02,0x01,0x3F,0x20,0x44,0x06,0x04,0xFF,0x08,0x08,0x08,0x06,0x01,0x06,0x18,0xE0,
							0x00,0x00,0xFE,0x04,0x08,0x00,0x00,0xFE,0x20,0x20,0x40,0x80,0x00,0xC0,0x38,0x10};


unsigned char code hex1[1]={0xaa};
unsigned char code hex2[1]={0x55};
unsigned char code fill[1]={0XFF};
unsigned char code kright[1]={0X01};
unsigned char code kleft[1]={0x80};
unsigned char code hex3[1]={0x20};



unsigned char code an1[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x07,
0x3F,0x7C,0x30,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
0x05,0x05,0x03,0x27,0x7F,0x7F,0xFF,0xF6,0xE6,0xCE,0x0D,0x3F,0xFC,0xB8,0x7F,0x7F,
0x27,0x0F,0x1F,0x7C,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF8,0xFC,
0x9C,0x3C,0x38,0x60,0xC0,0x60,0x30,0xFF,0xFF,0xE0,0xE0,0xC0,0xC0,0xF0,0xFC,0x1E,
0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xC0,0xE0,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};//安

unsigned char code de[]={0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x07,0x08,0x08,0x0C,0x0D,0x0F,0x0F,0x0E,
0x0F,0x0F,0x07,0x07,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xC0,0xE1,0xE1,0xE2,0x82,0x34,0xFD,0xBF,0xBF,0x7D,0xFD,0xDF,0xDA,0x9B,0xBB,
0xF9,0xF1,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xB0,0xB0,0xB0,
0x70,0x60,0x60,0xFC,0xFF,0xE3,0x83,0x03,0xC3,0xE3,0xE7,0x47,0x06,0x8E,0xFE,0xFC,
0x78,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//的

unsigned char code li[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x08,0x00,0x01,0x03,0x3F,0x1F,0x0E,
0x00,0x01,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x0C,0x1E,0x3E,0xF8,0xEC,0x9E,0x3E,0x78,0xF8,0xF8,0xB9,0x3B,0x7E,0xFC,0xF8,0xF0,
0xF0,0x30,0x30,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0E,0x16,
0x16,0x96,0xE6,0xE6,0xE6,0xE4,0xE4,0xE4,0xC4,0x44,0x44,0x04,0x04,0x06,0xC6,0x7E,
0x3E,0x1E,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//利

unsigned char code guang[];
unsigned char code dian[];
unsigned char code ke[];
unsigned char code ji[];
unsigned char code ando[];
unsigned char code tu1[];
unsigned char code tu2[];
unsigned char code box[];

/*
void delay(int t)
{
	int i=0;
	for(i=0;i<t;i++);
}
*/

void long_delay(int t)
{
	int i=0;
	int n;
	for(i=0;i<t;i++)
	{
		for(n=0;n<1000;n++);
	}
}

void sed1335_write(char commandcode, unsigned char code *parameter,int n)
{
	int i=0;
	
	a0=1;
	read=1;
	databus=commandcode;
	write=0;
	write=1;
	
	for(i=0;i<n;i++)
	{
		a0=0;
		read=1;
		databus=parameter[i];
		write=0;
		write=1;
	}
}

//在图形层写一个汉字//
void sed1335_write1(char commandcode,char low,int high)
{
	a0=1;
	read=1;
	databus=commandcode;
	write=0;
	write=1;
	
	a0=0;
	read=1;
	databus=low;
	write=0;
	write=1;
	
	a0=0;
	read=1;
	databus=high;
	write=0;
	write=1;
}



//写任何大小的一块, i为高度,j*8为宽度
wr_any(int low,int high, char word[],int i,int j)
{
	int k=0;
	for( k=0;k<j;k++)
	{
		sed1335_write1(csrw,low,high);
		sed1335_write(csrdir_down,null,1);
		sed1335_write(mwrite,word+i*k,i);
		low=low+1;
		if(low==0xff+1)
			low=0;high=high+1;
	}
}




void clr_scr()
{
	int i=0;
		
	sed1335_write(csrdir_right,null,1);
	sed1335_write(csrw,cur_set_ini1,2);
	a0=1;
	read=1;
	databus=mwrite;
	write=0;
	write=1;
	
	for(i=0;i<28800;i++)
	{
		a0=0;
		read=1;
		databus=0x00;
		write=0;
		write=1;
	}
	sed1335_write(csrw,cur_set_ini1,2);
}

//清除图形层
clrgrp_scr()
{
	int j=0;
	sed1335_write(csrw,cur_set_ini3,2);
	for(j=0;j<9600;j++)
		sed1335_write(mwrite,word3,1);
}



wr_word(int low,int high, char word[],int i,int j)
{
	int k=0;
	for( k=0;k<j;k++)
	{
		sed1335_write1(csrw,low,high);
		sed1335_write(csrdir_down,null,1);
		sed1335_write(mwrite,word+i*k,i);
		low=low+1;
	}
}

/*******************************************************************
* sed1335 initial *
********************************************************************/
void lcd_ini()
{
	sed1335_write(system_set,system_set_ini,8);
	sed1335_write(scroll,scroll_ini1,6);
	sed1335_write(scrform,scrform_ini,2);
	sed1335_write(hdot_scr,hdot_scr_ini,2);
	sed1335_write(ovlay,ovlay_ini,1);
	sed1335_write(csrw,cur_set_ini1,2);
	sed1335_write(csrdir_right,null,1);
	clr_scr();
	sed1335_write(disp_on,disp_on_ini,1);
	sed1335_write(csrw,cur_set_ini3,2);
	sed1335_write(mwrite,box,9600);
}

void ms1210_disp(char n)
{
	char i;
	for (i=0;i<8;i++)
		dis_buffer[i]=n;
	disp();
}

/***************************************************************
* main program *
****************************************************************/
main()
{
 	int i=0, j=0, t=0;

	long_delay(10);
	rst=0;
	long_delay(30);
	rst=1;
	long_delay(10);
	cs=0;
	
	lcd_ini();

	Serial_init();



printf("SED1335_MSC1210_TEST\r\n");

	while(1)
	{

/*
ms1210_disp(1);
		clr_scr();
		sed1335_write(csrw,cur_set_ini3,2);	//csrw 光标指针设置cur_set_ini3[2]={0x60,0x09};
		for(j=0;j<4800;j++)
			sed1335_write(mwrite,fill,1);//mwrite 数据写入
long_delay(200);
*/
		clr_scr();
		sed1335_write(csrw,cur_set_ini3,2);
		for(j=0;j<9600;j++)
			sed1335_write(mwrite,fill,1);

		long_delay(200);


		clr_scr();
		sed1335_write(csrw,cur_set_ini3,2);
		for(j=0;j<39;j++)
			sed1335_write(mwrite,fill,1);


		sed1335_write(csrdir_down,null,1);
		sed1335_write(mwrite,fill,1);
		for(j=0;j<238;j++)
		   sed1335_write(mwrite,kright,1);
		
		sed1335_write(csrdir_left,null,1);

		for(j=0;j<39;j++)
		   sed1335_write(mwrite,fill,1);

		sed1335_write(csrdir_up,null,1);
		sed1335_write(mwrite,fill,1);

		for(j=0;j<238;j++)
		   sed1335_write(mwrite,kleft,1);
		
		sed1335_write(csrw,cur_set_ini,2);
		sed1335_write(csrdir_right,null,1);

		for(j=0;j<150;j++)
		   sed1335_write(mwrite,word2,8);

		long_delay(200);


		clr_scr();
		sed1335_write(csrw,cur_set_ini3,2);

		for(i=0;i<120;i++)
		{
			for(j=0;j<40;j++)
				sed1335_write(mwrite,hex1,1);
						
			for(j=0;j<40;j++)
				sed1335_write(mwrite,hex2,1);
		}

		long_delay(200);
		
		//key_scan();
		 //sed1335_write(sleep_in);
		//long_delay(100);
		
		clr_scr();
		sed1335_write(system_set,system_set_ini,8);
		sed1335_write(disp_on,disp_on_ini,1);
		clr_scr();
		sed1335_write(csrw,cur_set_ini3,2);
		wr_word(0x64,0x0e,an1,29,4);
		wr_word(0x68,0x0e,de,29,4);
		wr_word(0x6c,0x0e,li,29,4);
		wr_word(0x70,0x0e,guang,29,4);
		wr_word(0x74,0x0e,dian,29,4);
		wr_word(0x78,0x0e,ke,29,4);
		wr_word(0x7c,0x0e,ji,29,4);
/*
		wr_any(0xc6,0x17,ando,60,26);


		long_delay(200);
		clr_scr();
		sed1335_write(csrw,cur_set_ini3,2);
		wr_any(0xc6,0x17,tu1,64,12);
		wr_any(0xd8,0x17,tu2,64,12);

		long_delay(200);
		clr_scr();
		sed1335_write(csrw,cur_set_ini3,2);
		sed1335_write(mwrite,box,9600);
*/
		long_delay(200);

printf("SED1335_MSC1210_TEST\r\n");




	}

}



⌨️ 快捷键说明

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