📄 lcd12864_driver.lst
字号:
C51 COMPILER V8.02 LCD12864_DRIVER 07/09/2007 08:18:06 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD12864_DRIVER
OBJECT MODULE PLACED IN LCD12864_Driver.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD12864_Driver.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <c8051f020.h>
2 #include <math.h>
3 #include "delay.h"
4 #include "LCD12864_Driver.h"
5
6 #define uchar unsigned char
7 #define uint unsigned int
8
9 //初始化-----------------------------
10 void Lcd_Ini(void)
11 {
12 1 RST=1;
13 1 Delay(100,100);
14 1 RST=0; //复位
15 1 Delay(100,100);
16 1 RST=1;
17 1 Delay(100,100);
18 1
19 1 WR=1;RD=1;CD=1;
20 1
21 1
22 1 // Clr_Char_Area() ;
23 1 //Clr_Graph_Area();
24 1
25 1 Send_cmd1(0x80); //设置显示方式: CGROM方式 文本与图形或显示
26 1 Send_cmd3(0x00,0x00,0x21); //光标位置
27 1 Send_cmd1(0xa7); //设置光标形状 cursor size 8x8
-
-
-
-
-
-
-
-
-
28 1
29 1
30 1 Send_cmd3(0x00,0x00,0x40); //文本区首地址设置
31 1 Send_cmd3(0x10,0x00,0x41); //字符宽度:16*16,可设置
32 1 Send_cmd3(0x00,0x04,0x42); //图形区首址设置
33 1 Send_cmd3(0x10,0x00,0x43); //宽度
34 1
35 1 Send_cmd1(0x94); //设置显示开关:启用文本显示 禁止图形显示
36 1 // Send_cmd1(0x98); //设置显示开关:禁止文本显示启用图形显示 /****显示汉字和动画时选用****/
37 1
38 1 Send_cmd1(0x80); //设置显示开关:启用文本显示 启用图形显示
39 1 //Send_cmd1(0x90); //设置显示开关:禁止文本显示 禁止图形显示
40 1 }
41
42
43 void ShowChar(unsigned char lin,unsigned char column, uchar str[])
44 {
45 1 unsigned int i; //定义字符显示个数变量
46 1 unsigned int StartAddr; //起始地址变量
C51 COMPILER V8.02 LCD12864_DRIVER 07/09/2007 08:18:06 PAGE 2
47 1 uchar temp;
48 1
49 1
50 1 StartAddr=lin*16+column; //定位起始行
51 1 Send_cmd3((unsigned char)StartAddr,0x00, 0x24); //set address
52 1
53 1 Send_cmd1(0xb0);//自动写方式
54 1 for(i=0;str[i]!=0;i++)
55 1 {
56 2 temp = str[i] - 0x20;
57 2 Send_data(temp); //写字符
58 2 }
59 1 Send_cmd1(0xb2);//退出自动写
60 1
61 1 }
62
63
64
65
66 void ShowHZ(unsigned char lin,unsigned char column,uchar HZTable[],uchar HZ_num )
67 { unsigned char i,j; //i为汉字点阵字节数变量,j为显示汉字个数变量
68 1 unsigned int StartAddr; //定义起始地址变量
69 1 unsigned int Abos_Addr;
70 1 unsigned char tcolumn; //每个汉字显示的开始列地址
71 1
72 1 // StartAddr = 0x0400; // Send_cmd3(0x00,0x04,0x40); 与文本区首地址设置保持一致
73 1
74 1 for(j=0;j<HZ_num;j++)
75 1 { tcolumn=column+j*2;
76 2 StartAddr=lin*16 + tcolumn; //定位起始行
77 2
78 2 for(i=0;i<32;i++) //一个汉字共32字节,一次显示两字节,共显示16次
79 2 { Abos_Addr=StartAddr + 0x0400;
80 3 Send_cmd3((unsigned char)(Abos_Addr),(unsigned char)(Abos_Addr>>8), 0x24);
81 3 Send_cmd2( HZTable[j*32+i], 0xc0); //左半部 地址加一
82 3 Send_cmd2( HZTable[j*32+i+1], 0xc4); //右半部 字模地址加一
83 3 i++;
84 3 StartAddr=StartAddr + 16; //下一字节先地址
85 3 }
86 2 }
87 1
88 1 }
89
90
91 void ShowPicture(unsigned char Startline,unsigned char Startcolumn,unsigned char LineWidth,unsigned char C
-olumnWidth,unsigned char code * address,unsigned int StartAddr)
92 { unsigned char i,j; //i为列宽变量,j为行宽变量
93 1 unsigned int StartAddr0;//定义起始地址变量
94 1
95 1 // StartAddr = 0x0400; // Send_cmd3(0x00,0x04,0x40); 与文本区首地址设置保持一致
96 1 StartAddr0=StartAddr + Startline*16 + Startcolumn; //定位起始位置
97 1
98 1 for(i=0;i<ColumnWidth;i++) //汉字为16*16点阵,ColumnWidth为16,以像数计算
99 1 { Send_cmd3( (unsigned char)(StartAddr0), (unsigned char)(StartAddr0>>8),0x24); //set address
100 2
101 2 for(j=0;j<LineWidth;j++) //LineWidth为2,以字节计算
102 2 { //Send_cmd2( *(address+i*LineWidth+ j ), 0xc0); //写数据,地址增一
103 3 Send_cmd2( *(address+i*LineWidth+ j ), 0xc0); //写数据,地址增一
104 3 }
105 2 StartAddr0=StartAddr0 + 16; //图片下一个字节的地址
106 2 }
107 1 }
C51 COMPILER V8.02 LCD12864_DRIVER 07/09/2007 08:18:06 PAGE 3
108
109
110 //清理字符区-----------------------------------
111
112 void Clr_Char_Area(void)
113 {
114 1 uint i;
115 1 Send_cmd3(0x00,0x00,0x24);
116 1 Send_cmd1(0xb0); //自动写设置
117 1 for (i=0;i<128;i++)
118 1 {
119 2 // Autowr_check();
120 2 Send_data(0x00);
121 2
122 2 }
123 1 Send_cmd1(0xb3); //自动读/写结束
124 1
125 1 Send_cmd3(0x00,0x00,0x24);
126 1 }
127
128
129 //=========================================
130 //清理图形区
131 void Clr_Graph_Area(void)
132 {
133 1 uint i;
134 1 Send_cmd3(0x00,0x04,0x24); //地址指针位置
135 1 Send_cmd1(0xb0); //自动读设置
136 1 for (i=0;i<1024;i++)
137 1 {
138 2 // Autowr_check();
139 2 Send_data(0x00);
140 2
141 2 }
142 1 Send_cmd1(0xb3); //自动读/写结束
143 1 Send_cmd3(0x00,0x04,0x24);
144 1 }
145
146
147 void Locat_Dot(uchar x_loc, uchar y_loc)
148 {
149 1 uint StartAddr;//定义起始地址变量 volatile
150 1 uchar dot_data,ori_data, move;
151 1 uchar Line,Column;
152 1
153 1 y_loc = 63 - y_loc ;
154 1 Column = x_loc/8;
155 1 Line = y_loc;
156 1
157 1 StartAddr = 0x0400; // Send_cmd3(0x00,0x04,0x40); 与文本区首地址设置保持一致
158 1 StartAddr =StartAddr + Line*16 + Column;
159 1 Send_cmd3( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8),0x24);
160 1
161 1 Send_cmd1(0xc5); // 数据读,地址不变
162 1 Delay(5,4); // 本来读端口数据时,要把端口配为漏极,且向端口写“1”Data_Port=0XFF; 但在函数Sen
-d_cmd(0xc5);里面已经包括了该句
163 1 CD=0;CE=0;RD=0;WR=1;
164 1 ori_data=Data_Port;
165 1 Delay(10,5);
166 1 CD=1;RD=1;CE=1;
167 1
168 1 move = x_loc%8; dot_data = 0x80>>move;
C51 COMPILER V8.02 LCD12864_DRIVER 07/09/2007 08:18:06 PAGE 4
169 1 dot_data = dot_data | ori_data;
170 1 Send_cmd2(dot_data, 0xc4); // 地址不变
171 1
172 1 }
173
174
175 void Line(uchar x1,uchar y1,uchar x2,uchar y2)
176 { char i;
177 1 //y1 = 64 - y1 ;
178 1 //y2 = 64 - y2 ;
179 1
180 1 char x,y;
181 1 float y_add;
182 1 x=x2-x1;
183 1 y=y2-y1;
184 1 if(x==0)
185 1 {
186 2 if(y>0)
187 2 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -