📄 demo.c
字号:
/*
表1 SED1335控制器指令表
功 能 指 令 代 码 说 明 参数量
系统控制 SYSTEM SET 40H 初始化,显示窗口设置 8
系统控制 SLEEP IN 53H 空闲状态设置 /
显示操作 DISP ON/OFF 59H/58H 设置开关显示方式 1
显示操作 SCROLL 54H 设置显示区域 10
显示操作 CSRFORM 5DH 设置光标形状 2
显示操作 CGRAM ADR 5CH 设置CGRAM起始地址 2
显示操作 CSRDIR 4CH-4FH 设置光标移动方向 /
显示操作 HDOT SCR 5AH 设置点单元水平移动量 1
显示操作 OVLAY 5BH 设置合成显示方式 1
绘制操作 CSRW 46H 设置光标地址 2
绘制操作 CSRR 47H 读出光标地址 2
存储操作 MWRITE 42H 将数据写入显示缓冲区 /
存储操作 MREAD 43H 从显示缓冲区读出数据 /
----------------------------------------------------------------------
TM320240引脚描述:
引脚序号 信 号 功 能
1 VSS 逻辑电源地(0V)
2 VDD 逻辑电源(5V)
3 VO 对比度调节电压(VDDVEE间调节)
4 A0 数据信号选择(高电平时,写命令字、读数据;低电平时,写数据、读状态字)
5 WR(W/R) 8080系列,写信号,低电平有效6800系列,读写信号,0为写,1为读
6 RD(E) 8080系列,读信号,低电平有效6800系列,使能信号,高电平为写,下降沿为读
7~14 DB0~DB7 三态数据总线
15 CS 片选端,低电平有效
16 /RET 复位信号,低电平输入实现硬件复位
17 VEE LCD驱动电压(-23V)(由图1中的DC-DC提供)
18 SEL1 “0”时序适配8080系列MPU“1”时序适配6800系列MPU
19~22 N.C. 悬空脚
---------------------------------------------------------------------------
TM320240引脚连接:
引脚序号 信 号 连接
1 VSS 0V
2 VDD 5V
3 VO 0~5V
4 A0 A0
5 WR(W/R) /WR
6 RD(E) /RD
7~14 DB0~DB7 D0~D7
15 CS Y5(B800~BFFF)
16 /RET PC5(8255-PC5)
17 VEE ???
18 SEL1 0V
19~22 N.C. 悬空脚
*/
#include <reg51.h>
#include <stdio.h>
#include <math.h>
#include <absacc.h>
#include <string.h>
/* 直接访问方式地址定义,根据用户平台接口修改 */
#define wcadd1 XBYTE[0x8100] /* 写指令代码地址 */
#define wdadd1 XBYTE[0x8000] /* 写参数及显示数据地址 */
#define rdadd1 XBYTE[0x8100] /* 读参数及显示数据地址 */
#define rbadd1 XBYTE[0x8000] /* 读忙状态地址 */
/* 程序参数定义,根据用户选择的LCM型号修改 */
#define PARA 0x1f;
/* 定义调用函数 */
CCW1_PR(char O_X,char O_Y,char code_1); /* 汉字写入函数(文本方式) */
CCW2_PR(char O_X,char O_Y,char code_1); /* 汉字写入函数(图形方式) */
W_DOT(int O_X,int O_Y ); /* 绘点函数 */
CW_PR(O_X,O_Y); /* 西文写入函数 */
/*-------------------240128的SYSTEM SET 参数-------------------------------
初始化SYSTEM SET指令参数有8个,依次为P1~P8。
模块的P1~P8参数可以定义systab,db 30h、87h、07h、27h、42h、0ffh、28h、00h。*/
unsigned char SYSTAB[8]={0x30,0x87,0x07,0x1e,0x21,0x80,0x1f,0x00};
unsigned char SCRTAB[10]={0x00,0x00,0x80,0xf0,0x01,0x80,0x00,0x00,0x00,0x00};
/* 在此可以观察文本方式下的字符及光标的显示效果(写入内容为"Sevicer tel:") */
unsigned char CTAB1[12]={0x53,0x65,0x76,0x69,0x63,0x65,0x72,0x20,0x54,0x45,0x4c,0x3a};
/* 文本方式下的汉字显示方法
在文本方式下显示汉字, 需要在SED1335 等显示RAM 内建立一个自定义字符库
CGRAM,然后通过在相应的单元写入相应的字符代码来实现汉字的显示.
SED1335 等的字符代码对应的是8x8 点阵的字符块, 而一个汉字需要四个8x8
点阵的字符块组合显示, 所以在建立汉字的CGRAM 时, 需要四个字符代码管理一个
汉字, 一般是按左上部, 左下部, 右上部和右下部四部分分配代码. 比如在演示程
序中建立 "清华" 两个汉字的CGRAM,那么这两个汉字的代码为80H(81H,82H,83H)和
84H(85H,86H,87H). */
code unsigned char CGTAB[4][32]={0x00,0x40,0x37,0x10,0x83,0x60,0x2F,0x08, /* 清 */
0x13,0x22,0xE3,0x22,0x23,0x22,0x22,0x22,
0x40,0x48,0xFC,0x40,0xF8,0x40,0xFE,0x08,
0xFC,0x08,0xF8,0x08,0xF8,0x08,0x28,0x10,
0x04,0x04,0x08,0x08,0x18,0x29,0x4A,0x08, /* 华 */
0x09,0x01,0xFF,0x01,0x01,0x01,0x01,0x01,
0x40,0x48,0x58,0x60,0xC0,0x40,0x44,0x44,
0x3C,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,
0x04,0xFF,0x05,0x41,0x33,0x14,0x01,0xF6, /* 蓬 */
0x1B,0x10,0x13,0x10,0x17,0x10,0x28,0x47,
0x44,0xFE,0x40,0xF8,0x10,0xE0,0x18,0x46,
0xF8,0x40,0xF8,0x40,0xFC,0x40,0x46,0xFC,
0x00,0x43,0x30,0x10,0x00,0x07,0xF1,0x11, /* 远 */
0x11,0x11,0x12,0x12,0x14,0x28,0x47,0x00,
0x10,0xF8,0x00,0x00,0x08,0xFC,0x20,0x20,
0x20,0x24,0x24,0x1C,0x00,0x06,0xFC,0x00 };
/**********************/
/* 演示主程序 */
/**********************/
void main()
{
unsigned char i,j,code_1;
unsigned int k,O_X,O_Y;
INT_1(); /* 调初始化函数 */
k=0;
for(j=0;j<128;j++) /* 绘点显示 */
{
O_X=k;
O_Y=j+0x10;
W_DOT(O_X,O_Y); /* 调绘点函数 */
k++;
if(k>240)break; /* 共240行 */
}
for(j=126;j>0;j--)
{
O_X=k;
O_Y=j+0x10;
W_DOT(O_X,O_Y); /* 调绘点函数 */
k++;
if(k>240)break;
}
code_1=0x00; /* 中文显示(图形方式) */
O_X=0x10+0x02;
O_Y=0x00;
CCW2_PR(O_X,O_Y,code_1); /* 调中文显示函数(图形方式) */
code_1=0x01;
O_X=0x10+0x19;
O_Y=0x00;
CCW2_PR(O_X,O_Y,code_1); /* 调中文显示函数(图形方式) */
code_1=0x02;
O_X=0x10+0x02;
O_Y=0x6f;
CCW2_PR(O_X,O_Y,code_1); /* 调中文显示函数(图形方式) */
code_1=0x03;
O_X=0x10+0x19;
O_Y=0x6f;
CCW2_PR(O_X,O_Y,code_1); /* 调中文显示函数(图形方式) */
/*------- 中文显示(文本方式)----------- */
CGRAM(); /* 调CGRAM子程序 */
code_1=0x80; /* 取字模 */
O_X=0x00;
O_Y=0x02;
CCW1_PR(O_X,O_Y,code_1); /* 调中文显示函数(文本方式) */
code_1=0x84; /* 取字模 */
O_X=0x1c;
O_Y=0x04;
CCW1_PR(O_X,O_Y,code_1); /* 调中文显示函数(文本方式) */
code_1=0x88; /* 取字模 */
O_X=0x00;
O_Y=0x0e;
CCW1_PR(O_X,O_Y,code_1); /* 调中文显示函数(文本方式) */
code_1=0x8c; /* 取字模 */
O_X=0x1c;
O_Y=0x0e;
CCW1_PR(O_X,O_Y,code_1); /* 调中文显示函数(文本方式) */
/*------------西文显示-------------*/
wcadd1=0x5d; /* 设光标形状 */
wdadd1=0x07;
wdadd1=0x03;
wcadd1=0x5b; /* OVLAY代码 */
wdadd1=0x01;
wcadd1=0x59; /* DISP ON\OFF代码 */
wdadd1=0x56;
O_X=0; /*X轴方向取值0~29(十进制)*/
O_Y=0; /*Y轴方向取值0~15(十进制)*/
CW_PR(O_X,O_Y); /* 调西文写入函数 */
}
/********************/
/* 初始化函数 */
/********************/
INT_1()
{
unsigned char i;
wcadd1=0x40; /* SYSTEM SET代码 */
for(i=0;i<8;i++)
{
wdadd1=SYSTAB[i]; /* 写入参数 */
}
wcadd1=0x44; /* SCROLL代码 */
for(i=0;i<10;i++)
{
wdadd1=SCRTAB[i]; /* 写入参数 */
}
wcadd1=0x5a; /* HDOT SCR 代码 */ //设置点单元水平移动量,参考量为1
wdadd1=0x00; /* 设置参数P1 */
wcadd1=0x5b; /* OVLAY 代码 */ //设置合成显示方式,参考量为1
wdadd1=0x00; /* 设置参数:显示一,三区为文本属性 */
CLEAR(); /* 调清屏函数 */
wcadd1=0x59; /* 显示状态设置 */ //设置开关显示方式,参考量为1
wdadd1=0x54; /* 设置参数:显示一~四区开显示 */
}
/*********************/
/* 清屏函数 */
/*********************/
CLEAR()
{
unsigned int i,j;
wcadd1=0x4c; /* CSRDIR 代码 */ //设置CGRAM起始地址,参考量为2
wcadd1=0x46; /* CSRW 代码 */ //设置光标地址,参考量为2
wdadd1=0x00; /* 设置参数光标指针低8位 */
wdadd1=0x00; /* 设置参数光标指针高8位 */
wcadd1=0x42; /* MWRITE 代码 */ //将数据写入显示缓冲区
for(j=0;j<2195;j++)
{
for(i=0;i<30;i++)
{
wdadd1=0x00; /* 写入数据 */
}
}
}
/********************/
/* CGRAM函数 */
/********************/
CGRAM()
{
unsigned char i,j;
wcadd1=0x5c; /* CGRAMADR 代码 *///设置CGRAM起始地址
wdadd1=0x00; /* 设置SAG=0x3000 */
wdadd1=0x30;
wcadd1=0x46; /* CSRW 代码 *///设置光标地址
wdadd1=0x00; /* 设置CSR=0x3400(字符代码=80H) */
wdadd1=0x34;
wcadd1=0x4c; /* CSRDIR 代码 */
wcadd1=0x42; /* MWRITE 代码 *///将数据写入显示缓冲区
for(j=0;j<4;j++)
{
for(i=0;i<32;i++)
{
wdadd1=CGTAB[j][i]; /* 写入字模数据 */
}
}
}
/*************************/
/* 写汉字函数(文本方式) */
/*************************/
CCW1_PR(char O_X,char O_Y,code_1)
{
unsigned int i,j;
i=PARA;
j=i*O_Y+O_X;
wcadd1=0x4f; /* CSRDIR 代码(下移) */
wcadd1=0x46; /* 设置光标地址 */
wdadd1=j%256; /* 低8位 *///16*16=256个点,所以
wdadd1=j/256; /* 高8位 */
wcadd1=0x42; /* MWRITE 代码 *///将数据写入显示缓冲区
wdadd1=code_1; /* 写入汉字代码 */
wdadd1=code_1+1; /* 写入汉字代码 */
j++;
wcadd1=0x46; /* CSRW 代码 */
wdadd1=j%256; /* 设置光标地址 */
wdadd1=j/256;
wcadd1=0x42; /* MWRITE 代码 */
wdadd1=code_1+2; /* 写入汉字代码 */
wdadd1=code_1+3; /* 写入汉字代码 */
}
/************************/
/* 写汉字函数(图形方式)*/
/************************/
CCW2_PR(char O_X,char O_Y,code_1)
{
unsigned char count1;
unsigned int i,j,a;
i=PARA;
j=i*O_Y+O_X;
wcadd1=0x4f; /* CSRDIR 代码(下移) */
for(i=0;i<2;i++)
{
wcadd1=0x46; /* CSRW 代码 */
wdadd1=j%256; /* 设置光标地址CSR */
wdadd1=j/256;
wcadd1=0x42; /* MWRITE 代码 */
for(count1=i*16;count1<16*(i+1);count1++)
{
wdadd1=CGTAB[code_1][count1]; /* 写入数据 */
}
j=j+1;
}
}
/************************/
/* 西文函数 */
/************************/
unsigned char i;
unsigned int j;
CW_PR(O_X,O_Y)
{
i=PARA;
j=i*O_Y+O_X;
wcadd1=0x46; /* CSRW 代码 */
wdadd1=j%256; /* 设置光标地址CSR */
wdadd1=j/256;
wcadd1=0x4c; /* CSRDIR 代码 */
wcadd1=0x42; /* MWRITE 代码 */
for(i=0;i<12;i++)
{
wdadd1=CTAB1[i]; /* 写入数据 */
}
}
/***********************/
/* 绘点函数 */
/***********************/
W_DOT(int O_X,int O_Y)
{
unsigned char i,j,dat;
unsigned int k;
j=PARA;
i=O_X%8;
O_X=O_X/8;
k=j*O_Y+O_X;
wcadd1=0x4f; /* 设置光标方向下移*/
wcadd1=0x46; /* 设置光标地址 */
wdadd1=k%256; /* 计算光标地址 */ //低8位
wdadd1=k/256; //高8位
if(O_Y==0)O_Y=0x80;
else
{
O_Y=1;
for(;i<7;i++) /* 计算显示位 */
{
O_Y=O_Y*2;
}
}
wcadd1=0x43; /* MREAD 代码 */
dat=rdadd1; /* 读取当前显示数据 */
wcadd1=0x46; /* 设置光标地址 */
wdadd1=k%256; /* 计算光标地址 */
wdadd1=k/256;
wcadd1=0x42; /* MWRITE 代码 */
wdadd1=dat|O_Y; /* 写入合成数据 */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -