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

📄 sym2410.txt

📁 LCM2410液晶显示器的各种显示演示.有各种实例.
💻 TXT
📖 第 1 页 / 共 2 页
字号:
//                    SYM24064BZK 
//*************************************************************************** 
//连线表:  CPU=W78E516B                                                     * 
//CS=P2.7  RS=P2.0  WR=WR  RD=RD  DATA=P0  RESET=RC复位电路                 * 
//*************************************************************************** 
#include <reg52.h> 
#include <stdlib.h> 
#include <intrins.h> 
#include <stdio.h> 
 
char xdata LcdCmdPort  _at_ 0x0000;  //CS低有效  RS低--寄存器 
char xdata LcdDataPort _at_ 0x0100;  //CS低有效  RS高--数据 
sbit LCD_BUSY = P3^5;    //可以不用BUSY 
sbit Key = P3^4; 
sbit LED = P3^5;   //LED背光控制脚 
//=============================================== 
unsigned char code BMP1[]; 
unsigned char code AboutProduct[]; 
unsigned char code ASCIITable[] = "0123456789ABCDEF"; 
unsigned char code DemoTable[] = {0x00,0x18,0x06,0x1A,0x0C,0x1C,0x12,0x1E,0x16}; 
//=============================================== 
 
//写指令 
void WriteCommand(unsigned char CommandReg,unsigned char CommandByte) 
{ 
//  CheckBusy(); 
  LcdCmdPort = CommandReg; 
//  CheckBusy(); 
  LcdCmdPort = CommandByte; 
} 
 
//读数据 
unsigned char ReadCommand(unsigned char CommandReg) 
{ 
  unsigned char ReadReg; 
//  CheckBusy(); 
  LcdCmdPort = CommandReg; 
  _nop_(); 
//  CheckBusy(); 
  ReadReg = LcdCmdPort; 
  return ReadReg; 
} 
 
//写数据 
void WriteData(unsigned char DataByte) 
{ //  CheckBusy(); 
  LcdDataPort = DataByte; 
} 
 
//检测忙信号 
//BUSY脚可以不用,但是有几个地方要注意加延时 
//一般的指令不需要加延时 
//清屏幕的时候需要3ms延时 
//显示放大字体的时候需要1ms延时 
void CheckBusy(void) 
{ 
  while(LCD_BUSY==1); 
} 
 
//延时函数 
void Delay(unsigned int MS) 
{ 
  unsigned char us,usn; 
  while(MS!=0) 
  {  
    usn = 2;   //在12M晶振下接近1ms 
    while(usn!=0) 
  { 
   us=0xf9; 
   while (us!=0){us--;}; 
   usn--; 
  } 
  MS--; 
 } 
} 
 
//延时函数2 
//(用户不需要,可直接用Delay函数,这个函数是本公司测试用) 
void DelayKey(unsigned char HalfSecond) 
{     //Delay_key加入时间参数0.5秒一级 
  unsigned int i; 
  for(i=0;i<50*HalfSecond;i++)   //12M Crystal 
 { 
    if(Key==0) 
  { 
   Delay(20); 
   while(Key==0) {Delay(20);} 
   break; 
  } 
    Delay(10); 
 } 
} 
//初始化 
void LcdInit(void) 
{ 
  WriteCommand(0x00,0xC9); //Power ON,TXT mode,Display ON 
  WriteCommand(0x01,0xf2); //Dis CLK_OUT,BUSY(INT) high,System clock 8MHz 
  WriteCommand(0x02,0x10); //ROM/RAM Speed1--60ns 
  WriteCommand(0x03,0x80);  //Advance Display Setup 
  WriteCommand(0x10,0x2b); //Align Disable;Bold Disable;Cursor Disable 
  WriteCommand(0x11,0x20); //Cursor high = 2;Row Distance = 0 
  WriteCommand(0x12,0x91); //Disable Gray,Only use Page1;page1 OR page2;R/W page1 
  WriteCommand(0x20,0x1d); //Active window Right = (240/8)-1 = 29 
  WriteCommand(0x30,0x3F); //Active Window Bottom = 64-1 = 63 
  WriteCommand(0x40,0x00); //Active Window Left = 0 
  WriteCommand(0x50,0x00); //Active Window Top = 0 
  WriteCommand(0x21,0x1d); //Display Window Right = (240/8)-1 = 29 
  WriteCommand(0x31,0x9F); //Display Window Bottom = 160-1 = 159 
  WriteCommand(0x41,0x00); //Display Window Left = 0 
  WriteCommand(0x51,0x00); //Display Window Top = 0 
  WriteCommand(0x60,0x00); //Cursor Position (X) = 0 
  WriteCommand(0x61,0x00); //Begin Segment Position = 0 
  WriteCommand(0x70,0x00); //Cursor Position (Y) = 0 
  WriteCommand(0x71,0x00); //Shift Begin Commom = 0 
  WriteCommand(0x72,0x9F); //Shift End Commom = 159 
  WriteCommand(0x80,0x33); //Blink Time = 51 
  WriteCommand(0x81,0x00); //N_line inverse start Common = 0 
  WriteCommand(0x91,0x00);  //N_line inverse end Common = 0  (Disable) 
  WriteCommand(0x90,0x0C); //XCK  (8MHz*4)/(240*160*70)= 12 
  WriteCommand(0xA0,0x11); //Interrupt Setup & Status (Disable all INT) 
  WriteCommand(0xA1,0x00);  //Key Scan Disable 
  WriteCommand(0xA2,0x00); //Key Scan Data Register 
  WriteCommand(0xA3,0x00);  //Key Scan Data Expand Register 
  WriteCommand(0xB0,0x1d);  //Interrupt Column = 39 (disabled) 
  WriteCommand(0xB1,0x9f); //Interrupt Row = 159 (disabled) 
  WriteCommand(0xC0,0x00); //Touch Panel Disable 
  WriteCommand(0xC1,0x0A);  //ADC Status 
  WriteCommand(0xC8,0x80); //Touch Panel Segment High Byte Data Register(TPXR) 
  WriteCommand(0xC9,0x80); //Touch Panel Common High Byte Data Register(TPYR) 
  WriteCommand(0xCA,0x00);  //Touch Panel Segment/Common Low Byte Data Register(TPZR) 
  WriteCommand(0xD0,0x0C);  //LCD Contrast Control = 12 
  WriteCommand(0xE0,0x00); //Fill Data = 00H 
  WriteCommand(0xF0,0xA0); //Font ROM Control 
  WriteCommand(0xF1,0x0F); //Font Size = x1 
} 
 
//清屏 
void LcdClear(unsigned char y) 
{ 
  unsigned char X; 
  WriteCommand(0x12,0x93); //同时写入两层RAM 
  WriteCommand(0xE0,y); 
  X = ReadCommand(0xF0); 
  X &= 0xF7; 
  X |= 0x08; 
  WriteCommand(0xF0,X); 
  Delay(5); 
  WriteCommand(0x12,0x91); //修正 
} 
 
//坐标定位 
void LocateXY(unsigned char x,unsigned char y) 
{ 
  WriteCommand(0x60,x); 
  WriteCommand(0x70,y); 
} 
 
//显示240x64位图 
void PutBMP(unsigned char *puts) 
{ 
  unsigned char i,j; 
  unsigned int Y=0; 
  WriteCommand(0x00,0xC5); 
  LocateXY(0,0); 
  for(i=0;i<64;i++) 
 { 
    for(j=0;j<30;j++) 
  { 
   WriteData(puts[Y]); 
   Y++; 
  } 
 } 
} 
 
//显示单个字符函数 
void PutChar(unsigned char x,unsigned char y,unsigned char CharByte) 
{ 
  WriteCommand(0x00,0xCD);//change to GB/ASCII mode 
  LocateXY(x,y); 
  WriteData(CharByte); 
} 
 
//显示字符串函数 
void PutStr(unsigned char x,unsigned char y,unsigned char *ptr) 
{ 
  WriteCommand(0x00,0xCD);//change to GB/ASCII mode 
  LocateXY(x,y); 
  while(*ptr != '\0') 
{ 
    WriteData(*ptr); 
    ++ptr; 
 } 
} 
 
//在某位置显示数字函数 
void PutBCD(unsigned char x,unsigned char y,unsigned char var) 
{ 
  WriteCommand(0x00,0xCD);//change to GB/ASCII mode 
  LocateXY(x,y); 
       WriteData(ASCIITable[var / 10]); 
       var = var%10; 
  WriteData(ASCIITable[var]); 
} 
 
//显示开关 
void DisplaySW(unsigned char X) 
{ 
  if(X==0) WriteCommand(0x00,0xC9); 
  else WriteCommand(0x00,0xCD); 
} 
 
//产品特点描述 
void ProductSpecify( void ) 
{ 
  LcdClear(0); 
  PutStr(6,0,  "SYM24064BZK特点说明"); 
  PutStr(0,18, "1.内含7602个GB码国家标准字库"); 
  PutStr(0,36, "2.支持粗体字和反白显示"); 
  PutStr(0,54, "3.字体可放大显示,最大可到64x64"); 
  PutStr(0,72, "4.支持水平卷动和垂直拖动功能"); 
  PutStr(0,90, "5.提供简单四级灰度显示"); 
  PutStr(0,108,"6.支持软件调节对比度,方便使用"); 
  DelayKey(4); 
} 
  
//汉字显示相关功能演示 
//局部反白,全屏反白,粗体,字体放大 
void HZDemo( void ) 
{ 
  LcdClear(0); 
  WriteCommand(0x10,0x2b);//正常字体,中英文不对齐 
  PutStr(0,0,"正常:欢迎光临"); 
  
  PutStr(0,16,"反白:欢迎光临"); 
  WriteCommand(0x10,0x0b);//反白,中英文不对齐 
  PutStr(13,16,"D"); 
  WriteCommand(0x10,0x3b);//粗体,中英文不对齐 
  PutStr(0,32,"粗体:欢迎光临"); 
  
  WriteCommand(0x10,0x2b);//正常字体,中英文不对齐 
  PutStr(0,48,"对齐:欢迎"); 
  WriteCommand(0x10,0x6b);//正常字体,中英文对齐 
  PutStr(9,48,"购买LCD显示器"); 
  
  WriteCommand(0x10,0x2b);//正常字体,中英文不对齐 
  PutStr(0,64,"不对:欢迎购买LCD显示器"); 
  
  PutStr(0,80,"放大:"); 
  WriteCommand(0xF1,0x5F);//32x32汉字 
  
  PutStr(21,80,"L"); 
  Delay(1); 
  PutStr(23,80,"C"); 
  Delay(1); 
  PutStr(25,80,"D"); 
  Delay(1); 
  WriteCommand(0xF1,0x0F);//修正为16x16汉字  
  DelayKey(4); 
  WriteCommand(0x00,ReadCommand(0x00)&0xfe);//全屏幕反白
  DelayKey(4); 
  WriteCommand(0x00,ReadCommand(0x00)|0x01);//全屏不反白
  
  WriteCommand(0x00,ReadCommand(0x00)|0x02);//全屏闪烁 
  WriteCommand(0x80,7);  //设置闪烁时间0.1s 
  DelayKey(4); 
  WriteCommand(0x00,ReadCommand(0x00)&0xfe);//停止闪烁 
} 
 
//各种丰富的ASCII码显示演示 
//具体请查阅ASCII区块表 
void ASCIIDemo( void ) 
{ 
  unsigned char i,j; 
  LcdClear(0); 
  PutStr(0,0,"本产品除了包含常用英文标点符号等ASICC码以
ASICC区块资料中查阅"); 
  WriteCommand(0xf0,ReadCommand(0xf0)&0xfc|0x03);  //
  
  for(j=0;j<3;j++) 
 { 

⌨️ 快捷键说明

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