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

📄 lm3033_parallel.c

📁 程序在KEIL上调试成功
💻 C
字号:
//-------------------------------------------------
// LCD Module:		  LM3033
// Display Size:      128x64 (256x32)
// Driver/Controller: ST7920
// Interface:         parallel mode
// by:                Kenny
// Date:	      2006.5.24
// System;            AT89S52 (12MHz)
//-------------------------------------------------


#include <stdio.h>
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char // 0~255
#define uint unsigned int   // 0~65535
#define LCDBUS  	P1
sbit    PSB        = P3^4;
sbit	_RES       = P3^5;
sbit    RS         = P3^1;
sbit    RW         = P3^7;
sbit    E          = P3^6;
//-----------------------------------// dispaly data (256x32)//-----------------------------------
uchar code GraphicLogo[]={/*--  TOPWAY  LOGO 256x32  --*/0xC0,0x00,0x00,0x00,0x00,0x05,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x02,0xAA,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x54,0x1F,0x80,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,0x0A,0xAA,0xA1,0xFF,0x80,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,0x01,0x55,0x55,0x07,0xFF,0x80,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,0x2A,0xAA,0xAA,0x3F,0xFF,0x80,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,0x55,0x55,0x55,0x50,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0xAA,0xAA,0xAA,0xA3,0xFF,0xFF,0x80,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,0x15,0x55,0x4F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x4E,0x38,0xE3,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0xAA,0x1F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0xD1,0x45,0x14,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x54,0x7F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x05,0x41,0x44,0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0xA9,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x42,0x44,0x20,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x53,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x41,0x44,0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0xA7,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x51,0x45,0x14,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x4F,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xF4,0x4E,0x38,0xE3,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2A,0x9F,0xFF,0xFF,0xFF,0x80,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,0x15,0x3F,0xFF,0xFF,0xFF,0x80,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,0x2A,0x7F,0xFF,0xFF,0xFF,0x80,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,0x54,0xFF,0xFF,0xFF,0xFF,0x80,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,0xA9,0xFF,0xFF,0xFF,0xFF,0x80,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,0x53,0xFF,0xFF,0xFF,0xFF,0x84,0x00,0x12,0x08,0x80,0x02,0x10,0x24,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA7,0xFF,0xFF,0xFF,0xFF,0x82,0xFF,0x12,0x48,0x9F,0xC1,0x20,0x55,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x4F,0xFF,0xFF,0xFF,0xFF,0x80,0x81,0x12,0x48,0x84,0x0F,0xFE,0x95,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x9F,0xFF,0xFF,0xFF,0xFF,0x88,0x24,0x12,0x4B,0xE4,0x09,0x24,0x1F,0x70,0x10,0xE3,0x82,0x7C,0xE7,0xCE,0x38,0xE1,0x0E,0x38,0x27,0xCE,0x7C,0xE3,0x8E,0x10,0x00,0x01,0x3F,0xFF,0xFF,0xFF,0xFF,0x84,0x52,0x7E,0x48,0x88,0x05,0x28,0x20,0xA0,0x31,0x14,0x46,0x41,0x10,0x51,0x45,0x13,0x11,0x44,0x64,0x11,0x05,0x14,0x51,0x30,0x00,0x02,0x3F,0xFF,0xFF,0xFF,0xFF,0x80,0x10,0x12,0x48,0xA8,0x1F,0xFE,0x5F,0xA0,0x10,0x10,0x4A,0x79,0x00,0x91,0x45,0x11,0x01,0x04,0xA7,0x90,0x09,0x14,0x51,0x10,0x00,0x04,0x70,0x63,0x0D,0xDD,0xDD,0x82,0xFF,0x12,0x48,0xDF,0x80,0x00,0xC0,0xA0,0x10,0x20,0x92,0x05,0xE1,0x0E,0x3D,0x11,0x02,0x09,0x20,0x5E,0x10,0xE3,0xD1,0x10,0x00,0x02,0xFD,0xDD,0x75,0xDA,0xEB,0x84,0x10,0x12,0x4B,0xA8,0x83,0xF8,0x4E,0xA0,0x10,0x40,0x5F,0x05,0x11,0x11,0x05,0x11,0x04,0x05,0xF0,0x51,0x11,0x10,0x51,0x10,0x00,0x04,0xFD,0xDD,0x0D,0x50,0x77,0x8C,0x38,0x1E,0x48,0x88,0x82,0x08,0x4A,0x40,0x10,0x84,0x42,0x45,0x11,0x11,0x45,0x11,0x08,0x44,0x24,0x51,0x11,0x14,0x51,0x10,0x00,0x09,0xFD,0xE3,0x7E,0xB7,0x77,0x84,0x54,0x72,0x48,0x88,0x83,0xF8,0x4B,0x40,0x39,0xF3,0x82,0x38,0xE1,0x0E,0x38,0xE3,0x9F,0x38,0x23,0x8E,0x10,0xE3,0x8E,0x38,0x00,0x13,0xFF,0xFF,0xFF,0xFF,0xFF,0x85,0x93,0x24,0x08,0x8F,0x82,0x08,0x52,0xA0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0x84,0x10,0x08,0x09,0x88,0x83,0xF8,0x61,0x10,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03};


uchar code TextLogo[]={/*--  Text 256x32  --*/"- LM3033-""128x64  图形点阵""内置简体(GB)字库""单片机接口      "};

//-----------------------------------// Delay Routine//-----------------------------------

void delayms(uint m)        // 12MHz Xtal, close to ms value
{	
	uint j;	uint i;		
	for(i=0; i<m; i++)	    
	for(j=0; j<109; j++)	        
	nop_();
}
//-----------------------------------// IO Routine//-----------------------------------

void SdCmd(uchar Command)   //send command
{    
	RW = 0;    E = 0;    RS = 0;  
  
	LCDBUS = Command;    
	_nop_();    
	E =1;    
	_nop_();   
 	E =0;    
	_nop_(); 
	_nop_();    
	_nop_();
	_nop_();    
	_nop_(); 	
	_nop_();   
 	_nop_(); 
	_nop_();
}
void SdData(uchar DData)    //send display data
{    
	RW = 0;    E = 0;    RS = 1;    

	LCDBUS = DData;    
	_nop_();    
	E =1;    
	_nop_();    
	E =0;    
	_nop_(); 
	_nop_();   
 	_nop_(); 
	_nop_();   
 	_nop_(); 
	_nop_();   
 	_nop_(); 	
	_nop_();
}

//-----------------------------------// Write a Screen//-----------------------------------

void WriteGraphicScreen(uchar *GDData)// DisplayData should be 256x32/8 = 1024byte
// and graphic screen=on
{	
	uchar TempData;	uchar i, j;
	    	
        for(i=0;i<0x20;i++)        
	{    	
		SdCmd(0x34);        // 8bit I/F, extend command    	
		SdCmd(0x80|i);      // Y address    	
		SdCmd(0x80);        // X address    	
		SdCmd(0x36);        // 8bit I/F, basic command, graphic on  
    			
		for(j=0;j<0x10;j++)     	
		{     		
			TempData=(*(GDData+(i*32)+(j*2)+0)); // send high-byte
     			SdData(TempData);     		
			TempData=(*(GDData+(i*32)+(j*2)+1)); // send low-byte  
   			SdData(TempData);     		
		}        

	}
}

void WriteTextScreen(uchar *TxtData)// DisplayData should be (8x4)x2 = 64byte// and graphic screen=off
{	
	uchar TempData;	uchar j;
	   	
	SdCmd(0x34);        // 8bit I/F, basic command   		
	SdCmd(0x30);        // 8bit I/F, basic command, graphic off   	
	SdCmd(0x80);        // first line   	

	for(j=0;j<0x0F;j++)   	
	{   		
		TempData=(*(TxtData+0+(j*2)+0)); // send high-byte   		
		SdData(TempData);   				
		TempData=(*(TxtData+0+(j*2)+1)); // send low-byte   		
		SdData(TempData);     			    
	}   	
	SdCmd(0x90);        // second line   	
	
	for(j=0;j<0x0F;j++)   		
	{   		
		TempData=(*(TxtData+32+(j*2)+0)); // send high-byte   		
		SdData(TempData);   		
		TempData=(*(TxtData+32+(j*2)+1)); // send low-byte   
		SdData(TempData);     			    
	}
}
//-----------------------------------// Init LCD module//-----------------------------------
void initLCDM(void)
{    
	E       = 0;    RW      = 0;    RS      = 0;    PSB     = 1;    // parallel mode
 
   	LCDBUS  = 0xff; // pull up	
	_RES    = 1;    // reset pin	
	_RES    = 0;
	
	delayms(1);
	
	_RES    = 1;
	
	delayms(1);

	SdCmd(0x30);    // 8bit I/F, basic command, graphic off	
	SdCmd(0x06);    // cursor right shift	
	SdCmd(0x0C);    // display on
}
//-----------------------------------// Main Program//-----------------------------------
void main()
{	
	SP=0x60;	EA = 0;                 // disable interrupts   	
	initLCDM();	
	while(1)	
	{	
		SdCmd(0x30);          // 8bit I/F, basic command, graphic off	
		SdCmd(0x01);          // clr text screen
	
		delayms(10);
	    
		WriteGraphicScreen(GraphicLogo); 
  	
		delayms(250); 
		delayms(250); 
		delayms(250); 
		delayms(250);    

		WriteTextScreen(TextLogo);

   		delayms(250); 
		delayms(250); 
		delayms(250); 
		delayms(250);   	
	}
}//end of program

⌨️ 快捷键说明

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