📄 1602.lst
字号:
C51 COMPILER V7.06 1602 07/15/2010 00:57:28 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 1602
OBJECT MODULE PLACED IN .\obj\1602.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE 1602.c BROWSE DEBUG OBJECTEXTEND PRINT(.\obj\1602.lst) OBJECT(.\obj\1602.ob
-j)
stmt level source
1 /*-----------------------------------------------
2 名称:LCD1602
3 论坛:www.doflye.net
4 编写:shifang
5 日期:2009.5
6 修改:无
7 内容:
8 引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK
9 ------------------------------------------------*/
10 #include "1602.h"
11 #include "delay.h"
12
13 sbit RS = P2^4; //定义端口
14 sbit RW = P2^5;
15 sbit EN = P2^6;
16
17 #define RS_CLR RS=0
18 #define RS_SET RS=1
19
20 #define RW_CLR RW=0
21 #define RW_SET RW=1
22
23 #define EN_CLR EN=0
24 #define EN_SET EN=1
25
26 #define DataPort P0
27
28 /*------------------------------------------------
29 判忙函数
30 ------------------------------------------------*/
31 bit LCD_Check_Busy(void)
32 {
33 1 DataPort= 0xFF;
34 1 RS_CLR;
35 1 RW_SET;
36 1 EN_CLR;
37 1 _nop_();
38 1 EN_SET;
39 1 return (bit)(DataPort & 0x80);
40 1 }
41 /*------------------------------------------------
42 写入命令函数
43 ------------------------------------------------*/
44 void LCD_Write_Com(unsigned char com)
45 {
46 1 while(LCD_Check_Busy()); //忙则等待
47 1 RS_CLR;
48 1 RW_CLR;
49 1 EN_SET;
50 1 DataPort= com;
51 1 _nop_();
52 1 EN_CLR;
53 1 }
54 /*------------------------------------------------
C51 COMPILER V7.06 1602 07/15/2010 00:57:28 PAGE 2
55 写入数据函数
56 ------------------------------------------------*/
57 void LCD_Write_Data(unsigned char Data)
58 {
59 1 while(LCD_Check_Busy()); //忙则等待
60 1 RS_SET;
61 1 RW_CLR;
62 1 EN_SET;
63 1 DataPort= Data;
64 1 _nop_();
65 1 EN_CLR;
66 1 }
67
68 /*------------------------------------------------
69 清屏函数
70 ------------------------------------------------*/
71 void LCD_Clear(void)
72 {
73 1 LCD_Write_Com(0x01);
74 1 DelayMs(5);
75 1 }
76 /*------------------------------------------------
77 写入字符串函数
78 ------------------------------------------------*/
79 void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
80 {
81 1 if (y == 0)
82 1 {
83 2 LCD_Write_Com(0x80 + x); //表示第一行
84 2 }
85 1 else
86 1 {
87 2 LCD_Write_Com(0xC0 + x); //表示第二行
88 2 }
89 1 while (*s)
90 1 {
91 2 LCD_Write_Data( *s);
92 2 s ++;
93 2 }
94 1 }
95 /*------------------------------------------------
96 写入字符函数
97 ------------------------------------------------*/
98 void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
99 {
100 1 if (y == 0)
101 1 {
102 2 LCD_Write_Com(0x80 + x);
103 2 }
104 1 else
105 1 {
106 2 LCD_Write_Com(0xC0 + x);
107 2 }
108 1 LCD_Write_Data( Data);
109 1 }
110 /*------------------------------------------------
111 初始化函数
112 ------------------------------------------------*/
113 void LCD_Init(void)
114 {
115 1 LCD_Write_Com(0x38); /*显示模式设置*/
116 1 DelayMs(5);
C51 COMPILER V7.06 1602 07/15/2010 00:57:28 PAGE 3
117 1 LCD_Write_Com(0x38);
118 1 DelayMs(5);
119 1 LCD_Write_Com(0x38);
120 1 DelayMs(5);
121 1 LCD_Write_Com(0x38);
122 1 LCD_Write_Com(0x08); /*显示关闭*/
123 1 LCD_Write_Com(0x01); /*显示清屏*/
124 1 LCD_Write_Com(0x06); /*显示光标移动设置*/
125 1 DelayMs(5);
126 1 LCD_Write_Com(0x0C); /*显示开及光标设置*/
127 1 }
128 /*------------------------------------------------
129 设定二个自定义字符,LCD1602中自定义字符的地址为0x00--0x07,
130 即可定义8个字符
131 这里我们设定把一个自定义字符放在0x00位置(000),
132 另一个放在0x01位子(001)
133 ------------------------------------------------*/
134 void Lcd_User_Chr(void)
135 { //第一个自定义字符
136 1 LCD_Write_Com(0x40); //"01 000 000" 第1行地址 (D7D6为地址设定命令形式
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -