📄 lcd时钟.lst
字号:
C51 COMPILER V8.02 LCD时钟 08/19/2008 21:00:06 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD时钟
OBJECT MODULE PLACED IN lcd时钟.OBJ
COMPILER INVOKED BY: D:\Program Files\KEIL\C51\BIN\C51.EXE lcd时钟.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include <intrins.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5 #define BOOL bit
6 sbit remoteout=P3^2;
7 sbit rs = P1^0;
8 sbit rw = P1^1;
9 sbit ep = P1^2;
10 uchar temp,i,num;
11 uchar miaoge,miaoshi,fengge,fengshi,shige,shishi;
12 uchar code dis1[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
13 //BYTE code dis2[]={0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xc0,0xc1,0xc3,0xc4,0xc5,0xc6};
14 uchar code dis2[]={" Time to time "};
15 delay(uchar ms)
16 { // 延时子程序
17 1 uchar i;
18 1 while(ms--)
19 1 {
20 2 for(i = 0; i< 250; i++)
21 2 {
22 3 _nop_();
23 3 _nop_();
24 3 _nop_();
25 3 _nop_();
26 3 }
27 2 }
28 1 }
29
30 BOOL lcd_bz()
31 { // 测试LCD忙碌状态
32 1 BOOL result;
33 1 rs = 0;
34 1 rw = 1;
35 1 ep = 1;
36 1 _nop_();
37 1 _nop_();
38 1 _nop_();
39 1 _nop_();
40 1 result = (BOOL)(P0 & 0x80);
41 1 ep = 0;
42 1 return result;
43 1 }
44
45 lcd_wcmd(uchar cmd)
46 { // 写入指令数据到LCD
47 1 while(lcd_bz());
48 1 rs = 0;
49 1 rw = 0;
50 1 ep = 0;
51 1 _nop_();
52 1 _nop_();
53 1 P0 = cmd;
54 1 _nop_();
55 1 _nop_();
C51 COMPILER V8.02 LCD时钟 08/19/2008 21:00:06 PAGE 2
56 1 _nop_();
57 1 _nop_();
58 1 ep = 1;
59 1 _nop_();
60 1 _nop_();
61 1 _nop_();
62 1 _nop_();
63 1 ep = 0;
64 1 }
65
66 lcd_pos(uchar pos)
67 { //设定显示位置
68 1 lcd_wcmd(pos | 0x80);
69 1 }
70
71 lcd_wdat(uchar dat)
72 { //写入字符显示数据到LCD
73 1 while(lcd_bz());
74 1 rs = 1;
75 1 rw = 0;
76 1 ep = 0;
77 1 P0 = dat;
78 1 _nop_();
79 1 _nop_();
80 1 _nop_();
81 1 _nop_();
82 1 ep = 1;
83 1 _nop_();
84 1 _nop_();
85 1 _nop_();
86 1 _nop_();
87 1 ep = 0;
88 1 }
89
90 lcd_init()
91 { //LCD初始化设定
92 1 lcd_wcmd(0x38); //功能设置
93 1 delay(1);
94 1 lcd_wcmd(0x0c); //显示开关控制
95 1 delay(1);
96 1 lcd_wcmd(0x01); //清除LCD的显示内容
97 1 delay(1);
98 1 }
99 time()
100 {
101 1 if(temp==100)
102 1 {
103 2 temp=0;
104 2
105 2 miaoge++;
106 2 if(miaoge>=10)
107 2 {
108 3 miaoge=0;
109 3 miaoshi++;
110 3 if(miaoshi>=6)
111 3 {
112 4 miaoshi=0;
113 4 fengge++;
114 4 if(fengge>=10)
115 4 {
116 5 fengge=0;
117 5 fengshi++;
C51 COMPILER V8.02 LCD时钟 08/19/2008 21:00:06 PAGE 3
118 5 if(fengshi>=6)
119 5 {
120 6 fengshi=0;
121 6 shige++;
122 6 if(shige>=10)
123 6 {
124 7 shige=0;
125 7 shishi++;
126 7 if(shishi>2)
127 7 shishi=0;
128 7 }
129 6
130 6 }
131 5 }
132 4 }
133 3 }
134 2
135 2
136 2 }
137 1 lcd_pos(0X07); // 设置显示位置为第二行12区为秒个位
138 1 lcd_wdat(dis1[miaoge]);
139 1 lcd_pos(0X06); // 设置显示位置为第二行11区为秒十位
140 1 lcd_wdat(dis1[miaoshi]);
141 1 lcd_pos(0x05);
142 1 lcd_wdat(0x3a);
143 1 lcd_pos(0X04); // 设置显示位置为第二行的第9区为分个位
144 1 lcd_wdat(dis1[fengge]);
145 1 lcd_pos(0X03); // 设置显示位置为第二行的第8区为分十位
146 1 lcd_wdat(dis1[fengshi]);
147 1 lcd_pos(0x02);
148 1 lcd_wdat(0x3a);
149 1 lcd_pos(0X01); // 设置显示位置为第二行的第6区时十位
150 1 lcd_wdat(dis1[shige]);
151 1 lcd_pos(0X00); // 设置显示位置为第二行的第5区时个位
152 1 lcd_wdat(dis1[shishi]);
153 1 }
154 main()
155 { EA=1;
156 1 EX0=1;
157 1 TMOD=0X01;
158 1 TH1=0X4c;
159 1 TL1=0x00;
160 1 ET1=1;
161 1 TR1=1;
162 1 lcd_init(); // 初始化LCD
163 1 delay(10);
164 1 while(1)
165 1 {
166 2 time();
167 2 }
168 1
169 1 }
170 void int0(void) interrupt 0
171 {
172 1 num++;
173 1 P0=~P0;
174 1
175 1 }
176 void time1(void) interrupt 3
177 { ET1=0;
178 1 TR1=0;
179 1 TH1=0X4c;
C51 COMPILER V8.02 LCD时钟 08/19/2008 21:00:06 PAGE 4
180 1 TL1=0X00;
181 1 TR1=1;
182 1 temp++;
183 1 ET1=1;
184 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 355 ----
CONSTANT SIZE = 27 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 9 ----
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 + -