📄 t6963b.lst
字号:
C51 COMPILER V7.01 T6963B 03/31/2005 21:39:13 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE T6963B
OBJECT MODULE PLACED IN T6963B.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE T6963B.c COMPACT BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*写汉字液晶子程
2
3 本例程未使用6963的文本模式,使用程序填入字模也足够快。程序以Youth所提供
4 的51例程移植过来,同时对有些地方做了简化处理,增加了画线画圆的例程,好在
5 6963的画点有专用指令,所以不用读屏就可以直接画点。
6
7 ;************************************************************************
8 ;连线图: 液晶屏分为8行*15列汉字,使用总线接口方式(C8051F020的高端口) *
9 ;*LCM---C8051* *LCM---C8051* *LCM----C8051* *LCM----C8051* *
10 ;*DB0-----P70* *DB4-----P74* *Rd ------P46* *C/D------P50* *
11 ;*DB1-----P71* *DB5-----P75* *Wr ------P47* *CE ------P57* *
12 ;*DB2-----P72* *DB6-----P76* *RST------VCC* *FS ------Vcc* *
13 ;*DB3-----P73* *DB7-----P77* *
14 ;注:C8051F020的晶振频率为22.1184MHz,发现偶尔会丢失数据 *
15 ;************************************************************************/
16
17 #include "stdhead.h"
18 #include "zimo.h"
19
20 //#define ulong unsigned long
21 //#define uint unsigned int
22 //#define uchar unsigned char
23
24 #define N_MAX_WAIT 10
25
26 // ASCII字符控制代码解释定义
27 #define STX 0x02
28 #define ETX 0x03
29 #define EOT 0x04
30 #define ENQ 0x05
31 #define BS 0x08
32 #define CR 0x0D
33 #define LF 0x0A
34 #define DLE 0x10
35 #define ETB 0x17
36 #define SPACE 0x20
37 #define COMMA 0x2C
38
39 #define TRUE 1
40 #define FALSE 0
41
42 #define HIGH 1
43 #define LOW 0
44
45 // T6963C 端口定义
46 #define LCMDW XBYTE[0xfc00] // 数据口
47 #define LCMCW XBYTE[0xfd00] // 命令口
48
49
50 // T6963C 命令定义
51 #define LC_CUR_POS 0x21 // 光标位置设置
52 #define LC_CGR_POS 0x22 // CGRAM偏置地址设置
53 #define LC_ADD_POS 0x24 // 地址指针位置
54 #define LC_TXT_STP 0x40 // 文本区首址
55 #define LC_TXT_WID 0x41 // 文本区宽度
C51 COMPILER V7.01 T6963B 03/31/2005 21:39:13 PAGE 2
56 #define LC_GRH_STP 0x42 // 图形区首址
57 #define LC_GRH_WID 0x43 // 图形区宽度
58 #define LC_MOD_OR 0x80 // 显示方式:逻辑“或”
59 #define LC_MOD_XOR 0x81 // 显示方式:逻辑“异或”
60 #define LC_MOD_AND 0x82 // 显示方式:逻辑“与”
61 #define LC_MOD_TCH 0x83 // 显示方式:文本特征
62 #define LC_DIS_SW 0x90 // 显示开关:D0=1/0:光标闪烁启用/禁用;
63 // D1=1/0:光标显示启用/禁用;
64 // D2=1/0:文本显示启用/禁用;
65 // D3=1/0:图形显示启用/禁用;
66 #define LC_CUR_SHP 0xA0 // 光标形状选择:0xA0-0xA7表示光标占的行数
67 #define LC_AUT_WR 0xB0 // 自动写设置
68 #define LC_AUT_RD 0xB1 // 自动读设置
69 #define LC_AUT_OVR 0xB2 // 自动读/写结束
70 #define LC_INC_WR 0xC0 // 数据一次写,地址加1
71 #define LC_INC_RD 0xC1 // 数据一次读,地址加1
72 #define LC_DEC_WR 0xC2 // 数据一次写,地址减1
73 #define LC_DEC_RD 0xC3 // 数据一次读,地址减1
74 #define LC_NOC_WR 0xC4 // 数据一次写,地址不变
75 #define LC_NOC_RD 0xC5 // 数据一次读,地址不变
76 #define LC_SCN_RD 0xE0 // 屏读
77 #define LC_SCN_CP 0xE8 // 屏拷贝
78 #define LC_BIT_OP 0xF0 // 位操作:
79 // D0-D2:定义D0-D7位;D3:1置位;0:清除
80
81 //uchar const uPowArr[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
82 uchar code turnf[8] = {7,6,5,4,3,2,1,0};
83 uchar gCurRow,gCurCol; // 当前行、列存储,行高16点,列宽8点
84 uchar black = 0;
85 /* 取当前行数据 */
86 uchar fnGetRow(void)
87 {
88 1 return gCurRow;
89 1 }
90
91 /* 取当前列数据 */
92 uchar fnGetCol(void)
93 {
94 1 return gCurCol;
95 1 }
96
97 /************************************************/
98 /* 状态位STA1,STA0判断(读写指令和读写数据) */
99 /* 在读写数据或者写入命令前必须保证均为1 */
100 /************************************************/
101 uchar fnSTA01(void)
102 {
103 1 uchar i;
104 1
105 1 for(i=N_MAX_WAIT;i>0;i--)
106 1 {
107 2 if((LCMCW & 0x03) == 0x03) // 读取状态
108 2 break;
109 2 }
110 1 return i; // 若返回零,说明错误
111 1 }
112 #if 0
/********************************************************/
/*检查STA2,如果 STA2=1 为自动读状态 */
/********************************************************/
uchar fnSTA2(void)
{
C51 COMPILER V7.01 T6963B 03/31/2005 21:39:13 PAGE 3
uchar i;
for(i=N_MAX_WAIT;i>0;i--)
{
if((LCMCW & 0x04) == 0x04)
break;
}
return i; // 若返回零,说明错误
}
#endif
128 /********************************************************/
129 /* 状态位STA3判断(STA3 = 1 数据自动写状态) */
130 /********************************************************/
131 uchar fnSTA3(void)
132 {
133 1 uchar i;
134 1
135 1 for(i=N_MAX_WAIT;i>0;i--)
136 1 {
137 2 if((LCMCW & 0x08) == 0x08)
138 2 break;
139 2 }
140 1 return i; // 若返回零,说明错误
141 1 }
142 #if 0
/********************************************************/
/* 状态位STA6判断(STA6 =1 屏读/屏拷贝状态) */
/********************************************************/
uchar fnSTA6(void)
{
uchar i;
for(i=N_MAX_WAIT;i>0;i--)
{
if((LCMCW & 0x40) == 0x40)
break;
}
return i; // 若返回零,说明错误
}
#endif
158 /********************************************************/
159 /* 写双参数的指令 */
160 /********************************************************/
161 uchar fnPR1(uchar uCmd,uchar uPar1,uchar uPar2)
162 {
163 1 if(fnSTA01() == 0)
164 1 return 1;
165 1 LCMDW = uPar1;
166 1 if(fnSTA01() == 0)
167 1 return 2;
168 1 LCMDW = uPar2;
169 1 if(fnSTA01() == 0)
170 1 return 3;
171 1 LCMCW = uCmd;
172 1 return 0; // 返回0成功
173 1 }
174 #if 0
/********************************************************/
/* 写单参数的指令 */
/********************************************************/
uchar fnPR11(uchar uCmd,uchar uPar1)
{
C51 COMPILER V7.01 T6963B 03/31/2005 21:39:13 PAGE 4
if(fnSTA01() == 0)
return 1;
LCMDW = uPar1;
if(fnSTA01() == 0)
return 2;
LCMCW = uCmd;
return 0; // 返回0成功
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -