?? 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 + -