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

📄 test140.c

📁 该程序为SED1335 控制器 图形液晶显示模块DMF50174的驱动程序
💻 C
字号:
/***************************包含的头文件******************************/
#include <AT898252.h>
#include <math.h>
#include <absacc.h>
#include <string.h>
#include <intrins.h>

/*****************************宏定义**********************************/
#define  uchar unsigned char
#define	 uint  unsigned int

/****************************端口声明*********************************/
#define  wcadd1 XBYTE[0x0100]  		//写指令代码地址 
#define  wdadd1 XBYTE[0x0000]  		//写参数及显示数据地址 
#define  rdadd1 XBYTE[0x0100]  		//读参数及显示数据地址
#define  rbadd1 XBYTE[0x0000]  		//读忙状态地址

/***************************函数的声明********************************/
void CCW1_PR(uchar O_X,uchar O_Y,uchar code_1);	//汉字写入子程序(文本方式)
void INT_1(void);				//液晶初始化子程序
void CGRAM(void);				//CGRAM子程序函数
void CLEAR(void);				//清屏子函数
void main(void);				//液晶显示演示主函数
void delay_s(uchar x);				//延时子程序
void display1(void);				//黑白阴影显示子函数
void display2(void);				//数字,英文显示子函数

/**************************全局变量的定义*****************************/
#define  PARA 0x30

uchar SYSTAB[8]={0x30,0x87,0x07,0x27,0x42,0xf0,0x30,0x00};		//320240的SYSTEM SET参数
uchar SCRTAB[10]={0x00,0x00,0xf0,0x00,0x40,0xf0,0x00,0x80,0x00,0x00};	//320240的SCROLL参数

uchar CTAB1[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};	//数字0~9
uchar CTAB2[26]={0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,
		 0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,
		 0x55,0x56,0x57,0x58,0x59,0x5a};			//大写字母A~Z
uchar CTAB3[26]={0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,
		 0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,
		 0x75,0x76,0x77,0x78,0x79,0x7a};			//小写字母a~z
/* 文本方式下的汉字显示方法
 在文本方式下显示汉字, 需要在SED1335 等显示RAM 内建立一个自定义字符库CGRAM,
 然后通过在相应的单元写入相应的字符代码来实现汉字的显示.SED1335 等的字符代
 码对应的是8x8 点阵的字符块, 而一个汉字需要四个8x8点阵的字符块组合显示, 所
 以在建立汉字的CGRAM 时, 需要四个字符代码管理一个汉字, 一般是按左上部, 左下
 部, 右上部和右下部四部分分配代码. 比如在演示程序中建立 "清华" 两个汉字的
 CGRAM,那么这两个汉字的代码为80H(81H,82H,83H)和84H(85H,86H,87H). 
 */
 code uchar CGTAB[4][32]={0x00,0x40,0x37,0x10,0x83,0x60,0x2F,0x08,    /* 清 */
                          0x13,0x22,0xE3,0x22,0x23,0x22,0x22,0x22,
                          0x40,0x48,0xFC,0x40,0xF8,0x40,0xFE,0x08,
                          0xFC,0x08,0xF8,0x08,0xF8,0x08,0x28,0x10,
                          0x04,0x04,0x08,0x08,0x18,0x29,0x4A,0x08,    /* 华 */
                          0x09,0x01,0xFF,0x01,0x01,0x01,0x01,0x01,
                          0x40,0x48,0x58,0x60,0xC0,0x40,0x44,0x44,
                          0x3C,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,
                          0x04,0xFF,0x05,0x41,0x33,0x14,0x01,0xF6,    /* 蓬 */
                          0x1B,0x10,0x13,0x10,0x17,0x10,0x28,0x47,
                          0x44,0xFE,0x40,0xF8,0x10,0xE0,0x18,0x46,
                          0xF8,0x40,0xF8,0x40,0xFC,0x40,0x46,0xFC,
                          0x00,0x43,0x30,0x10,0x00,0x07,0xF1,0x11,    /* 远 */
                          0x11,0x11,0x12,0x12,0x14,0x28,0x47,0x00,
                          0x10,0xF8,0x00,0x00,0x08,0xFC,0x20,0x20,
                          0x20,0x24,0x24,0x1C,0x00,0x06,0xFC,0x00  };

/************************液晶显示演示主函数***************************/
void main(void)
{
	uchar code_1;
	uint O_X,O_Y;
//	delay_s(200);
	delay_s(200);
	INT_1();			//调初始化子程序 
	delay_s(20);
	
	CGRAM();     			//调CGRAM子程序
	display1();			//黑白阴影显示子程序
	
    	CLEAR();			//清屏
   	
	CGRAM();     			//调CGRAM子程序
	delay_s(1);
    	code_1=0x80;  			//取字模
    	O_X=0x10;
    	O_Y=0x02;
    	CCW1_PR(O_X,O_Y,code_1);  	//调中文显示子程序(文本方式)

	code_1=0x84;  			//取字模
    	O_X=0x12;
    	O_Y=0x02;
    	CCW1_PR(O_X,O_Y,code_1);  	//调中文显示子程序(文本方式)
    	
    	code_1=0x88;  			//取字模
    	O_X=0x14;
    	O_Y=0x02;
    	CCW1_PR(O_X,O_Y,code_1);  	//调中文显示子程序(文本方式)
    	
    	code_1=0x8c;  			//取字模
    	O_X=0x16;
    	O_Y=0x02;
    	CCW1_PR(O_X,O_Y,code_1);  	//调中文显示子程序(文本方式)
    	
	display2();
	while(1);
}

/************************初始化子程序函数*****************************/
void INT_1()
{
     	uchar i;
      	CLEAR();       			//调清屏子程序
     	wcadd1=0x40;   			//SYSTEM SET代码
     	for(i=0;i<8;i++)
        {
		wdadd1=SYSTAB[i];  	//写入参数
        }
        
      	wcadd1=0x44;   			//SCROLL代码
      	for(i=0;i<10;i++)
        {
        	wdadd1=SCRTAB[i];   	//写入参数
        }
       
     	wcadd1=0x5a;   			//HDOT SCR 代码
      	wdadd1=0x00;   			//设置参数P1
      	wcadd1=0x5b;   			//OVLAY 代码
      	wdadd1=0x00;   			//设置参数:显示一,三区为文本属性
//     	delay_s(1);
//	delay_s(200);
      	wcadd1=0x59;   			//显示状态设置
      	wdadd1=0x54;   			//设置参数:显示一~四区开显示
}

/****************************清屏子函数*******************************/
void CLEAR(void)
{
    	uint i,j;
    	wcadd1=0x4c;			//CSRDIR 代码
    	wcadd1=0x46;   			//CSRW 代码
    	wdadd1=0x00;   			//设置参数光标指针低8位
    	wdadd1=0x00;   			//设置参数光标指针高8位
    	wcadd1=0x42;   			//MWRITE 代码 
    	for(j=0;j<1638;j++)       	//清64K的显示存储器
      	{
        	for(i=0;i<40;i++)     	//写入一行
          	{
            		wdadd1=0x00;    //写入数据
          	}
      	}
}
     
/*************************CGRAM子程序函数***************************/
void CGRAM(void)
{
   	uchar i,j;
   	wcadd1=0x5c;			//CGRAMADR 代码
   	wdadd1=0x00;  			//设置SAG=0x3000
   	wdadd1=0x30;
   	wcadd1=0x46;  			//CSRW 代码
   	wdadd1=0x00;  			//设置CSR=0x3400(字符代码=80H)
   		 			//CSR=SAG+8*80H
   	wdadd1=0x34;
   	wcadd1=0x4c;  			//CSRDIR 代码
   	wcadd1=0x42;  			//MWRITE 代码 
   	for(j=0;j<4;j++)
     	{
   		for(i=0;i<32;i++)
      		{
       			wdadd1=CGTAB[j][i];  //写入字模数据
       		}
    	}
    	delay_s(1);
    	
    	for(j=0;j<8;j++)		//8*8的空白,字符代码为90H
    	{
    		wdadd1=0x00;
    	}
    	delay_s(1);
    	
    	for(j=0;j<8;j++)		//8*8的阴影,字符代码为91H
    	{
    		wdadd1=0xff;
    	}
    	delay_s(1);
}
  
/**********************写汉字子程序(文本)函数***********************/
void CCW1_PR(uint O_X,uint O_Y,uchar code_1)
{
    	uint i,j;
    	i=PARA;
    	j=i*O_Y+O_X;
    	wcadd1=0x4f;      		//CSRDIR 代码(下移)
    	wcadd1=0x46;      		//CSRW 代码
    	wdadd1=j%256;     		//设置光标地址
    	wdadd1=j/256;     		
    	wcadd1=0x42;      		//MWRITE 代码
    	wdadd1=code_1;    		// 写入汉字代码 
    	wdadd1=code_1+1;  		// 写入汉字代码 
    	j++;              		 
    	wcadd1=0x46;      		// CSRW 代码 
    	wdadd1=j%256;     		// 设置光标地址 
    	wdadd1=j/256;     		 
    	wcadd1=0x42;      		// MWRITE 代码 
    	wdadd1=code_1+2;  		// 写入汉字代码 
    	wdadd1=code_1+3;  		// 写入汉字代码 
}

/**************************黑白阴影显示子程序**********************/
void display1(void)
{
	uint z;
	uchar w=0;
	uchar i,j,n=0;
	uchar O_X,O_Y;
	wcadd1=0x4C;      	//CSRDIR 代码(右移)

	while(n<=30)
	{
		for(i=0;i<30-n;i++)
		{
			w=i%2;
//			w=w+(i%2);
			O_X=0;
			O_Y=i;
			z=PARA*O_Y+O_X;
			
	    		wcadd1=0x46;      	//CSRW 代码 
	    		wdadd1=z%256;     	//设置光标地址
	    		wdadd1=z/256;
	    		wcadd1=0x42;      	//MWRITE 代码
	    		for(j=0;j<20;j++)
	    		{
	    			if(n%2==0)
	    			{
	    				if(w==0)
	    				{
	    					wdadd1=0x90;
	    					wdadd1=0x91;
	    				}
	    				else
	    				{
	    					wdadd1=0x91;
	    					wdadd1=0x90;
	    				}
	    			}
	    			else
	    			{
	    				if(w!=0)
	    				{
	    					wdadd1=0x90;
	    					wdadd1=0x91;
	    				}
	    				else
	    				{
	    					wdadd1=0x91;
	    					wdadd1=0x90;
	    				}
	    			}
	    			
	    		}
		}
//		for(i=30-n;i<30;i++)
		{
			O_X=0;
			O_Y=30-n;
			z=PARA*O_Y+O_X;
			
	    		wcadd1=0x46;      	//CSRW 代码 
	    		wdadd1=z%256;     	//设置光标地址
	    		wdadd1=z/256;
	    		wcadd1=0x42;      	//MWRITE 代码
	    		for(j=0;j<40;j++)
	    		{
	    			wdadd1=0x90;
	    		}
		}
		delay_s(200);
		delay_s(200);
		delay_s(200);
		delay_s(200);
		delay_s(200);
		
		n++;
	}
}
/*************************数字,英文显示子函数*********************/
void display2(void)
{
	uint z;
	uchar i;
	uchar O_X,O_Y;
	
	O_X=0x0f;		//显示数字0~9
	O_Y=0x0c;
	z=PARA*O_Y+O_X;
     	wcadd1=0x46;   		//CSRW 代码
     	wdadd1=z%256;  		//设置光标地址CSR
     	wdadd1=z/256;
     	wcadd1=0x4c;   		//CSRDIR 代码
     	wcadd1=0x42;   		//MWRITE 代码
     	for(i=0;i<10;i++)
      	{
        	wdadd1=CTAB1[i];  //写入数据
      	}
      	
      	O_X=0x07;		//显示英文A~Z
	O_Y=0x0e;
	z=PARA*O_Y+O_X;
     	wcadd1=0x46;   		//CSRW 代码
     	wdadd1=z%256;  		//设置光标地址CSR
     	wdadd1=z/256;
     	wcadd1=0x4c;   		//CSRDIR 代码
     	wcadd1=0x42;   		//MWRITE 代码
     	for(i=0;i<26;i++)
      	{
        	wdadd1=CTAB2[i];  //写入数据
      	}
      	
      	O_X=0x0d;
      	O_Y=0x08;
	z=PARA*O_Y+O_X;
     	wcadd1=0x46;   		//CSRW 代码
     	wdadd1=z%256;  		//设置光标地址CSR
     	wdadd1=z/256;
     	wcadd1=0x4c;   		//CSRDIR 代码
     	wcadd1=0x42;   		//MWRITE 代码
      	wdadd1=0x54;
      	wdadd1=0x45;
      	wdadd1=0x4c;
      	wdadd1=0x3a;
      	wdadd1=0x30;
      	wdadd1=0x32;
      	wdadd1=0x33;
      	wdadd1=0x2d;
      	wdadd1=0x36;
      	wdadd1=0x33;
      	wdadd1=0x35;
      	wdadd1=0x33;
      	wdadd1=0x35;
      	wdadd1=0x32;
      	wdadd1=0x39;
      	wdadd1=0x32;
      	
}
/***************************延时子函数*****************************/
void delay_s(uchar x)
{
	uchar i;
	
	while(x>0)
	{
		for(i=200;i>0;i--)
		{}
		x--;
	}
}


 

⌨️ 快捷键说明

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