📄 lcd.lst
字号:
C51 COMPILER V7.06 LCD 09/25/2007 10:37:30 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN F:\INTEGRATED_DESIGN\MCU_FPGA\LCD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE F:\INTEGRATED_DESIGN\MCU_FPGA\LCD.C DB SB OE
stmt level source
1 #include <reg51.h>
2 #include <intrins.h>
3 sbit dc=P2^7; /*P2.0 LCD 的RS 21*/
4 sbit rw=P2^6; /*P2.1 LCD 的R/W 22*/
5 sbit cs=P2^5; /*P2.40 LCD 的E 25*/
6 sfr lcdbus=0x80; /*p0LCD 数据 D0=P0.0*/
7 unsigned int sys10mscounter;
8 unsigned char syslimitcounter;
9 char path1[8]={0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f};/*自定义符号横1*/
10 char path2[8]={0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00};/*自定义符号横2*/
11 char pats1[8]={0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15};/*自定义符号竖1*/
12 char pats2[8]={0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a};/*自定义符号竖2*/
13 void soft_nop(){}
14 void soft_10ms()/***********12MHZ 提供10MS 软件延时************/
15 { register int i;
16 1 for(i=0;i<711;i++);
17 1 }
18 void soft_20ms()/***********12MHZ 提供20MS 软件延时************/
19 { soft_10ms();
20 1 soft_10ms();
21 1 }
22 void hard_10ms(unsigned int delaytime) /*基于10MS 的硬件延时*/
23 { sys10mscounter=delaytime;
24 1 while(sys10mscounter);
25 1 }
26 unsigned char data lcdcounter;
27 bit lcdusing1,lcdusing2;
28 bit lcd_checkbusy()/*检查LCD 忙*/
29 { register lcdstate;
30 1 dc=0; /*dc=1为数据,=0 为命令.*/
31 1 rw=1; /*rw=1为读,=0为写.*/
32 1 cs=1; /*cs=1选通.*/
33 1 soft_nop();
34 1 lcdstate=lcdbus;
35 1 cs=0;
36 1 return((bit)(lcdstate&0x80));
37 1 }
38 void lcd_wrcmd(unsigned char lcdcmd) /*写LCD命令*/
39 { lcdusing1=1;
40 1 while(lcd_checkbusy());
41 1 lcdbus=lcdcmd;
42 1 dc=0; /*dc=1为数据,=0 为命令.*/
43 1 rw=0; /*rw=1为读,=0为写.*/
44 1 cs=1; /*cs=1选通.*/
45 1 soft_nop();
46 1 cs=0;
47 1 lcdbus=0xff;
48 1 lcdusing1=0;
49 1 }
50 void lcd_moveto(char position) /*移动光标到指定位.0-79*/
51 { register cmd=0x80;
52 1 lcdcounter=position;
53 1 if (position > 59)
54 1 position += 0x18;
55 1 else
C51 COMPILER V7.06 LCD 09/25/2007 10:37:30 PAGE 2
56 1 { if (position > 39)position -= 0x14;
57 2 else
58 2 { if (position > 19)position += 0x2c;
59 3 }
60 2 }
61 1 cmd=cmd|position;
62 1 lcd_wrcmd(cmd);
63 1 }
64 void lcd_wrdata(char lcddata) /*在当前显示位置显示数据*/
65 { char i;
66 1 lcdusing2=1;
67 1 while(lcd_checkbusy());
68 1 if(lcdcounter==20){
69 2 lcd_moveto(20);
70 2 while(lcd_checkbusy());
71 2 }
72 1 if(lcdcounter==40){
73 2 lcd_moveto(40);
74 2 while(lcd_checkbusy());
75 2 }
76 1 if(lcdcounter==60){
77 2 lcd_moveto(60);
78 2 while(lcd_checkbusy());
79 2 }
80 1 if(lcdcounter==80){
81 2 lcd_moveto(0);
82 2 while(lcd_checkbusy());
83 2 lcdcounter=0;
84 2 } /*为通用而如此*/
85 1 lcdcounter++;
86 1 lcdbus=lcddata;
87 1 dc=1; /*dc=1为数据,=0 为命令.*/
88 1 rw=0; /*rw=1为读,=0为写.*/
89 1 cs=1; /*cs=1选通.*/
90 1 soft_nop();
91 1 cs=0;
92 1 lcdbus=0xff;
93 1 lcdusing2=0;
94 1 }
*** WARNING C280 IN LINE 65 OF F:\INTEGRATED_DESIGN\MCU_FPGA\LCD.C: 'i': unreferenced local variable
95 void lcd_string(char *strpoint) /*在当前显示位置显示LCD 字符串*/
96 { register i=0;
97 1 while(strpoint[i]!=0){
98 2 lcd_wrdata(strpoint[i]);
99 2 i++;
100 2 }
101 1 }
102 void lcd_init()/*初始化*/
103 { lcd_wrcmd(0x38); /*设置8 位格式,2行,5*7*/
104 1 lcd_wrcmd(0x0c); /*整体显示,关光标,不闪烁*/
105 1 lcd_wrcmd(0x06); /*设定输入方式,增量不移位*/
106 1 lcd_wrcmd(0x01); /*清除显示*/
107 1 lcdcounter=0;
108 1 }
109 void lcd_cls()/*清除显示*/
110 { lcd_wrcmd(0x01);
111 1 lcdcounter=0;
112 1 }
113 void timer0(void) interrupt 1 /*T0中断*/
114 { TH0=0xd8; /*12M,10ms*/
115 1 TL0=0xf6;
116 1 TR0=1;
C51 COMPILER V7.06 LCD 09/25/2007 10:37:30 PAGE 3
117 1 if(sys10mscounter!=0)sys10mscounter--; /*定时器10ms*/
118 1 if(syslimitcounter!=0)syslimitcounter--; /*定时器10ms*/
119 1 }
120 main()
121 {
122 1 unsigned char j;
123 1 IE=0;P0=0xff;P1=0xff;P2=0xff;P3=0xff; /*初始化T*/
124 1 lcd_init();soft_20ms();
125 1 TMOD=0x51;
126 1 TH0=0xd8; /*12M,10ms*/
127 1 TL0=0xf6;
128 1 TR0=1;ET0=1;EA=1;
129 1 while(1)
130 1 {
131 2 /*全黑横一横二竖一竖二U Q ABCD... */
132 2 lcd_init(); /*全黑*/
133 2 for(j=0;j<80;j++){lcd_wrdata(0xff);}
134 2 hard_10ms(50);
135 2 lcd_init(); /*横一可参考自行设计符号*/
136 2 lcd_wrcmd(0x40);
137 2 for(j=0;j<8;j++)lcd_wrdata(path1[j]);
138 2
139 2 for(j=0;j<100;j++)lcd_wrdata(0);
140 2 hard_10ms(50);
141 2 lcd_init(); /*横二*/
142 2 lcd_wrcmd(0x40);
143 2 for(j=0;j<8;j++)lcd_wrdata(path2[j]);
144 2 for(j=0;j<100;j++)lcd_wrdata(0);
145 2 hard_10ms(50);
146 2 lcd_init(); /*竖一*/
147 2 lcd_wrcmd(0x40);
148 2 for(j=0;j<8;j++)lcd_wrdata(pats1[j]);
149 2 for(j=0;j<100;j++)lcd_wrdata(0);
150 2 hard_10ms(50);
151 2 lcd_init(); /*竖二*/
152 2 lcd_wrcmd(0x40);
153 2 for(j=0;j<8;j++)lcd_wrdata(pats2[j]);
154 2 for(j=0;j<100;j++)lcd_wrdata(0);
155 2 hard_10ms(50);
156 2 lcd_init();
157 2 lcd_string("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU");
158 2 hard_10ms(50);
159 2 lcd_init();
160 2 lcd_string("QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ");
161 2 hard_10ms(50);
162 2 lcd_init();
163 2 lcd_string("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz0123456789+-!");
164 2 }
165 1 }
166
C51 COMPILER V7.06 LCD 09/25/2007 10:37:30 PAGE 4
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
P0 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0080H 1
lcdbus . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0080H 1
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
P2 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A0H 1
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
EA . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00AFH 1
syslimitcounter. . . . . . . . . . . . PUBLIC DATA U_CHAR 0000H 1
IE . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A8H 1
_lcd_string. . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
strpoint . . . . . . . . . . . . . . AUTO DATA PTR 0000H 3
i. . . . . . . . . . . . . . . . . . AUTO DATA INT 0003H 2
lcdusing1. . . . . . . . . . . . . . . PUBLIC DATA BIT 0000H 1
lcdusing2. . . . . . . . . . . . . . . PUBLIC DATA BIT 0001H 1
_lcd_moveto. . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
position . . . . . . . . . . . . . . * REG * DATA CHAR 0007H 1
cmd. . . . . . . . . . . . . . . . . * REG * DATA INT 0004H 2
_lcd_wrcmd . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
lcdcmd . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1
_hard_10ms . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
delaytime. . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2
main . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
j. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0002H 1
sys10mscounter . . . . . . . . . . . . PUBLIC DATA U_INT 0001H 2
TMOD . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0089H 1
lcdcounter . . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0003H 1
dc . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A7H 1
ET0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A9H 1
lcd_init . . . . . . . . . . . . . . . PUBLIC CODE PROC 0007H -----
TH0. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008CH 1
TL0. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008AH 1
timer0 . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
cs . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A5H 1
TR0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008CH 1
lcd_cls. . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
lcd_checkbusy. . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
lcdstate . . . . . . . . . . . . . . * REG * DATA INT 0006H 2
path1. . . . . . . . . . . . . . . . . PUBLIC DATA ARRAY 0004H 8
soft_10ms. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA INT 0006H 2
path2. . . . . . . . . . . . . . . . . PUBLIC DATA ARRAY 000CH 8
soft_20ms. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
rw . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A6H 1
pats1. . . . . . . . . . . . . . . . . PUBLIC DATA ARRAY 0014H 8
pats2. . . . . . . . . . . . . . . . . PUBLIC DATA ARRAY 001CH 8
soft_nop . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
_lcd_wrdata. . . . . . . . . . . . . . PUBLIC CODE PROC 0004H -----
lcddata. . . . . . . . . . . . . . . * REG * DATA CHAR 0003H 1
i. . . . . . . . . . . . . . . . . . AUTO DATA CHAR 0000H 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 559 ----
CONSTANT SIZE = 238 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 36 6
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
C51 COMPILER V7.06 LCD 09/25/2007 10:37:30 PAGE 5
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -