📄 lcd1602.lst
字号:
C51 COMPILER V8.08 LCD1602 05/10/2008 19:44:50 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE LCD1602
OBJECT MODULE PLACED IN LCD1602.OBJ
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE LCD1602.C BROWSE DEBUG OBJECTEXTEND
line level source
1 //=========================1602液晶头文键=================//
2 #ifndef LCD1602_4_H
3 #define LCD1602_4_H
4 #include <reg52.h>
5 #include <intrins.h>
6
7 #define MSB 0x80 //读忙位
8 #define HIGH 1
9 #define LOW 0
10
11 //*****************************************
12 #define DATA_MODE 0x28 //LCD模式设置,0x28位四位数据线模式
13 #define OPEN_SCREEN 0x0f //打开LCD显示,有光标;0x0c没有光标
14 #define DISPLAY_ADDRESS 0x80 //写地址指令
15 #define CLEARSCREEN LCD_en_com(0x01) //清屏
16
17 //***********//LCD1602的接线//*****************************
18 #define LCDIO P0 //LCD1602的高四位接在P0口的高四位
19 sbit LCD1602_RS=P0^0; //RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
20 sbit LCD1602_RW=P0^1; //RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
21 sbit LCD1602_EN=P0^2;
22 sbit LCDFLASH=P0^3;
23 //E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
24 //**********************************************************************
25 void LCD_en_com(unsigned char command); //写命令指令
26 void LCD_en_dat(unsigned char temp); //写数据指令
27 void LCD_set_xy(unsigned char x, unsigned char y); //设置显示地址:X为横轴(0-15),Y为纵轴(0-1).
28 void LCD_write_char(unsigned x,unsigned char y,unsigned char dat); //写一个字符
29 void LCD_write_string(unsigned char x,unsigned char y,unsigned char *s);//写一个字符串
30 void LCD_write_int(unsigned char x,unsigned char y,unsigned int intdat); //写无字符型整形数
31 void LCD_init(void); //lcd初始化
32 void LCD_Read_BF(void); //LCD读忙信号
33 //**********************************************************************
34 /*
35 LCD1602.c
36
37 Created by Zhengxihui
38 email: zhengxihui0506@126.com
39 May 2007
40
41 */
42 void LCD_Read_BF(void)
43 {
44 1 LCD1602_RW=HIGH; //RW 1
45 1 LCD1602_RS=LOW; //RS 0
46 1 LCD1602_EN=HIGH; //EN 1 读忙信号
47 1 LCDIO=LCDIO&0x0F|0xf0;
48 1 while(LCDIO&MSB);
49 1 LCD1602_EN=LOW;
50 1 }
51 void LCD_en_write(void) //EN端产生一个高电平脉冲,写LCD
52 {
53 1 LCD1602_EN=HIGH;
54 1 _nop_();
55 1 LCD1602_EN=LOW;
C51 COMPILER V8.08 LCD1602 05/10/2008 19:44:50 PAGE 2
56 1 }
57 //*************************************
58 void LCD_en_com(unsigned char command)
59 {
60 1 LCD_Read_BF();
61 1 LCD1602_RS=LOW; //RS 0 写命令
62 1 LCD1602_RW=LOW; //RW 0
63 1
64 1 LCDIO&=0x0F;
65 1 LCDIO=command&0xf0 | LCDIO&0x0f; //先发送高四位数据
66 1 LCD_en_write();
67 1 command=command<<4;
68 1 LCDIO&=0x0F;
69 1 LCDIO=command&0xf0 | LCDIO&0x0f; //发送低四位数据
70 1 LCD_en_write();
71 1 }
72 //*********************************
73 void LCD_en_dat(unsigned char dat)
74 {
75 1 LCD_Read_BF();
76 1 LCD1602_RS=HIGH; //RS 1 写数据
77 1 LCD1602_RW=LOW; //RW 0
78 1 LCDIO &=0x0F;
79 1 LCDIO=dat&0xf0 | LCDIO&0x0f; //先发送高四位数据
80 1 LCD_en_write();
81 1 dat=dat<<4;
82 1 LCDIO &=0x0F;
83 1 LCDIO=dat&0xf0 | LCDIO&0x0f; //发送低四位数据
84 1 LCD_en_write();
85 1 }
86 //**************设置显示地址:X为横轴(0-15),Y为纵轴(0-1)********************
87 void LCD_set_xy(unsigned char x,unsigned char y)
88 {
89 1 unsigned char address;
90 1 x&=0x0f;
91 1 if(!y)
92 1 address=0x80+x;
93 1 else
94 1 address=0xc0+x;
95 1 LCD_en_com(address);
96 1 }
97 //***************写一个字符:X为横轴(0-15),Y为纵轴(0-1)**********
98 void LCD_write_char(unsigned x,unsigned char y,unsigned char dat)
99 {
100 1 LCD_set_xy(x,y);
101 1 LCD_en_dat(dat);
102 1 }
103 //****************写一个字符串***************************************
104 void LCD_write_string(unsigned char x,unsigned char y,const unsigned char *s)
105 {
106 1 LCD_set_xy(x,y);
107 1 while(*s)
108 1 {
109 2 LCD_en_dat(*s);
110 2 s++;
111 2 }
112 1 }
113 /***************写一个无字符整数***************************************
114 void LCD_write_int(unsigned char x,unsigned char y,unsigned int intdat)
115 {
116 unsigned char i="0",temp[5];
117 while(intdat/10 || intdat%10)
C51 COMPILER V8.08 LCD1602 05/10/2008 19:44:50 PAGE 3
118 {
119 temp=intdat%10;
120 intdat/=10;
121 i++;
122 }
123 LCD_set_xy(x,y);
124 while(i)
125 {
126 i--;
127 LCD_en_dat(temp+0x30);
128 }
129 }
130 //*****///LCD的初始化函数(刚上电的时候一定要调用一次)//***************/
131 void LCD_init(void)
132 {
133 1 LCD_en_com(DATA_MODE); //设计四位数据线模式
134 1 LCD_en_com(DATA_MODE); //设计四位数据线模式
135 1 LCD_en_com(OPEN_SCREEN); //打开LCD显示
136 1 LCD_en_com(DISPLAY_ADDRESS);//设计首地址
137 1 CLEARSCREEN; //清屏
138 1 }
139 void main(void)
140 {
141 1 LCD_init(); //1602初始化
142 1 while(1)
143 1 {
144 2
145 2 LCD_write_string(0,0,"Fuck JANPANESE");
146 2 LCDFLASH=0; //说明初始化成功
147 2 }
148 1 }
*** WARNING C316 IN LINE 148 OF LCD1602.C: unterminated conditionals
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 199 ----
CONSTANT SIZE = 15 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -