📄 lcd_driver.lst
字号:
C51 COMPILER V7.20 LCD_DRIVER 10/25/2005 20:21:40 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE LCD_DRIVER
OBJECT MODULE PLACED IN Lcd_Driver.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Lcd_Driver.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /***********************************************
2 *LCD调试程序*
3 Lcd_Driver.c 160128 T6963C
4 ***********************************************/
5
6 /*头文件*/
7 #include <C8051F000.h>
8 #include <absacc.h>
9
10 #include <intrins.h>
11
12 /*typedef*/
13 typedef unsigned int uint;
14 typedef unsigned char uchar;
15 typedef unsigned long ulong;
16
17 #define LCD_DataPort P2
18
19 // LCD128*64 I/O 信号管脚
20 sbit CD = P0^7; // 指令\数据 选择 高选择指令,低选择数据
21 sbit CE = P0^3; // 片选信号,低电平有效
22 sbit RD = P0^4; // 读选择 ,低电平有效
23 sbit WR = P1^0; // 写信号,低有效
24
25 //横向取模,字节不倒序
26 const unsigned char code cctab[128]={
27 /*-- 文字: 电 --*/
28 /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
29 0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,
30 0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x02,0x01,0x02,0x00,0xFE,0x00,0x00,
31
32 /*-- 文字: 压 --*/
33 /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
34 0x00,0x00,0x3F,0xFE,0x20,0x00,0x20,0x80,0x20,0x80,0x20,0x88,0x2F,0xFC,0x20,0x80,
35 0x20,0xA0,0x20,0x90,0x20,0x98,0x40,0x90,0x40,0x80,0xBF,0xFE,0x00,0x00,0x00,0x00,
36
37 /*-- 文字: 测 --*/
38 /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
39 0x40,0x02,0x27,0xC2,0x24,0x42,0x84,0x52,0x45,0x52,0x55,0x52,0x15,0x52,0x25,0x52,
40 0x25,0x52,0x25,0x52,0xC5,0x52,0x41,0x02,0x42,0x82,0x42,0x42,0x44,0x4A,0x48,0x04,
41
42 /*-- 文字: 试 --*/
43 /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
44 0x00,0x20,0x40,0x28,0x20,0x24,0x30,0x24,0x27,0xFE,0x00,0x20,0xE0,0x20,0x27,0xE0,
45 0x21,0x20,0x21,0x10,0x21,0x10,0x21,0x0A,0x29,0xCA,0x36,0x06,0x20,0x02,0x00,0x00,
46
47
48 };
49
50 /******************初始化子程序****************/
51 /*时钟初始化*/
52 void SYSCLK_Init (void)
53 {
54 1 //晶振配置,采用内部晶振,默认为16MHz,八分频为2MHz
55 1 //允许时钟丢失监测器
C51 COMPILER V7.20 LCD_DRIVER 10/25/2005 20:21:40 PAGE 2
56 1 // OSCICN = 0x94;
57 1 // OSCXCN = 0x00;
58 1
59 1 //外部晶振
60 1 int i; // delay counter
61 1 OSCXCN = 0x67; // start external oscillator with
62 1 // 18.432MHz crystal
63 1 for (i=0; i < 256; i++) ; // Wait for osc. to start up
64 1 while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle
65 1 OSCICN = 0x88; // select external oscillator as SYSCLK
66 1 // source and enable missing clock
67 1 // detector
68 1 }
69
70 /*端口初始化*/
71 void PORT_Init (void)
72 {
73 1 //交叉开关使能,但没有进行外围设备配置
74 1 XBR0 = 0x00;
75 1 XBR1 = 0x00;
76 1 XBR2 = 0x40;
77 1
78 1
79 1 //均配置为开漏输出
80 1 PRT0CF |= 0x00;
81 1 PRT1CF |= 0x00;
82 1 PRT2CF |= 0x00;
83 1 PRT3CF |= 0x00;
84 1 }
85
86 /*****************LCD子程序***********************/
87
88 //读取LCD状态字
89 uchar readstate(void)
90 {
91 1 uchar lcd_state;
92 1 LCD_DataPort=0xff; // 读取总线端口物理电平
93 1 CD=1;
94 1 _nop_();
95 1 RD=0;
96 1 _nop_();
97 1 lcd_state=LCD_DataPort;
98 1 _nop_();
99 1 _nop_();
100 1 RD=1;
101 1
102 1 return lcd_state;
103 1 /*
104 1 DDRA=0x00;
105 1 DDRC|=(1<<3);
106 1 DDRE|=(1<<6);
107 1 PORTC|=(1<<3); // C/D=1
108 1 PORTE&=~(1<<6); // /RD=0
109 1 lcd_state=PINA&0xff; // 读取引脚A物理电平
110 1 NOP();
111 1 NOP();
112 1 PORTE|=(1<<6); // /RD=1
113 1 return lcd_state;
114 1 */
115 1 }
116 //判断指令(数据)读写状态
117 void st01(void)
C51 COMPILER V7.20 LCD_DRIVER 10/25/2005 20:21:40 PAGE 3
118 {
119 1 while((readstate()&0x03)!=3)
120 1 ;
121 1 }
122
123 //判断数据自动读状态
124 void st2(void)
125 {
126 1 while((readstate()&0x04)!=4)
127 1 ;
128 1 }
129
130 //判断数据自动写状态
131 void st3(void)
132 {
133 1 while((readstate()&0x08)!=8)
134 1 ;
135 1 }
136
137
138 //指令写入函数
139 void writecode(uchar comd0)
140 {
141 1 st01();
142 1 LCD_DataPort=comd0;
143 1 WR=0; // /WR=0
144 1 _nop_();
145 1 _nop_();
146 1 WR=1; // /WR=1
147 1
148 1 /* st01();
149 1 DDRA=0xff; //A口方向为输出
150 1 PORTA=comd0; //送数据到A口寄存器
151 1 DDRE|=(1<<7);
152 1 PORTE&=~(1<<7); // /WR=0
153 1 NOP();
154 1 PORTE|=(1<<7); // /WR=1
155 1 */
156 1 }
157
158
159 //数据写入函数
160 void writedata(uchar onedata)
161 {
162 1 st01(); //状态判断
163 1 CD=0; //C/D=0,数据通道
164 1 _nop_();
165 1 LCD_DataPort=onedata;
166 1 WR=0; // /WR=0
167 1 _nop_();
168 1 _nop_();
169 1 WR=1; // /WR=1
170 1
171 1 /*
172 1 st01();
173 1 DDRC|=(1<<3);
174 1 PORTC&=~(1<<3); // C/D=0,数据通道
175 1 DDRA=0xff; //A口方向为输出
176 1 PORTA=onedata; //送数据到A口寄存器
177 1 DDRE|=(1<<7);
178 1 PORTE&=~(1<<7); // /WR=0
179 1 NOP();
C51 COMPILER V7.20 LCD_DRIVER 10/25/2005 20:21:40 PAGE 4
180 1 PORTE|=(1<<7); // /WR=1
181 1 */
182 1 }
183
184
185 //数据自动写入函数
186 void writeauto(uchar onedata)
187 {
188 1 st3(); //状态判断
189 1 CD=0; //C/D=0,数据通道
190 1 _nop_();
191 1 LCD_DataPort=onedata;
192 1 WR=0; // /WR=0
193 1 _nop_();
194 1 _nop_();
195 1 WR=1; // /WR=1
196 1
197 1 /*
198 1 st3();
199 1 DDRC|=(1<<3);
200 1 PORTC&=~(1<<3); // C/D=0,数据通道
201 1 DDRA=0xff; //A口方向为输出
202 1 PORTA=onedata; //送数据到A口寄存器
203 1 DDRE|=(1<<7);
204 1 PORTE&=~(1<<7); // /WR=0
205 1 NOP();
206 1 PORTE|=(1<<7); // /WR=1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -