📄 12232driver.lst
字号:
C51 COMPILER V7.09 12232DRIVER 10/07/2004 17:58:58 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE 12232DRIVER
OBJECT MODULE PLACED IN 12232DRIVER.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE 12232DRIVER.C BROWSE DEBUG OBJECTEXTEND
line level source
1
2
3 #include <reg52.h> //89C52单片机头文件
4 #include <LCD_code.h> //液晶LCD的字模文件
5 #include <intrins.h>
6
7 //功能引脚定义
8
9 sbit A = P0^7; //数据1/命令0选择
10 sbit RW = P0^6; //读1/写0
11 sbit E1 = P0^4; //片选1(Master)
12 sbit E2 = P0^5; //片选2(slave)
13 sbit LED= P0^3; //背光
14 sbit up = P0^0; //向上翻页键
15 sbit down= P0^1; //向下翻页键
16 #define data P2 //液晶并行数据
17
18
19 //液晶显示控制命令表
20 #define disp_on 0xAf //显示关闭
21 #define disp_off 0xAe //显示打开
22 #define disp_start_line 0xC0 //显示起始地址(后5位-表示0-31行)
23 #define page_addr_set 0xB8 //页地址设置(0~3)
24 #define col_addr_set 0x00 //列地址设置(0~61)
25 #define status_busy 0x80 //0=ready
26 #define modeRWite 0xEE //写模式
27 #define dynamic_driver 0xA4 //动态驱动
28 #define adc_select 0xA0 //clockwise
29 #define clk32 0xA9 //刷新时钟设置1/32
30 #define clk16 0xA8 //刷新时钟设置1/16
31 #define reset 0xE2 //软件复位
32
33 #define uchar unsigned char
34 #define uint unsigned int
35
36 //全局变量,及标志位定义
37 uchar time_counter = 0; //定时器的软件计数器
38 uchar key = 0; //键盘值
39 uchar serial_counter; //串行计数器
40
41 bit disp_flag = 0; //显示更新标志
42 uchar bdata serial_byte = 0; //串行口标志位定义字节
43 sbit Sflag = serial_byte^0; //串行接收头部标志,一下8个都定义在'serial_byte'内
44 sbit G1flag = serial_byte^1;
45 sbit Pflag = serial_byte^2;
46 sbit G2flag = serial_byte^3;
47 sbit G3flag = serial_byte^4;
48 sbit Aflag = serial_byte^5;
49 sbit DFflag = serial_byte^6;
50 sbit ENflag = serial_byte^7;
51 bit r_flag = 0;
52
53 unsigned char idata serial_buff[77]; //串行接收缓冲
54 //uchar code head[] = {'$','G','P','G','G','A',','};
55 //bit serial_flag = 0;
C51 COMPILER V7.09 12232DRIVER 10/07/2004 17:58:58 PAGE 2
56
57
58 ////液晶操作主要函数////////////////////////////////////////////////////////////
59 //void lcd_init(void)
60 //引用:lcd_init(); 说明:LCD初始化;
61 ////////////////////////////////////////////////////////////////////////////////
62 //void lcd_clr(void)
63 //引用:lcd_clr(); 说明:LCD清屏;
64 ////////////////////////////////////////////////////////////////////////////////
65
66 void lcd_init(void); //LCD初始化
67 void lcd_clr(void); //LCD清屏
68 void wait_ready(void); //等待ready
69 void draw_bmp(uchar col,uchar layer,uchar width,uchar *bmp); //点阵码显示输出
70 void ASCII2BCD(void); //ASCII码转换为BCD码
71 void logo(void); //开机画面显示
72
73 /*----------------------------------------------------------------------------
74 中断程序
75 -----------------------------------------------------------------------------*/
76 ////////////////////////////////////////////////////////////////////////////////
77 //定时器0中断函数,用于控制背光灯延时10S熄灭
78 ///////////////////////////////////////////////////////////////////////////////
79 void int_t0() interrupt 1 using 1
80 { //定时器0中断函数,用于控制背光灯延时10S熄灭
81 1 TH0 = 0x4C;
82 1 TL0 = 0x00; //重装定时器0,定时50mS
83 1 time_counter ++; //软件计数器+1;
84 1 if (time_counter == 200) //软件计数器定时到10S,关背光,定时器0,清软件计数器
85 1 {
86 2 time_counter = 0;
87 2 LED = 1;
88 2 TR0 = 0;
89 2 }
90 1 }
91
92 ////////////////////////////////////////////////////////////////////////////////
93 //串行口中断函数,用于语句'$GPGGA'判断和此语句的接收
94 ///////////////////////////////////////////////////////////////////////////////
95
96
97 void serial() interrupt 4 using 2
98 {
99 1 uchar pp;
100 1 RI=0;
101 1 pp=SBUF;
102 1 if(ENflag==1) //串口接收完毕,可以用来显示,清标志位重新开始
103 1 {
104 2 disp_flag=1;
105 2 serial_byte = 0;
106 2 }
107 1 else if(DFflag==1) //'$GPGGA'头判断完毕,开始接收$GPGGA,语句的数据
108 1 {
109 2 if(pp==42)
110 2 ENflag=1; //等待收到'*'结束接收
111 2 else
112 2 {
113 3 serial_buff[serial_counter]=pp; //没收到'*',继续接收,数据放入串口缓冲
114 3 serial_counter++;
115 3 }
116 2 }
117 1 else if(Aflag==1) //第六个为'A',判断第七个是不是','
C51 COMPILER V7.09 12232DRIVER 10/07/2004 17:58:58 PAGE 3
118 1 {
119 2 if(pp==44)
120 2 DFflag=1; //第七个个是','开始接收$GPGGA,语句的数据
121 2 else
122 2 serial_byte = 0; //不是',',清标志位
123 2 }
124 1 else if(G3flag==1) //第五个为'G',判断第六个是不是'A'
125 1 {
126 2 if(pp==65)
127 2 Aflag=1; //第六个是'A'判断下一个是不是','
128 2 else
129 2 serial_byte = 0; //不是'A',清标志位
130 2 }
131 1 else if(G2flag==1) //第四个为'G',判断第五个是不是'G'
132 1 {
133 2 if(pp==71)
134 2 G3flag=1; //第五个是'G'判断下一个是不是'A'
135 2 else
136 2 serial_byte = 0; //不是'G',清标志位
137 2 }
138 1 else if(Pflag==1) //第三个为'P',判断第四个是不是'G'
139 1 {
140 2 if(pp==71)
141 2 G2flag=1; //第四个是'G'判断下一个是不是'G'
142 2 else
143 2 serial_byte = 0; //不是'G',清标志位
144 2 }
145 1 else if(G1flag==1) //第二个为'G',判断第三个是不是'P'
146 1 {
147 2 if(pp==80)
148 2 Pflag=1; //第三个是'P'判断下一个是不是'G'
149 2 else
150 2 serial_byte = 0; //不是'P',清标志位
151 2 }
152 1 else if(Sflag==1) //第一个为'$',判断第二个是不是'G'
153 1 {
154 2 if(pp==71)
155 2 G1flag=1; //第二个是'G'判断下一个是不是'P'
156 2 else
157 2 serial_byte = 0; //不是'G',清标志位
158 2 }
159 1 else if(pp==0x24) //判断第一个是不是$
160 1 {
161 2 Sflag=1; //第一个为$,判断下一个是不是G
162 2 serial_counter=0; //串行计数器清零
163 2 }
164 1 }
165
166
167 /*
168
169 void serial() interrupt 4 using 2
170 {
171 uchar i,buff;
172 RI = 0;
173 buff = SBUF;
174 if(serial_flag == 1)
175 {
176 serial_buff[serial_counter] = buff;
177 serial_counter ++;
178 if(serial_counter > 37)
179 {
C51 COMPILER V7.09 12232DRIVER 10/07/2004 17:58:58 PAGE 4
180 serial_flag = 0;
181 serial_counter = 0;
182 for(i=0;i>7;i++)
183 {
184 if(head[i] == serial_buff[i])
185 {
186 disp_flag = 1;
187 }
188 else
189 {
190 disp_flag = 0;
191 i = 8;
192 }
193
194 }
195
196 }
197
198 }
199 else
200 {
201 if(SBUF == '$')
202 {
203 serial_buff[0] = buff;
204 serial_flag = 1;
205 serial_counter ++;
206 }
207 else
208 {
209 serial_flag = 0;
210 serial_counter = 0;
211
212 }
213 }
214 }
215 */
216
217
218 ////////////////////////////////////////////////////////////////////////////////
219 //调用方式:void send_mi(uchar instuction)
220 //函数说明:发指令instruction到主窗口(内函数,私有,用户不能直接调用)
221 ////////////////////////////////////////////////////////////////////////////////
222 void send_mi(uchar instruction)
223 {
224 1 E2 = 0; //关Slaver
225 1 E1 = 1; //开Master
226 1 wait_ready(); //判断忙
227 1 A = 0; //指令
228 1 RW = 0; //写触发
229 1 data = instruction; //指令码
230 1 E1 = 0; //关Master
231 1 }
232
233 ////////////////////////////////////////////////////////////////////////////////
234 //调用方式:void OutMD(uchar i)
235 //函数说明:发数据data到主窗口(内函数,私有,用户不能直接调用)
236 ////////////////////////////////////////////////////////////////////////////////
237 void send_md(uchar c)
238 {
239 1 E2 = 0; //关Slaver
240 1 E1 = 1; //开Master
241 1 wait_ready(); //判断忙
C51 COMPILER V7.09 12232DRIVER 10/07/2004 17:58:58 PAGE 5
242 1 A = 1; //数据
243 1 RW = 0; //写触发
244 1 data = c; //数据
245 1 E1 = 0; //关Master
246 1 }
247
248 ////////////////////////////////////////////////////////////////////////////////
249 //调用方式:void send_si(uchar instruction)
250 //函数说明:发指令instruction到从窗口(内函数,私有,用户不能直接调用)
251 ////////////////////////////////////////////////////////////////////////////////
252 void send_si(uchar instruction)
253 {
254 1 E1 = 0; //关Master
255 1 E2 = 1; //开Slaver
256 1 wait_ready(); //判断忙
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -