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

📄 串行.c

📁 12864 LCD内含设计电路,字模软件,参考程序,PCB组件
💻 C
字号:
#include "REG52.h"
#include "intrins.h" 

//sbit LCD_PS  =  P2^6;
//sbit LCD_C86 =  P2^5;
sbit LCD_CS  =  P2^4; 
sbit LCD_RES =  P2^3; 
sbit LCD_A0  =  P2^2; 
sbit LCD_SDI =  P0^7;//
sbit LCD_CLK =  P0^6; 
#define SCL LCD_CLK
#define SDA LCD_SDI
#define RST LCD_RES
#define CS1 LCD_CS

//6*16字符
unsigned char code shuzi[]={
/*--  文字:  0  --*/
/*--  宋体9;  此字体下对应的点阵为:宽x高=6x12   --*/
/*--  高度不是8的倍数,现调整为:宽度x高度=6x16  --*/
0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,

/*--  文字:  1  --*/
/*--  宋体9;  此字体下对应的点阵为:宽x高=6x12   --*/
/*--  高度不是8的倍数,现调整为:宽度x高度=6x16  --*/
0x00,0x08,0xFC,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00,

/*--  文字:  2  --*/
/*--  宋体9;  此字体下对应的点阵为:宽x高=6x12   --*/
/*--  高度不是8的倍数,现调整为:宽度x高度=6x16  --*/
0x18,0x84,0x44,0x24,0x18,0x00,0x03,0x02,0x02,0x02,0x02,0x00,

/*--  文字:  3  --*/
/*--  宋体9;  此字体下对应的点阵为:宽x高=6x12   --*/
/*--  高度不是8的倍数,现调整为:宽度x高度=6x16  --*/
0x08,0x04,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,

/*--  文字:  4  --*/
/*--  宋体9;  此字体下对应的点阵为:宽x高=6x12   --*/
/*--  高度不是8的倍数,现调整为:宽度x高度=6x16  --*/
0x40,0xB0,0x88,0xFC,0x80,0x00,0x00,0x00,0x00,0x03,0x02,0x00,

/*--  文字:  5  --*/
/*--  宋体9;  此字体下对应的点阵为:宽x高=6x12   --*/
/*--  高度不是8的倍数,现调整为:宽度x高度=6x16  --*/
0x3C,0x24,0x24,0x24,0xC4,0x00,0x01,0x02,0x02,0x02,0x01,0x00,

/*--  文字:  6  --*/
/*--  宋体9;  此字体下对应的点阵为:宽x高=6x12   --*/
/*--  高度不是8的倍数,现调整为:宽度x高度=6x16  --*/
0xF8,0x24,0x24,0x2C,0xC0,0x00,0x01,0x02,0x02,0x02,0x01,0x00,

/*--  文字:  7  --*/
/*--  宋体9;  此字体下对应的点阵为:宽x高=6x12   --*/
/*--  高度不是8的倍数,现调整为:宽度x高度=6x16  --*/
0x0C,0x04,0xE4,0x1C,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00,

/*--  文字:  8  --*/
/*--  宋体9;  此字体下对应的点阵为:宽x高=6x12   --*/
/*--  高度不是8的倍数,现调整为:宽度x高度=6x16  --*/
0xD8,0x24,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,

/*--  文字:  9  --*/
/*--  宋体9;  此字体下对应的点阵为:宽x高=6x12   --*/
/*--  高度不是8的倍数,现调整为:宽度x高度=6x16  --*/
0x38,0x44,0x44,0x44,0xF8,0x00,0x00,0x03,0x02,0x02,0x01,0x00,

}; 

unsigned char code hanzi[]=
{
/*--  文字:  单  --*/
/*--  宋体9;  此字体下对应的点阵为:宽x高=12x12   --*/
/*--  高度不是8的倍数,现调整为:宽度x高度=12x16  --*/
0x00,0x00,0x7C,0x55,0x56,0xFC,0x56,0x55,0x54,0x7C,0x00,0x00,0x01,0x01,0x01,0x01,
0x01,0x07,0x01,0x01,0x01,0x01,0x01,0x00,


/*--  文字:  单  --*/
/*--  宋体9;  此字体下对应的点阵为:宽x高=12x12   --*/
/*--  高度不是8的倍数,现调整为:宽度x高度=12x16  --
0x00,0x00,0x3E,0xAA,0x6A,0x3F,0x6A,0xAA,0x2A,0x3E,0x00,0x00,0x80,0x80,0x80,0x80,
0x80,0xE0,0x80,0x80,0x80,0x80,0x80,0x00,
*/

/*--  文字:  片  --*/
/*--  宋体9;  此字体下对应的点阵为:宽x高=12x12   --*/
/*--  高度不是8的倍数,现调整为:宽度x高度=12x16  --*/
0x00,0x00,0xFF,0x48,0x48,0x48,0x4F,0xC8,0x08,0x08,0x08,0x00,0x04,0x02,0x01,0x00,
0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,

/*--  文字:  机  --*/
/*--  宋体9;  此字体下对应的点阵为:宽x高=12x12   --*/
/*--  高度不是8的倍数,现调整为:宽度x高度=12x16  --*/
0x84,0x64,0xFF,0x24,0x44,0xFE,0x02,0x02,0xFF,0x02,0x00,0x00,0x01,0x00,0x07,0x04,
0x02,0x01,0x00,0x00,0x07,0x04,0x07,0x00,

/*--  文字:  开  --*/
/*--  宋体9;  此字体下对应的点阵为:宽x高=12x12   --*/
/*--  高度不是8的倍数,现调整为:宽度x高度=12x16  --*/
0x20,0x22,0x22,0xFE,0x22,0x22,0x22,0xFE,0x22,0x23,0x22,0x00,0x04,0x04,0x02,0x01,
0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,

/*--  文字:  发  --*/
/*--  宋体9;  此字体下对应的点阵为:宽x高=12x12   --*/
/*--  高度不是8的倍数,现调整为:宽度x高度=12x16  --*/
0x08,0x0E,0x88,0x78,0x2F,0xE8,0x28,0xA9,0x6A,0x08,0x08,0x00,0x04,0x02,0x05,0x04,
0x02,0x02,0x01,0x02,0x02,0x04,0x04,0x00,

/*--  文字:  工  --*/
/*--  宋体9;  此字体下对应的点阵为:宽x高=12x12   --*/
/*--  高度不是8的倍数,现调整为:宽度x高度=12x16  --*/
0x00,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x03,0x02,0x00,0x00,0x04,0x04,0x04,0x04,
0x04,0x07,0x04,0x04,0x04,0x04,0x04,0x00,

/*--  文字:  作  --*/
/*--  宋体9;  此字体下对应的点阵为:宽x高=12x12   --*/
/*--  高度不是8的倍数,现调整为:宽度x高度=12x16  --*/
0x10,0x08,0xFC,0x13,0x08,0x04,0xFF,0x24,0x24,0x24,0x04,0x00,0x00,0x00,0x07,0x00,
0x00,0x00,0x07,0x01,0x01,0x01,0x01,0x00,

/*--  文字:  室  --*/
/*--  宋体9;  此字体下对应的点阵为:宽x高=12x12   --*/
/*--  高度不是8的倍数,现调整为:宽度x高度=12x16  --*/
0x04,0x06,0x4A,0x6A,0x5A,0xCB,0x4A,0x5A,0x6A,0x4A,0x06,0x00,0x04,0x04,0x05,0x05,
0x05,0x07,0x05,0x05,0x05,0x04,0x04,0x00,

};


/******************************delay time***********************************/  
void delay_ms(unsigned int ms)  
{  
 unsigned int n ;  
 while(ms--)  
      {  
       n  =  86;  
       while(n--);  
      }  
} 
//****************************reset IC for start****************************/  
void LCD_Reset()  
{  
 IE  =  0x00; //中断控制寄存器
 LCD_RES =  0;  
 delay_ms(50);  
 LCD_RES =  1;  
 delay_ms(50);  
}    
//======================================================================== 
// 函数: void LCD_DataWrite(unsigned int Data) 
// 描述: 写一个字节的显示数据至LCD中的显示缓冲RAM当中 
// 参数: Data 写入的数据  
//======================================================================== 
void LCD_DataWrite(unsigned char Dat)//,_Fill_Dot_LCD 
{ 
 unsigned char Num; 
 LCD_CS = 0; 
 LCD_A0 = 1; 
 for(Num=0;Num<8;Num++) 
 { 
  if((Dat&0x80) == 0) 
  LCD_SDI = 0; 
  else LCD_SDI = 1; 
  Dat = Dat << 1; 
  LCD_CLK = 0; 
  LCD_CLK = 1; 
 } 
 LCD_CS = 1; 
 } 
//======================================================================== 
// 函数: void LCD_RegWrite(unsigned char Command) 
// 描述: 写一个字节的数据至LCD中的控制寄存器当中 
// 参数: Command   写入的数据 
//======================================================================== 
void LCD_RegWrite(unsigned char Command) 
{ 
 unsigned char Num; 
 LCD_CS = 0; 
 LCD_A0 = 0; 
 for(Num=0;Num<8;Num++) 
 { 
  if((Command&0x80) == 0) 
  LCD_SDI = 0; 
  else LCD_SDI = 1; 
  Command = Command << 1; 
  LCD_CLK = 0; 
  LCD_CLK = 1; 
 } 
 LCD_CS = 1; 
} 
//显示亮暗点=================================================================
void Display_fill(unsigned char fill)  
{  
 unsigned char page,column;  
 for(page=0xB7;page>=0xB0;page--)  
    {  
     LCD_RegWrite(page);  //set page address   
     LCD_RegWrite(0x10);  //set Column address MSB   
     LCD_RegWrite(0x00);  //set column address LSB   
     for(column=0;column<132;column++)  
        {  
         LCD_DataWrite(fill);  
        }  
    }  
}  

//==============================================================
// 函数: void LCD_Init(void)
// 描述: LCD初始化程序,在里面会完成LCD初始所需要设置的许多寄存器,具体如果
//   用户想了解,建议查看DataSheet当中各个寄存器的意义
//================================================================
void LCD_Init(void)
{
 LCD_CS  =  0;  
 LCD_Reset();   
 LCD_RegWrite(0xA2);    //LCD偏压设置,V3时选--LCD Bias selection(1/65 Duty,1/9Bias)   
 LCD_RegWrite(0xA1);    //Segment方向选择,正常--ADC selection(SEG0->SEG128)   
 LCD_RegWrite(0x80);    //设置显示起始行对应RAM--SHL selection(COM0->COM64)   
    
 delay_ms(5);  
 LCD_RegWrite(0x26);    //设置Rb/Ra=6--Regulator Resistor Selection   
 LCD_RegWrite(0x81);    //电量设置模式(显示亮度)--Electronic Volume  
 LCD_RegWrite(0x08);     //Reference Register selection  Vo=(1+Rb/Ra)(1+a)*2.1=10 
 
 delay_ms(10);  
 LCD_RegWrite(0x2f);  	 //设置上电控制模式--Power Control(Vc=1;Vr=1;Vf=1)   
 delay_ms(10);  
 LCD_RegWrite(0xF8);    //升压比设置
 LCD_RegWrite(0x00);   
 delay_ms(5);  
 LCD_RegWrite(0xAF);    //LCD显示开--Display on 
 delay_ms(5);
 LCD_RegWrite(0xa4);
}

//---------------------------------------------
//LCD_set_XY: 设置LCD坐标函数
//输入参数:X:0-83  Y:0-5
//编写日期:20080918 
//---------------------------------------------
void LCD_setXY(unsigned char X, unsigned char Y)
{
	unsigned char gao,di; 
	LCD_RegWrite(0xB0 | Y); //页

	X = X + 4;		 //液晶是0-131的,我们只用到0-127,所以当倒序的方法时(131-0),实际上是127-0,
	gao = X & 0xf0;
	gao = gao >> 4;
	di = X & 0x0f;
	LCD_RegWrite(0x10 | gao);  //set Column address MSB   
    LCD_RegWrite(0x00 | di);  //set column address LSB

}   

/*---------------------------------------------
LCD_write_hanzi: 显示12(宽)*16(高)点阵列汉字等半角类
输入参数:c:显示的字符;
-----------------------------------------------*/
void LCD_write_hanzi(unsigned char row, unsigned char page,unsigned char c) //row:列 page:页 dd:字符
{
	unsigned char i;  	
	
	LCD_setXY(row*6, page);// 列,页 
	for(i=0; i<12;i++) 
	{
		 LCD_DataWrite(hanzi[c*24+i]);
	}
	
    LCD_setXY(row*6, page+1);// 列,页 
	for(i=12; i<24;i++) 
	{
		 LCD_DataWrite(hanzi[c*24+i]);
	}	
}

/*---------------------------------------------
LCD_write_shu: 显示6(宽)*16(高)点阵列数字字母符号等半角类
输入参数:c:显示的字符;
-----------------------------------------------*/
void LCD_write_shu(unsigned char row, unsigned char page,unsigned char c) //row:列 page:页 dd:字符
{
	unsigned char i;  	
	
	LCD_setXY(row*6, page);// 列,页 
	for(i=0; i<6;i++) 
	{
		 LCD_DataWrite(shuzi[c*12+i]); 
	}
	
    LCD_setXY(row*6, page+1);// 列,页 
	for(i=6; i<12;i++) 
	{
		 LCD_DataWrite(shuzi[c*12+i]); 
	}	 	
} 




void main()
{
 // LCD_C86 = 0;
 // LCD_PS  = 0;
	LCD_Init();	
	Display_fill(0x00);  //显示全暗 
    delay_ms(10); 
	while(1)
	{
  Display_fill(0x00);  //显示全暗 
  LCD_write_hanzi(0,0,0);  //单		//row:列 page:页 dd:字符
  LCD_write_hanzi(2,0,1);  //片
  LCD_write_hanzi(4,0,2);  //机
  LCD_write_hanzi(6,0,3);  //开
  LCD_write_hanzi(8,0,4);  //发
  LCD_write_hanzi(10,0,5);  //工
  LCD_write_hanzi(12,0,6);  //作
  LCD_write_hanzi(14,0,7);  //室

  LCD_write_shu(0,2,0);	  //0
  LCD_write_shu(1,2,1);	  //1
  LCD_write_shu(2,2,2);	  //2
  LCD_write_shu(3,2,3);	  //3
  LCD_write_shu(4,2,4);	  //4
  LCD_write_shu(5,2,5);  //5
  LCD_write_shu(6,2,6);  //6
  LCD_write_shu(7,2,7);  //7
  LCD_write_shu(8,2,8);  //8
  LCD_write_shu(9,2,9);  //9


  delay_ms(20000);
  Display_fill(0x00);  //显示全暗 

	}


}

⌨️ 快捷键说明

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