📄 yejingshizhong.lst
字号:
C51 COMPILER V7.50 YEJINGSHIZHONG 08/24/2007 10:53:40 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE YEJINGSHIZHONG
OBJECT MODULE PLACED IN yejingshizhong.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE yejingshizhong.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include "intrins.h"
3 #include "absacc.h"
4
5 sbit RS=P2^0;
6 sbit RW=P2^1;
7 sbit E = P2^2;
8 sbit PSB = P2^3;
9 sbit RST = P2^4;
10 sbit key1= P2^5;
11 sbit tiaoh=P2^6;
12 sbit tiaom=P2^7;
13 sbit P37=P3^7;
14
15 unsigned char dispbuf[8]={0,0,10,0,0,10,0,0};
16 unsigned char flag;
17 unsigned char second;
18 unsigned char minite;
19 unsigned char hour;
20 unsigned int tcnt;
21 unsigned char z;
22 unsigned int tcnt1;
23 unsigned char scnt1;
24 unsigned char y;
25
26 void delay10ms(void)
27 {
28 1 char i,j;
29 1 for(i=20;i>0;i--)
30 1 for(j=248;j>0;j--);
31 1 }
32 void delay_10us( unsigned char x )
33 {
34 1 while( x-- );
35 1 }
36 void delay_ms( unsigned char cnt )
37 {
38 1 unsigned char i;
39 1 do{
40 2 i = 4;
41 2 do{
42 3 delay_10us(39);
43 3 } while(--i);
44 2 } while( --cnt );
45 1 }
46 void smNop(void)
47 {
48 1 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
49 1 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
50 1 }
51
52 void check_busy(void)
53 {
54 1 P1=0xff;
55 1 RS=0;
C51 COMPILER V7.50 YEJINGSHIZHONG 08/24/2007 10:53:40 PAGE 2
56 1 RW=1;
57 1 while(1)
58 1 {smNop();
59 2 E=1;
60 2 smNop();
61 2 if(P1<0x80)
62 2 break;
63 2 smNop();
64 2 E=0;
65 2 }
66 1 E=0;
67 1 }
68
69 void send_com(const unsigned char command)
70 {
71 1 check_busy();
72 1 RS = 0;
73 1 RW = 0;
74 1 P1 = command;
75 1 E = 1;
76 1 smNop();
77 1 E = 0;
78 1 }
79
80 void send_com_init(const unsigned char command_init )
81 {
82 1 RS = 0;
83 1 RW = 0;
84 1 P1 = command_init;
85 1 E = 1;
86 1 smNop();
87 1 E = 0;
88 1 }
89
90 void send_data(const unsigned char data_a)
91 {
92 1 check_busy();
93 1 RS = 1; //DB7-DB0为显示数据
94 1 RW = 0; //写入数据
95 1 P1 = data_a;
96 1 E = 1;
97 1 smNop();
98 1 E = 0; //下降沿
99 1 }
100
101 void initial_LCD(void)
102 {
103 1 PSB = 1; //水平显示
104 1 RST = 0; //复位
105 1 _nop_();
106 1 _nop_();
107 1 RST = 1; //不复位
108 1 _nop_();
109 1 delay_10us(10);
110 1 send_com_init(0x30);//30H--基本指令操作
111 1 delay_10us(4);
112 1 send_com_init(0x0c);//开显示,关光标,不闪烁。
113 1 delay_10us(10);
114 1 send_com_init(0x01);//清除显示
115 1 delay_ms(10);
116 1 send_com_init(0x06);//指定在资料写入或读取时,光标的移动方向,DDRAM的地址计数器(AC)加1。
117 1 }
C51 COMPILER V7.50 YEJINGSHIZHONG 08/24/2007 10:53:40 PAGE 3
118
119 void Display_num( unsigned char *ptr, unsigned char line, unsigned char col, unsigned char i1 )
120 {
121 1 unsigned char ddram = 0x00;
122 1
123 1 if(line == 1)
124 1 ddram = 0x80;
125 1 if(line == 2)
126 1 ddram = 0x90;
127 1 if(line == 3)
128 1 ddram = 0x88;
129 1 if(line == 4)
130 1 ddram = 0x98;
131 1
132 1 ddram = ddram + col - 1;
133 1
134 1 send_com( ddram ); //定位显示起始地址
135 1
136 1 send_data( ptr[i1] );//输出单个字符
137 1
138 1 }
139
140 void Display_ch( unsigned char *ptr, unsigned char line, unsigned char col, unsigned char length )
141 {
142 1
143 1 unsigned char ddram = 0x00;
144 1 unsigned char i1;
145 1 if(line == 1)
146 1 ddram = 0x80;
147 1 if(line == 2)
148 1 ddram = 0x90;
149 1 if(line == 3)
150 1 ddram = 0x88;
151 1 if(line == 4)
152 1 ddram = 0x98;
153 1
154 1 ddram = ddram + col - 1;
155 1 send_com( ddram ); //定位显示起始地址
156 1 for( i1 = 0;i1 < length;i1 ++ )
157 1 {
158 2 send_data(ptr[i1*2]);//输出单个字符
159 2 send_data(ptr[i1*2+1]);
160 2 }
161 1 }
162
163 const unsigned char code suc[]=
164 { "智能闹钟"
165 };
166 const unsigned char code shuzhi[]={
167 "0123456789 "};
168
169 void main()
170 {TMOD=0x22;
171 1 TH1=0x06;
172 1 TL1=0x06;
173 1 ET1=1;
174 1 EA=1;
175 1 TH0=0x06;
176 1 TL0=0x06;
177 1 ET0=1;
178 1 EA=1;
179 1 TR0=1;
C51 COMPILER V7.50 YEJINGSHIZHONG 08/24/2007 10:53:40 PAGE 4
180 1 initial_LCD();
181 1 Display_ch(suc,1,3,4);
182 1 while(1)
183 1 {
184 2 if(tiaoh==0)
185 2 {delay10ms();
186 3 if(tiaoh==0)
187 3 {hour++;
188 4 if(hour==24)
189 4 hour=0;
190 4 dispbuf[0]=hour/10;
191 4 dispbuf[1]=hour%10;
192 4 while(tiaoh==0);
193 4 }
194 3 }
195 2 if(tiaom==0)
196 2 {delay10ms();
197 3 if(tiaom==0)
198 3 {minite++;
199 4 if(minite==60)
200 4 minite=0;
201 4 dispbuf[3]=minite/10;
202 4 dispbuf[4]=minite%10;
203 4 while(tiaom==0);
204 4 }
205 3 }
206 2 if(flag==1)
207 2 {flag=0;
208 3 send_com(0x90);
209 3 for(y=0;y<8;y++)
210 3 {send_data( shuzhi[dispbuf[y]] );}
211 3 if(dispbuf[3]==5&&dispbuf[4]==9&&dispbuf[6]==5)
212 3 TR1=1;
213 3 }
214 2
215 2 }
216 1 }
217
218 void t0(void) interrupt 1 using 0
219 {
220 1 tcnt++;
221 1 if(tcnt==4000)
222 1 {
223 2 tcnt=0;
224 2 flag=1;
225 2 second++;
226 2 if(second==60)
227 2 {
228 3 second=0;
229 3 minite++;
230 3 if(minite==60)
231 3 {
232 4 minite=0;
233 4 hour++;
234 4 if(hour==24)
235 4 {
236 5 hour=0;
237 5 }
238 4 }
239 3 }
240 2 dispbuf[7]=second%10;
241 2 dispbuf[6]=second/10;
C51 COMPILER V7.50 YEJINGSHIZHONG 08/24/2007 10:53:40 PAGE 5
242 2 dispbuf[4]=minite%10;
243 2 dispbuf[3]=minite/10;
244 2 dispbuf[1]=hour%10;
245 2 dispbuf[0]=hour/10;
246 2 }
247 1 }
248
249 void t1(void) interrupt 3 using 1
250 {
251 1 scnt1++;
252 1 if(scnt1==4)
253 1 {scnt1=0;
254 2 P37=~P37;}
255 1 tcnt1++;
256 1 if(tcnt1==800)
257 1 {TR1=0;
258 2 P37=0;}
259 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 657 ----
CONSTANT SIZE = 21 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 19 12
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 + -