📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 01/21/2008 21:07:40 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /********************************************
2 File: lcd.h
3 Description: LCD12864 驱动 ,采用串行方式,
4 Author: [email]kassey@126.com[/email] July,22th,2005
5 ********************************************/
6
7 #include<reg52.h>
8 #include <intrins.h>
9 sbit SCLK =P1^3 ; //E
10 sbit SID =P1^4; //RW
11 sbit RST =P1^2; // low active 可以不用,也就是说,只用两条线和LCD通信
12 #define ROW1 0x80
13 #define ROW2 0x90
14 #define ROW3 0x88
15 #define ROW4 0x98
16 #define uchar unsigned char
17 #define uint unsigned int
18 unsigned char code AC_TABLE[]={
19 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, //第一行汉字位置
20 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, //第二行汉字位置
21 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, //第三行汉字位置
22 0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, //第四行汉字位置
23 };
24
25
26 /*****************************************
27 Fucntion: delay10US(char x)
28 Description: delay for 10 us
29 Parameter: x
30 Author: [email]kassey@126.com[/email]
31 Date: July,7th,2005
32 *****************************************/
33
34
35 void delay10US(uchar x)
36 {
37 1 uchar k;
38 1 for(k=0;k<x;k++);
39 1
40 1 }
41
42 /*****************************************
43 Fucntion: delay1MS(char x)
44 Description: delay for 10 us
45 Parameter: x delay for 1MS
46 Author: [email]kassey@126.com[/email]
47 Date: July,7th,2005
48 *****************************************/
49
50
51 void delay1MS(uchar x)
52 {
53 1 uchar k,j;
54 1 x=x<<1;
55 1 for(k=0;k<x;k++)
C51 COMPILER V7.06 MAIN 01/21/2008 21:07:40 PAGE 2
56 1 for(j=0;j<255;j++)_nop_();
57 1
58 1
59 1 }
60
61 void SendByteLCD(uchar WLCDData)
62 {
63 1 uchar i;
64 1 for(i=0;i<8;i++)
65 1 {
66 2 if((WLCDData<<i)&0x80)SID=1;
67 2 else SID=0;
68 2 SCLK=0; ;
69 2 SCLK=1 ;
70 2 }
71 1 }
72
73
74 SPIWR(uchar Wdata,uchar RS)
75 {
76 1 SendByteLCD(0xf8+(RS<<1));
77 1 SendByteLCD(Wdata&0xf0);
78 1 SendByteLCD((Wdata<<4)&0xf0);
79 1
80 1 }
81 void SendCMD(uchar CMD)
82 {
83 1 SPIWR(CMD,0);
84 1 delay10US(90);//8155来模拟串行通信,所以,加上8155的延时,
85 1
86 1 }
87
88
89
90
91 void SendData(uchar Data)
92 {
93 1
94 1 SPIWR(Data,1);
95 1 }
96
97 void LCDInit()
98 {
99 1
100 1 RST=0;
101 1 delay1MS(50);
102 1 RST=1;
103 1
104 1
105 1 SendCMD(0x30);//功能设置,一次送8位数据,基本指令集
106 1 SendCMD(0x0C);//0000,1100 整体显示,游标off,游标位置off
107 1 SendCMD(0x01);//0000,0001 清DDRAM
108 1 SendCMD(0x02);//0000,0010 DDRAM地址归位
109 1 SendCMD(0x80);//1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC//
110 1 SendCMD(0x04);//点设定,显示字符/光标从左到右移位,DDRAM地址加 一//
111 1 SendCMD(0x0C);//显示设定,开显示,显示光标,当前显示位反白闪动
112 1
113 1
114 1 }
115
116
117
C51 COMPILER V7.06 MAIN 01/21/2008 21:07:40 PAGE 3
118 /*****************************
119 清文本区
120 *****************************/
121 void LcmClearTXT( void )
122 {
123 1 unsigned char i;
124 1 SendCMD(0x30); //8BitMCU,基本指令集合
125 1 SendCMD(0x80); //AC归起始位
126 1 for(i=0;i<64;i++)
127 1 SendData(0x20);
128 1 }
129
130 /*****************************
131 发送字符串
132 *****************************/
133 void PutStr(unsigned char row,unsigned char col,unsigned char *puts)
134 {
135 1 SendCMD(0x30); //8BitMCU,基本指令集合
136 1 SendCMD(AC_TABLE[8*row+col]); //起始位置
137 1 while(*puts != '\0') //判断字符串是否显示完毕
138 1 {
139 2 if(col==8) //判断换行
140 2 { //若不判断,则自动从第一行到第三行
141 3 col=0;
142 3 row++;
143 3 }
144 2 if(row==4) row=0; //一屏显示完,回到屏左上角
145 2 SendCMD(AC_TABLE[8*row+col]);
146 2 SendData(*puts); //一个汉字要写两次
147 2 puts++;
148 2 SendData(*puts);
149 2 puts++;
150 2 col++;
151 2 }
152 1 }
153
154 /*****************************
155 绘图
156 *****************************/
157 void PutBMP(unsigned char *puts)
158 {
159 1 unsigned int x=0;
160 1 unsigned char i,j;
161 1 SendCMD(0x34); //8Bit扩充指令集,即使是36H也要写两次
162 1 SendCMD(0x36); //绘图ON,基本指令集里面36H不能开绘图
163 1 for(i=0;i<32;i++) //12864实际为256x32
164 1 {
165 2 SendCMD(0x80|i); //行位置
166 2 SendCMD(0x80); //列位置
167 2 for(j=0;j<32;j++) //256/8=32 byte
168 2 { //列位置每行自动增加
169 3 SendData(puts[x]);
170 3 x++;
171 3 }
172 2 }
173 1 }
174
175
176
177
178 void ClearScreen()
179 { uchar i,j,x,y;
C51 COMPILER V7.06 MAIN 01/21/2008 21:07:40 PAGE 4
180 1 LCDInit();
181 1 SendCMD(0x3e);// ;RE=1 扩展指令选择 G=1 开图形显示
182 1 x=0x80;
183 1 y=0x80;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -