📄 lcd_1602.lst
字号:
C51 COMPILER V8.02 LCD_1602 04/15/2009 18:08:20 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD_1602
OBJECT MODULE PLACED IN lcd_1602.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd_1602.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<c8051f020.h>
2 #define uint unsigned int
3 #define uchar unsigned char
4
5 /*sbit RS=P4^0;
6 sbit RW=P4^1;
7 sbit EN=P4^2;*/
8
9 void write_comm(uchar);
10 void write_data(uchar);
11 void lcd_delay(uchar,uchar);
12 void write_string(uchar,uchar,uchar*);
13
14 void L1602_init()
15 {
16 1 lcd_delay(10,10);
17 1 write_comm(0x38); //显示模式控制:设置16*2显示,5*7点阵,8位数据口
18 1 write_comm(0x08); //关显示
19 1 write_comm(0x01); //清屏
20 1 write_comm(0x06); //输入模式控制:光标右移,整屏不移动
21 1 write_comm(0x0f); //开显示,显示光标,光标闪烁
22 1 //0x0e,开显示,显示下光标,光标不闪烁
23 1 write_comm(0x80);
24 1 write_comm(0x02); //数据指针清零
25 1 }
26
27 void write_comm(uchar Commend_Code)
28 {
29 1 P4&=~0x01;
30 1 P4&=~0x02;
31 1 P5=Commend_Code;
32 1 lcd_delay(10,10);
33 1 P4|=0x04;
34 1 lcd_delay(100,100);
35 1 P4&=~0x04;
36 1 }
37
38 void write_data(uchar Data)
39 {
40 1 P4|=0x01; //RS=1
41 1 P4&=~0x02; //RW=0
42 1 P5=Data;
43 1 lcd_delay(10,10);
44 1 P4|=0x04; //EN=1
45 1 lcd_delay(100,100);
46 1 P4&=~0x04; //EN=0
47 1 }
48
49 void Lcd1602_Write_Data(uchar row,uchar column,uchar Data)
50 {
51 1
52 1 if (row==1)
53 1 column |= 0x40; //当要显示第二行时地址码+0x40;
54 1 column |= 0x80; // 算出指令码
55 1
C51 COMPILER V8.02 LCD_1602 04/15/2009 18:08:20 PAGE 2
56 1 write_comm(column); //这里不检测忙信号,发送地址码
57 1 write_data(Data);
58 1 }
59
60 void write_string(uchar row,uchar column,uchar *dis_buffer)
61 {
62 1 switch(row) //这种结构保持以后升级到多行显示液晶
63 1 {
64 2 case 0:write_comm(0x80+column);break;
65 2 case 1:write_comm(0x80+0x40+column);break;//重新调整数据地址指针
66 2 default:break;
67 2 }
68 1
69 1 while(*dis_buffer!='\0') // '\0'结束符
70 1 {
71 2 write_data(*dis_buffer);
72 2 dis_buffer++;
73 2 column++;
74 2 if(column==16)
75 2 {
76 3 column=0;
77 3 row++;
78 3 if(row>=3)
79 3 return;
80 3 else
81 3 switch(row) //这种结构保持以后升级到多行显示液晶
82 3 {
83 4 case 0:write_comm(0x80);break;
84 4 case 1:write_comm(0x80+0x40);break; //重新调整数据地址指针
85 4 default:break;
86 4 }
87 3 }
88 2 }
89 1 }
90
91 void Cursor_shift(uchar direct,uchar x)
92 {
93 1 uchar i;
94 1 for(i=0;i<x;i++)
95 1 if(direct=='R')
96 1 write_comm(0x14); //光标右移
97 1 else if(direct=='L')
98 1 write_comm(0x10); //光标左移
99 1 }
100
101 void Display_shift(uchar direct,uchar x)
102 {
103 1 uchar i;
104 1 for(i=0;i<x;i++)
105 1 if(direct=='R')
106 1 write_comm(0x1c); //显示右移
107 1 else if(direct=='L')
108 1 write_comm(0x18); //显示左移
109 1 }
110
111
112 void lcd_delay(uchar t1,uchar t2)
113 {
114 1 uchar i,j;
115 1 for(i=0;i<t1;i++)
116 1 for(j=0;j<t2;j++);
117 1 }
C51 COMPILER V8.02 LCD_1602 04/15/2009 18:08:20 PAGE 3
118
119
120 //==================================================
121 // 以下为几种清屏命令
122 //==================================================
123
124 void Clear_All()
125 {
126 1 write_comm(0x01); //显示清屏。
127 1 write_comm(0x80); //将数据指针
128 1 } //设置到第一行的第一个字符
129
130 void Clear_Line(uchar line)
131 {
132 1 write_string(line,0," ");
133 1 switch(line) //这种结构保持以后升级到多行显示液晶
134 1 {
135 2 case 1:write_comm(0x80);break; //将数据地址指针定位到第一行
136 2 case 2:write_comm(0x80+0x40);break; //将数据地址指针定位到第二行
137 2 default: break;
138 2 }
139 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 345 ----
CONSTANT SIZE = 17 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 13
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 + -