📄 sym2410.txt
字号:
// 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 + -