📄 lcd.lst
字号:
C51 COMPILER V8.02 LCD 05/16/2008 19:34:16 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "AT89X51.H"
2 #define Ddata P0
3 sbit RS=P2^5;
4 sbit RW=P2^6;
5 sbit LCDE=P2^7;
6 //1PIN--GND 2PIN--VCC 3PIN--VO 4PIN--RS 5PIN--RW 6PIN--E 7-14PIN--DB0-DB7 15PIN--A 16PIN--K
7 unsigned char hour=12,min=0,sec=0;
8 unsigned int count=0;
9 unsigned char line1[16]={"www.gliet.edu.cn"};
10 unsigned char line2[16]={"Gui Lin 12:00:00"};
11 unsigned char tab[]={'0','1','2','3','4','5','6','7','8','9'};
12
13 void delay5ms()
14 {unsigned int i;
15 1 for (i=0;i<1000;i++);
16 1 }
17
18 void delay50us()
19 {register int i;
20 1 for (i=0;i<20;i++);
21 1 }
22
23 void delay()
24 {unsigned char m,n;
25 1 for(m=255;m>0;m--)
26 1 for(n=255;n>0;n--);}
27
28 wr_com(unsigned char comm)//********写控制字符程序 E=1 RS=0 RW=0**********//
29 {
30 1 LCDE=0;
31 1 RS=0; //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。
32 1 RW=0; //********当RS=1,无论是读操作还是写操作,都是指向数据寄存器。
33 1 LCDE=1;
34 1 Ddata=comm;
35 1 RS=0;
36 1 RW=0;
37 1 LCDE=0;
38 1 }
39
40 wr_data(unsigned char dat)//*****当前位置写字符子程序:E=1 RS=1 RW=0
41 {
42 1 LCDE=0;
43 1 RS=0; //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。
44 1 RW=0; //********当RS=1,无论是读操作还是写操作,都是指向数据寄存器。
45 1 RS=1;
46 1 RW=0;
47 1 LCDE=1;
48 1 Ddata=dat;
49 1 LCDE=0;
50 1 RS=0;
51 1 RW=0;
52 1 }
53
54
55 unsigned char busycheck()//*****忙状态检查*******//
C51 COMPILER V8.02 LCD 05/16/2008 19:34:16 PAGE 2
56 {
57 1 unsigned char i;
58 1 LCDE=0;
59 1 RS=0;
60 1 RW=0;
61 1 RS=0;
62 1 RW=1;
63 1 LCDE=1;
64 1 i=Ddata;
65 1 LCDE=0;
66 1 return(i);
67 1 }
68
69 void init()//**********初始化程序,必须按照产品的资料介绍的过程进行********//
70 {
71 1 wr_com(0x38); //*****显示模式设置必须三次,不用检测忙信号
72 1 delay5ms();
73 1 wr_com(0x38);
74 1 delay5ms();
75 1 wr_com(0x38);
76 1 delay5ms();
77 1 wr_com(0x01); ///***清屏****
78 1 delay5ms();
79 1 busycheck();
80 1 delay5ms();
81 1 wr_com(0x06); ///****光标移动设置***
82 1 delay5ms();
83 1 busycheck();
84 1 delay50us();
85 1 wr_com(0x38); ////***显示模式设置****
86 1 delay50us();
87 1 busycheck();
88 1 delay50us();
89 1 wr_com(0x0c); /////***显示开***
90 1 delay50us();
91 1 busycheck();
92 1 delay50us();
93 1 wr_com(0x40); //set cgram address
94 1 delay50us();
95 1 delay50us(); //***这些延时可用可不用***//
96 1 }
97
98
99 void display()
100 { unsigned char i;
101 1 wr_com(0x80); //set ram address
102 1 delay50us();
103 1 busycheck();
104 1 delay50us();
105 1 for(i=0;i<16;i++)
106 1 {wr_data(line1[i]); //display
107 2 delay50us();
108 2 busycheck();}
109 1 busycheck();
110 1 delay50us();
111 1 wr_com(0xc0);
112 1 delay50us();
113 1 busycheck();
114 1 delay50us();
115 1 for(i=0;i<16;i++)
116 1 {
117 2 wr_data(line2[i]); //display
C51 COMPILER V8.02 LCD 05/16/2008 19:34:16 PAGE 3
118 2 delay50us();
119 2 busycheck();
120 2 }
121 1 }
122
123
124 void main()
125 {
126 1 TMOD=0X01;
127 1 EA=1;
128 1 ET0=1;
129 1 TR0=1;
130 1 TH0=(65536-4995)/256;
131 1 TL0=(65536-4995)%256;
132 1 init();
133 1 while(1)
134 1 {line2[15]=tab[sec%10];line2[14]=tab[sec/10];
135 2 line2[12]=tab[min%10];line2[11]=tab[min/10];
136 2 line2[9]=tab[hour%10];line2[8]=tab[hour/10];
137 2 if(!P1_2){delay();if(!P1_2){delay();sec++;if(sec==60){sec=0;}}}
138 2 if(!P1_1){delay();if(!P1_1){delay();min++;if(min==60){min=0;}}}
139 2 if(!P1_0){delay();if(!P1_0){delay();hour++;if(hour==24){hour=0;}}}
140 2 display();
141 2 }
142 1 }
143
144 void t0(void)interrupt 1 using 0
145 {
146 1 TH0=(65536-4995)/256;
147 1 TL0=(65536-4995)%256;
148 1 count++;
149 1 if(count==200){count=0;sec++;}
150 1 if(sec==60){sec=0;min++;}
151 1 if(min==60){min=0;hour++;}
152 1 if(hour==24){hour=0;}
153 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 446 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 47 ----
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 + -