📄 lcd.lst
字号:
C51 COMPILER V7.06 LCD 11/14/2008 21:02:29 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*****************************************************************************************/
2 /* */
3 /* LCD串行驱动程序 */
4 /* */
5 /*****************************************************************************************/
6 #include <ADUC842.H>
7 #include"lcd.h"
8
9 sbit cs = P2^0; //只需修改此三口即可使用
10 sbit std = P2^1; //
11 sbit sclk = P2^2; //
12
13 void wr_lcd (uchar dat_comm,uchar content);
14 void ldelay (uint us);
15
16 uchar x[4]={0x80,0x90,0x88,0x98}; //行地址
17
18 bit flag_LCD; //为0时关闭液晶显示,1时打开
19 /*------------------初始化-----------------*/
20 void init_lcd (void) //使用前须调用此函数初始化
21 {
22 1 flag_LCD=1;
23 1 wr_lcd (comm,0x30); /*30---基本指令动作*/
24 1 wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/
25 1 ldelay (100);
26 1 wr_lcd (comm,0x06); /*光标的移动方向*/
27 1 wr_lcd (comm,0x0c); /*开显示,关游标*/
28 1 }
29 /*--------------清DDRAM------------------*/
30 /*void clrram (void)
31 {
32 wr_lcd (comm,0x30);
33 wr_lcd (comm,0x01);
34 // ldelay (180);
35 }*/
36 /*---------------------------------------*/
37 void wr_lcd (uchar dat_comm,uchar content)
38 {
39 1 uchar a,i,j;
40 1 ldelay (30);
41 1 a=content;
42 1 cs=1;
43 1 sclk=0;
44 1 std=1;
45 1 for(i=0;i<5;i++)
46 1 {
47 2 sclk=1;
48 2 sclk=0;
49 2 }
50 1 std=0;
51 1 sclk=1;
52 1 sclk=0;
53 1 if(dat_comm)
54 1 std=1; //data
55 1 else
C51 COMPILER V7.06 LCD 11/14/2008 21:02:29 PAGE 2
56 1 std=0; //command
57 1 sclk=1;
58 1 sclk=0;
59 1 std=0;
60 1 sclk=1;
61 1 sclk=0;
62 1 for(j=0;j<2;j++)
63 1 {
64 2 for(i=0;i<4;i++)
65 2 {
66 3 a=a<<1;
67 3 std=CY;
68 3 sclk=1;
69 3 sclk=0;
70 3 }
71 2 std=0;
72 2 for(i=0;i<4;i++)
73 2 {
74 3 sclk=1;
75 3 sclk=0;
76 3 }
77 2 }
78 1 }
79
80 /*-----------------------------------*/
81 void ldelay (uint us) //delay time
82 {
83 1 uint i,temp;
84 1 for(i=0;i<10;i++)
85 1 for(temp=us;temp>0;temp--)
86 1 ;
87 1 }
88
89
90 /*-----------write string------------*/
91
92 void putstr(char *str,uchar line) //在第line行输出一个字符串
93 {
94 1 uchar i=0;
95 1
96 1 if(!flag_LCD)
97 1 {
98 2 return;
99 2 }
100 1
101 1 wr_lcd (comm,0x30);
102 1 wr_lcd (comm,x[line-1]);
103 1
104 1 while(str[i] != '\0' )
105 1 {
106 2 if(str[i]=='\n')
107 2 {
108 3 wr_lcd (comm,x[line]);
109 3 i++;
110 3 continue;
111 3 }
112 2 if(str[i]=='\t')
113 2 {
114 3 wr_lcd (comm,x[line-1]+8);
115 3 i++;
116 3 continue;
117 3 }
C51 COMPILER V7.06 LCD 11/14/2008 21:02:29 PAGE 3
118 2
119 2 wr_lcd (cdat,str[i++]);
120 2 }
121 1 }
122
123 /*void putcar(char *str) //在默认位置输出一个字符串
124 {
125 uchar i=0;
126 if(!flag_LCD)
127 {
128 return;
129 }
130 while(str[i] != '\0' )
131 {
132 wr_lcd (cdat,str[i++]);
133 }
134
135 }
136 */
137 /*-----------write number------------
138
139 void put2num(int num) //在默认位置输出两位数字num
140 {
141 if(!flag_LCD)
142 {
143 return;
144 }
145 wr_lcd (comm,0x30);
146
147 wr_lcd (cdat,num/10+0x30);
148 wr_lcd (cdat,num%10+0x30);
149
150 }
151 /*-----------write number------------*/
152
153 void putnum(int num) //在默认位置输出四位数字num
154 {
155 1 uchar out[4],i;
156 1
157 1 if(!flag_LCD)
158 1 {
159 2 return;
160 2 }
161 1 wr_lcd (comm,0x30);
162 1
163 1 if(num<0)
164 1 {
165 2 wr_lcd(cdat,'-');
166 2 num=-num;
167 2 }
168 1
169 1
170 1 out[0]=num/1000-num/10000*10;
171 1 out[1]=num/100-out[0]*10;
172 1 out[2]=num/10-out[0]*100-out[1]*10;
173 1 out[3]=num%10;
174 1
175 1 for(i=0;i<4;i++)
176 1 wr_lcd (cdat,out[i]+0x30);
177 1
178 1 // ldelay(8000);
179 1 }
C51 COMPILER V7.06 LCD 11/14/2008 21:02:29 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 451 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 14
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -