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

📄 main.c

📁 用Silabs的C8051F410单片机驱动LCD12864的屏
💻 C
📖 第 1 页 / 共 2 页
字号:
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------

#include <C8051F410.h>                 // SFR declarations
#include <stdio.h>
#include <math.h>
#include <INTRINS.H>
#include <string.h>

//-----------------------------------------------------------------------------
// 16-bit SFR Definitions for 'F41x
//-----------------------------------------------------------------------------

sfr16 TMR2RL = 0xCA;                   // Timer2 reload value
sfr16 TMR2 = 0xCC;                     // Timer2 counter

//-----------------------------------------------------------------------------
// Global CONSTANTS
//-----------------------------------------------------------------------------
#define RTC0CN    0x06                 // RTC address of RTC0CN register
#define RTC0XCN   0x07                 // RTC address of RTC0XCN register
const unsigned char code RTC_Interval[6]= {0x00,0x00,0x01,0x00,0x00,0x00};

sbit Led_En = P0^5;
sbit Speaker= P0^7;

sbit P0_0 = P0^0;
sbit P0_1 = P0^1;
sbit P0_2 = P0^2;
sbit P2_0 = P2^0;
sbit P2_1 = P2^1;

#define  LCD_CS1           	    P0_0
#define  LCD_CS2           	    P0_1
#define  LCD_ENABLE      		P0_2 
#define  LCD_R_W         		P2_0
#define  LCD_D_I           	    P2_1



#define DataPort P1            //LCD Data port

#define  LCD_OFF             	62	 //显示器关闭
#define  LCD_ON              	63	 //显示器打开
#define  LCD_START_LINE_0    	192	 //设开始坐标
#define  SET_PAGE            	184	 //设页数(X坐标)
#define  SET_Y_ADDRESS_0     	64	 //设X坐标
#define  CLEAR               	0    //设页数(X坐标)

#define  ENABLE          		1
#define  DISABLE                0
#define  READ            		1
#define  WRITE             	  	0
#define  COMMAND          		0
#define  DATA                	1 
//-----------------------------------------------------------------------------

#define SYSCLK        24500000         // SYSCLK frequency in Hz
#define BAUDRATE      115200           // Baud rate of UART in bps

//-----------------------------------------------------------------------------
void OSC_Init (void);
void PORT_Init (void);

//-----------------------------------------------------------------------------
/*********************************************************************/
/********************字库***********************************************/
/*********************************************************************/
unsigned char code digit[10][2][16]=
{{{0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,0x00,0x00,0x00}},/*"0",9*/
{{0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x00,0x00}},/*"1",0*/
{{0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x00,0x00,0x00}},/*"2",1*/
{{0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,0x00,0x00,0x00}},/*"3",2*/
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,0x00,0x00,0x00}},/*"4",3*/
{{0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,0x00,0x00,0x00}},/*"5",4*/
{{0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,0x00,0x00,0x00}},/*"6",5*/
{{0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},/*"7",6*/
{{0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,0x00,0x00,0x00}},/*"8",7*/
{{0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,0x00,0x00,0x00}}};/*"9",8*/ 
//-----------------------------------------------------------------------------
unsigned char code comma[2][16]=
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00}};/*":",0*/
//-----------------------------------------------------------------------------

unsigned char code space[2][16]=
{{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 Zhongguo[2][16]=
{
{0x00,0x00,0xFC,0xFC,0x94,0x94,0xF4,0xFE,0xCA,0xCA,0x0A,0x02,0xFE,0xFE,0x00,0x00},
{0x00,0x00,0x1F,0x1F,0x14,0x14,0x17,0x1B,0x0A,0x0B,0x1B,0x3A,0x3F,0x1F,0x00,0x00}/*"国",0*/
};
//-----------------------------------------------------------------------------
unsigned char code Zhongguo12[2][12]=
{
{0x00,0xFF,0xFF,0x25,0x25,0xFD,0xFD,0x65,0xE5,0xA5,0xFF,0xFF},
{0x00,0x0F,0x0F,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x0F,0x0F},/*"国",0*/
};
//-----------------------------------------------------------------------------
unsigned char code Five[2][6]=
{
{0x3C,0x24,0x24,0x24,0xC4,0x00},
{0x01,0x02,0x02,0x02,0x01,0x00}  /*"5",0*/
};
//-----------------------------------------------------------------------------
unsigned char code Eight[2][8]=
{
{0x00,0x00,0x70,0x78,0xC8,0xC8,0x88,0x00},
{0x00,0x10,0x10,0x30,0x30,0x1F,0x0F,0x00}/*"5",0*/
};
//-----------------------------------------------------------------------------
unsigned char xdata DispRam[8][128];


unsigned char gx,gy;

//-----------------------------------------------------------------------------
void LCD_Delay(unsigned char i)
{
 while(i--);
}
/***************检测忙****************************/

void Check_LCD_Busyflag(void)
{
 unsigned char  x;
 LCD_ENABLE=1;
 LCD_R_W=1;
 LCD_D_I=0;	
  
 LCD_Delay(10);
 DataPort=0x00;
 do 
 {
  x=DataPort && 128;
 } while(x);

 LCD_ENABLE=0;
 LCD_Delay(5);
 LCD_D_I=0;
 LCD_R_W=0;

}
/********************写命令**********************/
void Write_LCD_Command(unsigned command)
{
 Check_LCD_Busyflag();   

 LCD_ENABLE=1;
 LCD_R_W = 0;
 LCD_D_I = 0;

 LCD_Delay(10);
 DataPort=command;
 LCD_Delay(10);
 LCD_ENABLE=0;
 LCD_Delay(5);
 LCD_D_I=1;
 LCD_R_W=1;
 LCD_Delay(10);
}
/********************写数据*********************/
void Write_LCD_Data(unsigned LCDdata)
{
 Check_LCD_Busyflag(); 
 LCD_ENABLE=1;
 LCD_R_W=0;
 LCD_D_I=1;

 LCD_Delay(10);
 DataPort=LCDdata;
 LCD_Delay(10);
 LCD_ENABLE=0;
 LCD_Delay(5);
 LCD_D_I=0;
 LCD_R_W=1;
 LCD_Delay(10);
}
/*********************清屏**********************/	
void Clear_LCD()
{
 int i,j;
 LCD_CS1=1;
 LCD_CS2=1;
 LCD_Delay(5);
 Write_LCD_Command(LCD_ON);    
 Write_LCD_Command(LCD_START_LINE_0);
 for(i=0;i<8;i++)
 {
  Write_LCD_Command(SET_PAGE+i); 
  Write_LCD_Command(SET_Y_ADDRESS_0);    
  for(j=0;j<64;j++)
  {
   Write_LCD_Data(0xff);
  }
 }               
}

//-----------------------------------------------------------------------------

void UpData_LCD(unsigned char Buffer[8][128])
{
 unsigned char i,j;
 Write_LCD_Command(LCD_ON);    
 Write_LCD_Command(LCD_START_LINE_0);

 LCD_CS1=1;
 LCD_CS2=0;
 LCD_Delay(5);
 for(i=0;i<8;i++)
 {
  Write_LCD_Command(SET_PAGE+i); 
  Write_LCD_Command(SET_Y_ADDRESS_0);    
  for(j=0;j<64;j++)
  {
   Write_LCD_Data(Buffer[i][j]);
  }
 }
 
 LCD_CS1=0;
 LCD_CS2=1;
 LCD_Delay(5);
// Write_LCD_Command(LCD_ON);    
// Write_LCD_Command(LCD_START_LINE_0);
 for(i=0;i<8;i++)
 {
  Write_LCD_Command(SET_PAGE+i); 
  Write_LCD_Command(SET_Y_ADDRESS_0);    
  for(j=64;j<128;j++)
  {
   Write_LCD_Data(Buffer[i][j]);
  }
 }                
}

//-----------------------------------------------------------------------------

void Show_ChineseChar16(unsigned char x,unsigned char y,unsigned char StrAddr[2][16])
{
 unsigned char i;
 if((y%8)==0)
 {
  for(i=0;i<16;i++)
  {
   DispRam[y>>3][x+i]    =StrAddr[0][i];
   DispRam[(y>>3)+1][x+i]=StrAddr[1][i];  
  }
 }
 else
 {
  for(i=0;i<16;i++)

⌨️ 快捷键说明

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