📄 lcd.lst
字号:
C51 COMPILER V7.06 LCD 05/18/2008 14:29:17 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.OBJ
COMPILER INVOKED BY: E:\My Electronic\Tools\Design tools\keil7.06\C51\BIN\C51.EXE lcd.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //////////////////////////////////////////
2 //创新实验室 LCD RT12864M 的串口通信程序//
3 // 2006/12/3 //
4 // balisula //
5 //////////////////////////////////////////
6 #include <REG52.H>
7 #include <intrins.h>
8
9 #define uchar unsigned char
10 #define command 1
11 #define lcddata 0
12
13 sbit csl = P1^1;
14 sbit sid = P1^2;
15 sbit clkl = P1^3;
16 sbit rstl = P1^4;
17 //sbit psb =P3^2;
18 sbit lcd_bk =P1^5;
19
20 void delay_2us(unsigned char us); //精确延时时间=2*us*T+5*T, T为一个机器周期
21 void delay_ms(unsigned int ms); //延时时间=8*ms*T(约等于,实际值比此值大,延时时间越长,误差越大,最大误差262*
-T)
22
23 void sent_com_bit(uchar sent_bit)
24 {
25 1 uchar temp,i;
26 1
27 1 temp=sent_bit;
28 1 csl=0;
29 1 clkl=0;
30 1 sid=0;
31 1 csl=1;
32 1 for(i=0;i<8;i++)
33 1 {
34 2 clkl=0;
35 2 if((temp&0x80)==0x80)
36 2 sid=1;
37 2 else
38 2 sid=0;
39 2 temp<<=1;
40 2 clkl=1;
41 2 _nop_ ();
42 2 }
43 1 csl=0;
44 1 clkl=0;
45 1 }
46
47 void sent_com_3bit(uchar fun,uchar sent_data)
48 {
49 1 uchar temp1,temp2,temp3;
50 1
51 1 if(fun==1)
52 1 temp1=0xF8; //发送控制指令
53 1 else if(fun==0)
54 1 temp1=0xFA; //发送数据显示指令
C51 COMPILER V7.06 LCD 05/18/2008 14:29:17 PAGE 2
55 1 temp2=(sent_data&0xF0); //高4位
56 1 temp3=((sent_data<<4)&0xF0);//低四位
57 1
58 1 sent_com_bit(temp1);
59 1 delay_2us(5);
60 1 sent_com_bit(temp2);
61 1 delay_2us(5);
62 1 sent_com_bit(temp3);
63 1 delay_2us(5);
64 1 }
65
66 void sent_position(uchar x,uchar y)
67 {
68 1 uchar address;
69 1 switch(y)
70 1 {
71 2 case 0:
72 2 address = 0x80 + x;
73 2 break;
74 2 case 1:
75 2 address = 0x90 + x;
76 2 break;
77 2 case 2:
78 2 address = 0x88 + x;
79 2 break;
80 2 case 3:
81 2 address = 0x98 + x;
82 2 break;
83 2 default:address = 0x80 + x;
84 2 }
85 1 sent_com_3bit( command,address );
86 1
87 1 }
88
89 void sent_string(uchar x,uchar y,uchar *sent_data,uchar length)
90 {
91 1 sent_position(x,y);
92 1 while(*sent_data&&length)
93 1 {
94 2 sent_com_3bit( lcddata,*sent_data);
95 2 sent_data++;
96 2 length--;
97 2 }
98 1 }
99
100 void sent_pic_position(uchar x,uchar y)
101 {
102 1 if(y>31)
103 1 {
104 2 x+=0x88;
105 2 y=(y-32)+0x80;
106 2 }
107 1 else
108 1 {
109 2 x+=0x80;
110 2 y+=0x80;
111 2 }
112 1 sent_com_3bit(command,0x34);
113 1 sent_com_3bit(command,y);
114 1 sent_com_3bit(command,x);
115 1 sent_com_3bit(command,0x30);
116 1 }
C51 COMPILER V7.06 LCD 05/18/2008 14:29:17 PAGE 3
117
118 void LCD_Convert(unsigned char x,unsigned char y,unsigned char weith,unsigned char mode) //反白
119 {
120 1 unsigned char flag=0;
121 1 unsigned char px=0;
122 1 unsigned char py=0;
123 1 if (mode) mode=0xff;
124 1 if(x%2)
125 1 {
126 2 flag=1;
127 2 }
128 1 x/=2;
129 1 for(py=0;py<16;py++)
130 1 {
131 2 sent_pic_position(x,y*16+py);
132 2 if(flag) sent_com_3bit(command,0);
133 2 for (px=weith;px>0;px--)
134 2 {
135 3 sent_com_3bit (lcddata,mode);
136 3 }
137 2 }
138 1 sent_com_3bit(command,0x36);
139 1 sent_com_3bit(command,0x30);
140 1 }
141
142 void LCD_clr_pic()
143 {
144 1 unsigned char i;
145 1 for(i=0;i<4;i++) LCD_Convert(0,i,16,0);
146 1 }
147
148 void init_LCD()
149 {
150 1 lcd_bk=1;
151 1 rstl=0;
152 1 delay_2us(50);
153 1 rstl=1;
154 1 delay_2us(50);
155 1 //psb=0;
156 1 sent_com_3bit(command,0x01); //显示清屏
157 1 delay_ms(30);
158 1 sent_com_3bit(command,0x0C); //显示开,不显示光标(0x0C),显示光标(0x0F)
159 1 delay_ms(30);
160 1 sent_com_3bit(command,0x80); //显示光标移动设置
161 1 delay_ms(30);
162 1 LCD_clr_pic();
163 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 443 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 20
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -