📄 ts12864.lst
字号:
C51 COMPILER V8.02 TS12864 07/26/2008 19:16:15 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE TS12864
OBJECT MODULE PLACED IN ts12864.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe ts12864.c DB OE BR
line level source
1 /*****************************************************************
2 * Copyright (C) 2008, 华中科技大学电工电子科技创新中心
3 * All Rights Reserved.
4 *
5 * 文件名: TS12864A-1图形点阵LCD驱动程序(C8051版)
6 * 文件描述: 此版本专门用于《智能教学楼能源管理系统》的液晶驱动。
7 * 资源占用: 8根数据线 5根控制线
8
9 * 当前版本: 1.0
10 * 作者: 梁威魄(lwpo2008@yahoo.com.cn)
11 * 完成日期: 2008年3月20日 星期四
12 *****************************************************************/
13
14 /*****************************************************************
15 * 头文件声明
16 *****************************************************************/
17
18 #include "TS12864.h"
19
20 /*****************************************************************
21 函数功能:对LCD的忙状态进行检测,对TS12864A-1来说不是必要
22 参数说明:空
23 ******************************************************************/
24 void LcdBusy(void)
25 {
26 1 unsigned char temp;
27 1 temp=SFRPAGE;
28 1 SFRPAGE= CONFIG_PAGE;
29 1
30 1 data_ora=0xff; //清除端口上数据
31 1 p_rs=0; //进入忙状态
32 1 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
33 1 p_rw=1; //进入检测忙状态
34 1 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
35 1 p_e=1;
36 1 _nop_(); _nop_(); _nop_();_nop_(); _nop_();
37 1 p_bf=1;
38 1 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
39 1 p_bf=p_res=1;
40 1 while(p_bf||p_res==1); //检测忙状态和复位状态
41 1 p_e=0;
42 1 _nop_(); _nop_();
43 1
44 1 SFRPAGE=temp;
45 1 }
46
47 /*****************************************************************
48 函数功能:写数据。此函数所有写入液晶的函数均使用此函数。
49 参数说明:command:DATA时写数据,COMM时写指令;data_comm内容
50 ******************************************************************/
51 void WriteLcd(unsigned command,unsigned data_comm)
52 {
53 1 unsigned char temp;
54 1 temp=SFRPAGE;
55 1 SFRPAGE= CONFIG_PAGE;
C51 COMPILER V8.02 TS12864 07/26/2008 19:16:15 PAGE 2
56 1
57 1 LcdBusy(); //检测忙命令
58 1 p_rw=0; //由于是写数据或者指令,所以RW为0;
59 1 p_rs=command; //给定写入命令,数据(DATA)或者指令(COMM)
60 1 data_ora=data_comm; //给写入内容
61 1 p_e=1; //给下降沿
62 1 _nop_(); _nop_(); _nop_(); _nop_();
63 1 _nop_(); _nop_(); _nop_(); _nop_();
64 1 _nop_(); _nop_(); _nop_(); _nop_();
65 1 p_e=0; //锁存数据
66 1 _nop_(); _nop_(); _nop_(); _nop_();
67 1 _nop_(); _nop_(); _nop_(); _nop_();
68 1 _nop_(); _nop_(); _nop_(); _nop_();
69 1
70 1 SFRPAGE=temp;
71 1 }
72 /*****************************************************************
73 函数功能:读数据。此函数所有读取液晶的函数均使用此函数。
74 参数说明:返回值为8位无符号字符
75 ******************************************************************/
76 /*unsigned char ReadLcd(void)
77 {
78 unsigned char temp;
79 temp=SFRPAGE;
80 SFRPAGE= CONFIG_PAGE;
81
82 unsigned char readData;
83 LcdBusy ();
84 p_rw=1; _nop_(); _nop_(); _nop_(); _nop_();
85
86 p_rs=1; _nop_(); _nop_(); _nop_(); _nop_();
87
88 p_e=1;
89 _nop_(); _nop_(); _nop_(); _nop_();
90 _nop_(); _nop_(); _nop_(); _nop_();
91 _nop_(); _nop_(); _nop_(); _nop_();
92
93 readData=data_ora; //读取数据
94
95 p_e=0;
96 _nop_(); _nop_(); _nop_(); _nop_();
97 _nop_(); _nop_(); _nop_(); _nop_();
98 _nop_(); _nop_(); _nop_(); _nop_();
99
100 SFRPAGE=temp;
101
102 return readData;
103 }*/
104 /*****************************************************************
105 函数功能:设置x,y的位置。从此位置开始显示
106 参数说明:x(行,取值0~7),y(列,取值0~15)为定位坐标
107 ******************************************************************/
108 void SetXY(unsigned char x,unsigned char y)
109 {
110 1 unsigned char temp;
111 1 temp=SFRPAGE;
112 1 SFRPAGE= CONFIG_PAGE;
113 1
114 1 if (x>=64) //如果显示列数超过液晶左半屏幕
115 1 { //支持的行数
116 2 p_csa=0; //则,
117 2 p_csb=1; //选择右半屏幕
C51 COMPILER V8.02 TS12864 07/26/2008 19:16:15 PAGE 3
118 2 }
119 1 else //否则
120 1 { //就
121 2 p_csa=1; //选择左半屏幕
122 2 p_csb=0;
123 2 }
124 1 WriteLcd(COMM,LOCATION_X | x); //设置x的位置
125 1
126 1 WriteLcd(COMM,LOCATION_Y | y); //设置y的位置
127 1
128 1 data_ora=0xff; //清除端口上的数据
129 1
130 1 SFRPAGE=temp;
131 1 }
132
133 /*****************************************************************
134 函数功能:数据显示。
135 参数说明:x(行,取值0~127),y(列,取值0~7)为定位坐标。dd为显示点阵
136 ******************************************************************/
137 void Display(unsigned char x,unsigned char y,unsigned char dd)
138 {
139 1 unsigned char temp;
140 1 temp=SFRPAGE;
141 1 SFRPAGE= CONFIG_PAGE;
142 1
143 1 SetXY(x,y); //设置显示位置
144 1 WriteLcd(DATA,dd); //写入数据
145 1 data_ora=0xff; //清除端口上的数据
146 1
147 1 SFRPAGE=temp;
148 1 }
149
150 /*****************************************************************
151 函数功能:清屏幕
152 参数说明:LCD_CLEAR 0x00 涂白屏幕指令;LCD_BLACK 0xFF 涂黑屏幕指令
153 ******************************************************************/
154 void ClearLcd(unsigned char state)
155 {
156 1 unsigned char i,j;
157 1 for(j=0;j<128;j++) //进行列数选择
158 1 {
159 2 for (i=0;i<8;i++) //进行行数选择
160 2 {
161 3 Display(j,i,state); //将选择的点清除。
162 3 }
163 2 }
164 1 }
165
166 /*****************************************************************
167 函数功能:画矩形,可以用来显示进度条
168 参数说明:x:y:矩形起始坐标;row:line:矩形结束坐标;state表示显示状态
169 ******************************************************************/
170 /*void Rect(unsigned char x,unsigned char y,unsigned char row,unsigned char line,unsigned char state)
171 {
172 unsigned char i,j;
173 for(i=x;i<row;i++)
174 {
175 for(j=y;j<line;j++)
176 {
177 Display(i,j,state);
178 }
179 }
C51 COMPILER V8.02 TS12864 07/26/2008 19:16:15 PAGE 4
180 }*/
181 /*****************************************************************
182 函数功能:显示任意一点
183 参数说明:x:y:点阵坐标x:0~128;y:0~64
184 ******************************************************************/
185 /*void ShowDot(unsigned char x,unsigned char y)
186 {
187 unsigned char page,ram,dot=0x01;
188
189 page=y/8;
190 SetXY(x,page);
191 y%=8;
192 ram=ReadLcd();
193 ram=ReadLcd(); //datasheet要求读两次
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -