📄 lcd1602_4.lst
字号:
C51 COMPILER V8.08 LCD1602_4 12/21/2008 10:38:59 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE LCD1602_4
OBJECT MODULE PLACED IN lcd1602_4.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd1602_4.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //使用举例(仅供参考)
2 #include <reg52.h>
3 //#include <intrins.h>
4
5 //本程序中,LCD使用用D4~D7总线
6 #define BUSMASK 0xf0
7
8 sbit dc=P1^3; /*P1.3 LCD 的RS 21*/
9 sbit rw=P1^4; /*P1.4 LCD 的R/W 22*/
10 sbit cs=P1^5; /*P1.5 LCD 的E 25*/
11
12 sfr lcdbus=0xB0; /*p3 LCD 数据D0=P3.0*/
13
14 unsigned int sys10mscounter;
15 unsigned char syslimitcounter;
16 //code char path1[8]={0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f};/*自定义符号:横1*/
17 //code char path2[8]={0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00};/*自定义符号:横2*/
18 //code char pats1[8]={0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15};/*自定义符号:竖1*/
19 //code char pats2[8]={0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a};/*自定义符号:竖2*/
20 void soft_nop(){}
21
22 unsigned char data lcdcounter;
23 bit lcdusing1,lcdusing2;
24 bit lcd_checkbusy()/*检查LCD 忙*/
25 { register lcdstate;
26 1 char t;
27 1 dc=0; /*dc=1为数据,=0为命令.*/
28 1 rw=1; /*rw=1为读,=0为写.*/
29 1 cs=1; /*cs=1选通.*/
30 1 soft_nop();
31 1 lcdbus |= 0x80;
32 1 lcdstate=lcdbus;
33 1 cs=0;
34 1 dc=0; /*dc=1为数据,=0为命令.*/
35 1 rw=1; /*rw=1为读,=0为写.*/
36 1 cs=1; /*cs=1选通.*/
37 1 soft_nop();
38 1 t=lcdbus;
39 1 cs=0;
40 1 return((bit)(lcdstate&0x80));
41 1 }
42 void lcd_wrcmd(unsigned char lcdcmd) /*写LCD 命令*/
43 {
44 1
45 1 lcdusing1=1;
46 1 while(lcd_checkbusy());
47 1 lcdbus &=~BUSMASK;
48 1 lcdbus |= (lcdcmd &0xf0);
49 1 dc=0; /*dc=1为数据,=0为命令.*/
50 1 rw=0; /*rw=1为读,=0为写.*/
51 1 cs=1; /*cs=1选通.*/
52 1 soft_nop();
53 1 cs=0;
54 1 lcdbus &=~BUSMASK;
55 1 lcdbus |=(lcdcmd<<4)&0xf0;
C51 COMPILER V8.08 LCD1602_4 12/21/2008 10:38:59 PAGE 2
56 1 dc=0; /*dc=1为数据,=0为命令.*/
57 1 rw=0; /*rw=1为读,=0为写.*/
58 1 cs=1; /*cs=1选通.*/
59 1 soft_nop();
60 1 cs=0;
61 1 lcdbus |=BUSMASK;
62 1 lcdusing1=0;
63 1 }
64
65 void lcd_wrdata(char lcddata) /*在当前显示位置显示数据*/
66 { //char i;
67 1 lcdusing2=1;
68 1 while(lcd_checkbusy());
69 1 lcdbus &=~BUSMASK;
70 1 lcdbus |= 0xf0 & lcddata;
71 1 dc=1; /*dc=1为数据,=0为命令.*/
72 1 rw=0; /*rw=1为读,=0为写.*/
73 1 cs=1; /*cs=1选通.*/
74 1 soft_nop();
75 1 cs=0;
76 1 lcdbus &=~BUSMASK;
77 1 lcdbus |= 0xf0 & (lcddata<<4);
78 1 dc=1; /*dc=1为数据,=0为命令.*/
79 1 rw=0; /*rw=1为读,=0为写.*/
80 1 cs=1; /*cs=1选通.*/
81 1 soft_nop();
82 1 cs=0;
83 1 lcdbus |=BUSMASK;
84 1 lcdusing2=0;
85 1 }
86 /*
87 void lcd_char(unsigned int addr,char *strpoint) //在当前显示位置显示LCD 字符串//
88 { int i=0;
89 if(addr<16) lcd_wrcmd(0x80+addr); //第1行起始地址,0b11000000B=0x80.
90 else lcd_wrcmd(0xc0+addr-16);
91 while(strpoint[i]!=0){
92 lcd_wrdata(strpoint[i]);
93 i++;
94 if((i+addr)==16) lcd_wrcmd(0xc0); //第二行起始地址,0b11000000B=0xc0.
95 }
96 }
97 */
98
99 void ePut_str(char x,char y,char *strpoint) /*在当前显示位置显示LCD 字符串*/
100 { register i=0;
101 1 char k;
102 1 lcd_wrcmd(0x03);
103 1 if(y>=1) lcd_wrcmd(0xc0+x);
104 1 else lcd_wrcmd(0x80+x);
105 1 k = x;
106 1 while(strpoint[i]!=0)
107 1 {
108 2 lcd_wrdata(strpoint[i]);
109 2 i++;
110 2 if((k+i)==16) lcd_wrcmd(0xC0);
111 2 }
112 1 }
113
114 void lcd_string(char *strpoint) //在当前显示位置显示LCD 字符串//
115 { register i=0;
116 1 lcd_wrcmd(0x03);
117 1 lcd_wrcmd(0x80);
C51 COMPILER V8.08 LCD1602_4 12/21/2008 10:38:59 PAGE 3
118 1 while(strpoint[i]!=0){
119 2 lcd_wrdata(strpoint[i]);
120 2 i++;
121 2 if(i==16) lcd_wrcmd(0xC0);
122 2 }
123 1 }
124
125
126 void LcdReset(void)/*初始化*/
127 {
128 1 lcd_wrcmd(0x28); /*设置4 位格式,2 行,5*7*/
129 1 lcd_wrcmd(0x0c); /*整体显示,关光标,不闪烁*/
130 1 lcd_wrcmd(0x06); /*设定输入方式,增量不移位*/
131 1 lcd_wrcmd(0x01); /*清除显示*/
132 1 lcdcounter=0;
133 1
134 1 }
135
136 void lcd_cls()/*清除显示*/
137 { lcd_wrcmd(0x01);
138 1 lcdcounter=0;
139 1 }
140
141 void showx(char x,char y,unsigned int n)
142 {
143 1 char i=0,num[6],t[6],j=0;
144 1 while(n/10)
145 1 {
146 2 num[i++]=0x30+n%10;n/=10;
147 2 }
148 1 num[i++]=0x30+n;
149 1 while(i--) t[j++]=num[i];
150 1 if(j<5)t[j++]=' '; t[j]='\0';
151 1 ePut_str(x,y,t);
152 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 461 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 28
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -