📄 lcd.lst
字号:
C51 COMPILER V8.02 LCD 05/20/2008 10:43:29 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN Lcd.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE src\Lcd.c BROWSE DEBUG OBJECTEXTEND PRINT(.\Lcd.lst) OBJECT(Lcd.obj)
line level source
1 #include "reg5410.h"
2
3
4
5 sbit CS =P1^2;
6 sbit SID=P1^3;
7 sbit SCLK=P1^4;
8
9 void delay(unsigned int j)
10 {
11 1 unsigned char i;
12 1 do{
13 2 for(i=0;i<100;i++);
14 2 }while(j--);
15 1 }
16
17 void send_command(unsigned char command_data)
18 {
19 1 unsigned char i;
20 1 unsigned char i_data,temp_data1,temp_data2;
21 1
22 1 i_data=0xf8;
23 1 delay(10);
24 1 CS=1;
25 1 SCLK=0;
26 1 for(i=0;i<8;i++)
27 1 {
28 2 SID=(bit)(i_data&0x80);
29 2 SCLK=0;
30 2 SCLK=1;
31 2 i_data=i_data<<1;
32 2 }
33 1 i_data=command_data;
34 1 i_data&=0xf0;
35 1 for(i=0;i<8;i++)
36 1 {
37 2 SID=(bit)(i_data&0x80);
38 2 SCLK=0;
39 2 SCLK=1;
40 2 i_data=i_data<<1;
41 2 }
42 1 i_data=command_data;
43 1 temp_data1=i_data&0xf0;
44 1 temp_data2=i_data&0x0f;
45 1 temp_data1>>=4;
46 1 temp_data2<<=4;
47 1 i_data=temp_data1|temp_data2;
48 1 i_data&=0xf0;
49 1 for(i=0;i<8;i++)
50 1 {
51 2 SID=(bit)(i_data&0x80);
52 2 SCLK=0;
53 2 SCLK=1;
54 2 i_data=i_data<<1;
55 2 }
C51 COMPILER V8.02 LCD 05/20/2008 10:43:29 PAGE 2
56 1 CS=0;
57 1 }
58
59 void send_data(unsigned char command_data)
60 {
61 1 unsigned char i;
62 1 unsigned char i_data,temp_data1,temp_data2;
63 1
64 1 i_data=0xfa;
65 1 delay(10);
66 1 CS=1;
67 1 for(i=0;i<8;i++)
68 1 {
69 2 SID=(bit)(i_data&0x80);
70 2 SCLK=0;
71 2 SCLK=1;
72 2 i_data=i_data<<1;
73 2 }
74 1 i_data=command_data;
75 1 i_data&=0xf0;
76 1 for(i=0;i<8;i++)
77 1 {
78 2 SID=(bit)(i_data&0x80);
79 2 SCLK=0;
80 2 SCLK=1;
81 2 i_data=i_data<<1;
82 2 }
83 1 i_data=command_data;
84 1 temp_data1=i_data&0xf0;
85 1 temp_data2=i_data&0x0f;
86 1 temp_data1>>=4;
87 1 temp_data2<<=4;
88 1 i_data=temp_data1|temp_data2;
89 1 i_data&=0xf0;
90 1 for(i=0;i<8;i++)
91 1 {
92 2 SID=(bit)(i_data&0x80);
93 2 SCLK=0;
94 2 SCLK=1;
95 2 i_data=i_data<<1;
96 2 }
97 1 CS=0;
98 1 }
99
100 void InitLCD() /*液晶初始化*/
101 {
102 1 send_command(0x30); //功能设置:一次送8位数据,基本指令集
103 1 send_command(0x06); //点设定:显示字符/光标从左到右移位,DDRAM地址加1
104 1 send_command(0x0c); //显示设定:开显示,显示光标,当前显示位反白闪动
105 1 send_command(0x04); //显示设定:开显示,显示光标,当前显示位反白闪动
106 1 send_command(0x01); //清DDRAM
107 1 send_command(0x02); //DDRAM地址归位
108 1 send_command(0x80); //把显示地址设为0X80,即为第一行的首位
109 1 }
110
111
112
113 /* flagnew 是刷新标志位,1则刷新,0不刷新,
114 x,y为起始座标 x(0<=x<=3),y(0<=y<=7),x为行座标,y为列座标;
115 how为要显示汉字的个数;
116 str是要显示汉字的地址 */
117
C51 COMPILER V8.02 LCD 05/20/2008 10:43:29 PAGE 3
118 void DispHanzi(unsigned char x,unsigned char y,unsigned char how,unsigned char *stri)
119 {
120 1 unsigned char hi=0; //汉字显示
121 1 if(x==0) send_command(0x80+y);
122 1 else if(x==1) send_command(0x90+y);
123 1 else if(x==2) send_command(0x88+y);
124 1 else if(x==3) send_command(0x98+y);
125 1 for(hi=0;hi<how;hi++)
126 1 {
127 2 send_data(*(stri+hi*2));
128 2 send_data(*(stri+hi*2+1));
129 2 }
130 1 }
131
132 void DispZimu(unsigned char x,unsigned char y,unsigned char how,unsigned char *stri)
133 {
134 1 unsigned char hi=0; //字母显示
135 1 if(x==0) send_command(0x80+y);
136 1 else if(x==1) send_command(0x90+y);
137 1 else if(x==2) send_command(0x88+y);
138 1 else if(x==3) send_command(0x98+y);
139 1 for(hi=0;hi<how;hi++)
140 1 {
141 2 send_data(0xA3);
142 2 send_data(*(stri+hi));
143 2 }
144 1 }
145
146 /* x,y为起始座标 x(0<=x<=3),y(0<=y<=7),x为行座标,y为列座标;
147 n要显示数字*/
148 void DispShuzi(unsigned char x,unsigned char y,unsigned int n) //8*16数字显示
149 {
150 1 if(x==0) send_command(0x80+y);
151 1 else if(x==1) send_command(0x90+y);
152 1 else if(x==2) send_command(0x88+y);
153 1 else if(x==3) send_command(0x98+y);
154 1
155 1 if(n/1000%10!=0)
156 1 {
157 2 send_data(0x30+n/1000%10);
158 2 send_data(0x30+n/100%10);
159 2 send_data(0x30+n/10%10);
160 2 send_data(0x2E);
161 2 send_data(0x30+n%10);
162 2 send_data(0x20);
163 2 // send_data(0x73);
164 2 }
165 1 else if(n/100%10!=0)
166 1 {
167 2 send_data(0x20);
168 2 send_data(0x30+n/100%10);
169 2 send_data(0x30+n/10%10);
170 2 send_data(0x2E);
171 2 send_data(0x30+n%10);
172 2 send_data(0x20);
173 2 // send_data(0x73);
174 2 }
175 1 else if(n/10%10!=0)
176 1 {
177 2 send_data(0x20);
178 2 send_data(0x20);
179 2 send_data(0x30+n/10%10);
C51 COMPILER V8.02 LCD 05/20/2008 10:43:29 PAGE 4
180 2 send_data(0x2E);
181 2 send_data(0x30+n%10);
182 2 send_data(0x20);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -