📄 main.lst
字号:
C51 COMPILER V8.08 MAIN 09/22/2008 21:56:19 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #include<math.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5 sfr T2MOD=0X0C9;
6
7 sbit backlightkey=P2^7 ;
8 sbit lcdrs=P1^0;
9 sbit lcdrw=P1^1;
10 sbit lcde=P1^2;
11 sbit lcdbusy=P0^7;
12
13 sbit key1=P2^1;
14 sbit key2=P2^2;
15 sbit key3=P2^3;
16
17
18 static uchar timecount=0,timechange=0,count=0;
19 static uchar eorrflag=0;
20 uint counth=0,countl=0;
21 char rbuff[10],scount=0;//串口接收缓冲区和缓冲区已存数据个数
22
23 void lcdbusywait()
24 {
25 1 P0=0x0ff;
26 1 lcdrs=0;
27 1 lcdrw=1;
28 1 lcde=0;
29 1 ;
30 1 lcde=1;
31 1 while(lcdbusy);
32 1 lcde=1;
33 1 }
34
35 void waitcmd()
36 {
37 1 lcdrs=0;// clr p1.0
38 1 lcdrw=0;//clr p1.1
39 1 lcde=0;//clr p1.2
40 1 lcdbusywait();//acall busy
41 1 lcde=1;//setb p1.2
42 1 }
43
44 void lcdinit()
45 {
46 1 P0=0X01;
47 1 waitcmd();
48 1 P0=0X38;
49 1 waitcmd();
50 1 P0=0X0C;
51 1 waitcmd();
52 1 P0=0X06;
53 1 waitcmd();
54 1 P0=0X80;
55 1 waitcmd();
C51 COMPILER V8.08 MAIN 09/22/2008 21:56:19 PAGE 2
56 1 }
57
58 void write(uchar *str)
59 {
60 1 do{
61 2 P0=*str;
62 2 lcdrs=1;
63 2 lcdrw=0;
64 2 lcde=0;
65 2 lcdbusywait();
66 2 lcde=1;
67 2 }while(*(++str)!='\0');
68 1
69 1 }
70
71 void writenum(uint num,uchar bitnum)
72 {uchar str[8];
73 1 str[bitnum]='\0';
74 1 do
75 1 {
76 2 str[bitnum-1]=num%10+48;
77 2 num/=10;
78 2 }while(bitnum--);
79 1 write(str);
80 1 }
81
82 void ledbacklight(bit on) //on=1表示开灯,on=0表示关灯
83 {
84 1 backlightkey=~on;
85 1 }
86
87 void cursestatus(uchar statusx,uchar statusy)
88 {
89 1 if(statusx>16||statusx<1||statusy<1||statusy>2)
90 1 return;
91 1 else
92 1 {
93 2 if(statusy==1)
94 2 {
95 3 P0=0x80+statusx-1;
96 3 waitcmd();
97 3 }
98 2 else
99 2 {P0=0x0c0+statusx-1;
100 3 waitcmd();
101 3 }
102 2 }
103 1 }
104
105 void delay()
106 {uchar i,j;
107 1 for(i=0xff;i>0;i--)
108 1 for(j=0xff;j>0;j--)
109 1 ;
110 1 }
111
112 void cleardisplay()
113 {
114 1 P0=1;
115 1 waitcmd();
116 1 }
117
C51 COMPILER V8.08 MAIN 09/22/2008 21:56:19 PAGE 3
118 void sentbyte(uchar var)
119 {ES=0;
120 1 SBUF=var;
121 1 while(TI==0);TI=0;
122 1 ES=1;
123 1 }
124
125 void serial() interrupt 4 //串口中断服务程序
126 {
127 1 if(TI)
128 1 {
129 2 TI=0;
130 2 }
131 1
132 1 if (RI) {
133 2 RI = 0;
134 2 rbuff[scount] = SBUF;
135 2 SBUF=rbuff[scount];
136 2 scount++;
137 2 if(scount==10)scount=0;
138 2 }
139 1 }
140
141 void counter()interrupt 3 using 2
142 {
143 1 TL1=0;
144 1 TH1=0;
145 1 eorrflag=1;
146 1 TR1=0;
147 1 }
148
149 void timer()interrupt 1 using 3
150 {
151 1 TL0=0X0AF;
152 1 TH0=0X03C;
153 1 TR1=0;
154 1 count++;
155 1 if(count==2)
156 1 {counth=TH1;
157 2 countl=TL1;
158 2
159 2 timechange=1;
160 2 TL1=0;
161 2 TH1=0;
162 2 TR1=1;
163 2 timecount++;
164 2 count=0;
165 2 }
166 1
167 1 }
168
169 void main()
170 {
171 1 uint i=30;
172 1
173 1 //T0定时器与T1计数器开中断
174 1 IT0=0;
175 1 PT0=1;
176 1 PX0=0;
177 1 EA=1;
178 1 ET0=1;
179 1 EX0=1;
C51 COMPILER V8.08 MAIN 09/22/2008 21:56:19 PAGE 4
180 1 ET1=1;
181 1 TMOD=0X51;
182 1
183 1 lcdinit();
184 1 ledbacklight(1);
185 1 write("hello,world!");
186 1 for(;i>0;i--)
187 1 delay();
188 1
189 1 i=90;
190 1 cleardisplay();
191 1 cursestatus(1,1);
192 1 write("i am twolf");
193 1 cursestatus(1,2);
194 1 writenum(i,3);
195 1
196 1 //定时器0初始化并开启,定时为0.5S
197 1 TL0=0X0AF;
198 1 TH0=0X03C;
199 1 TR0=1;
200 1 //计数器1初始化并开启
201 1 TL1=0;
202 1 TH1=0;
203 1 TR1=1;
204 1
205 1 SCON = 0x50;
206 1 TCLK=1;
207 1 RCLK=1;
208 1 T2MOD = 0X01;
209 1 PCON = 0x80 ;
210 1 RCAP2H = 0xff;
211 1 RCAP2L = 0xdc;
212 1 TH2=0XFF;
213 1 TL2=0XDC;
214 1 TR2 = 1;
215 1 ES=1;
216 1
217 1 while(1)
218 1 {
219 2 if(eorrflag)write("eorr!");
220 2 if(timechange)
221 2 {
222 3 sentbyte(timecount);
223 3 timechange=0;
224 3 cursestatus(1,2);
225 3 countl=countl+counth*256;
226 3 writenum(countl,6);
227 3 write(" T:");
228 3 writenum((uint)timecount,3);
229 3 }
230 2 else continue;
231 2 }
232 1 }
233
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 579 ----
CONSTANT SIZE = 35 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 19 15
C51 COMPILER V8.08 MAIN 09/22/2008 21:56:19 PAGE 5
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -