📄 fun.lst
字号:
C51 COMPILER V7.50 FUN 05/09/2008 08:55:23 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE FUN
OBJECT MODULE PLACED IN fun.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE fun.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //文件名:fun.c
2 //文件包括:液晶模块的初始化子程序,写命令子程序,写数据子程序,按键扫描子程序,延时子程序,刷新时间子程序
3
4
5 //头文件
6 #include<config.h>
7
8
9 //延时1ms子程序程序
10 void Delay(uchar z)
11 {
12 1 uchar x,y;
13 1 for(x=z;x>0;x--)
14 1 for(y=100;y>0;y--);
15 1 }
16
17
18 //写命令子程序
19 void Write_com(uchar com)
20 {
21 1 RS=0;
22 1 RW=0;
23 1 Lcd_en=0;
24 1 P0=com;
25 1 Delay(5);
26 1 Lcd_en=1;
27 1 Delay(5);
28 1 Lcd_en=0;
29 1 }
30
31
32 //写数据子程序
33 void Write_data(uchar dat)
34 {
35 1 RS=1;
36 1 RW=0;
37 1 Lcd_en=0;
38 1 P0=dat;
39 1 Delay(5);
40 1 Lcd_en=1;
41 1 Delay(5);
42 1 Lcd_en=0;
43 1 }
44
45 /*
46 //读数据子程序
47 char Read_Data(void)
48 {
49 RS=1;
50 RW=1;
51 Lcd_en=0;
52 Delay(5);
53 Lcd_en=1;
54 Lcd_data=P0;
55 return(Lcd_data);
C51 COMPILER V7.50 FUN 05/09/2008 08:55:23 PAGE 2
56 }
57 */
58
59 //初始化子程序
60 //将开机要显示的内容和某些寄存器的处置全部初始化
61 void Initiate(void)
62 {
63 1 num=0;
64 1 temp=0;
65 1 // uchar t;
66 1 year=2008;
67 1 mon=5;
68 1 day=9;
69 1 we=5;
70 1 hour=8;
71 1 min=50;
72 1 sec=00;
73 1 SET_flag=0;
74 1 Lcd_en=0;
75 1 Write_com(0x38); //设置显示模式
76 1 Write_com(0x0c); //开显示,不显示光标
77 1 Write_com(0x06); //设置地址指针移动方式,每写一个字符后地址指针加1
78 1 Write_com(0x01); //显示清零,必须清零,否则液晶屏上会显示黑块
79 1 Write_com(0x80); //设置数据地址指针为第一行
80 1 for(t=0;t<16;t++)
81 1 {
82 2 Write_data(table[t]); //显示液晶第一行
83 2 Delay(5);
84 2 }
85 1 Write_com(0x80+0x40); //设置数据地址指针为第二行
86 1 for(t=0;t<16;t++)
87 1 {
88 2 Write_data(table1[t]); //显示液晶第二行
89 2 Delay(5);
90 2 }
91 1 TMOD=0x01;
92 1 TH0=(65536-50000)/256; //定时器计数器定时50ms
93 1 TL0=(65536-50000)%256;
94 1 EA=1;
95 1 ET0=1;
96 1 TR0=1;
97 1 }
98
99
100 //刷新时间子程序
101 void Write_Time(uchar add,uchar dat)
102 {
103 1 uchar shi,ge;
104 1 shi=dat/10;
105 1 ge=dat%10;
106 1 Write_com(0x80+0x40+add); //设置数据地址指针
107 1 Write_data(0x30+shi); //刷新时间的十位
108 1 Write_data(0x30+ge); //刷新时间的个位
109 1 }
110
111
112 //刷新日期子程序
113 void Write_Date(uchar add,uchar dat)
114 {
115 1 uchar shi,ge;
116 1 shi=dat/10;
117 1 ge=dat%10;
C51 COMPILER V7.50 FUN 05/09/2008 08:55:23 PAGE 3
118 1 Write_com(0x80+add); //设置数据地址指针
119 1 Write_data(0x30+shi); //刷新日期的十位
120 1 Write_data(0x30+ge); //刷新日期的个位
121 1 }
122
123
124 //刷新年子程序
125 void Write_Year(uchar add,int dat)
126 {
127 1 uchar qian,bai,shi,ge;
128 1 qian=dat/1000;
129 1 bai=dat/100%10;
130 1 shi=dat/10%10;
131 1 ge=dat%10;
132 1 Write_com(0x80+add); //设置数据地址指针
133 1 Write_data(0x30+qian); //刷新日期的十位
134 1 Write_data(0x30+bai); //刷新日期的个位
135 1 Write_data(0x30+shi); //刷新日期的十位
136 1 Write_data(0x30+ge); //刷新日期的个位
137 1
138 1 }
139 //键盘扫描子程序
140 void Key_scan(void)
141 {
142 1 if(SET==0)
143 1 {
144 2 Delay(5);
145 2 if(SET==0)
146 2 {
147 3 while(!SET);
148 3 SET_flag=1;
149 3 temp++;
150 3 if(temp==8)
151 3 {
152 4 temp=0;
153 4 SET_flag=0;
154 4 Write_com(0x0c); //光标不再闪烁
155 4 }
156 3 }
157 2 }
158 1 }
159
160
161 //
162 void Key_process(void)
163 {
164 1 TR0=0;
165 1 // Key_scan();
166 1 switch(temp)
167 1 {
168 2 case 1:
169 2 Write_com(0x80+0x40+9); //设置数据地址指针到秒钟的位置
170 2 Write_com(0x0f);
171 2 Up_key();
172 2 Down_key();
173 2 break;
174 2 case 2:
175 2 Write_com(0x80+0x40+6); //设置数据地址指针到分钟的位置
176 2 Up_key();
177 2 Down_key();
178 2 break;
179 2 case 3:
C51 COMPILER V7.50 FUN 05/09/2008 08:55:23 PAGE 4
180 2 Write_com(0x80+0x40+3); //设置数据地址指针到时钟的位置
181 2 Up_key();
182 2 Down_key();
183 2 break;
184 2 case 4:
185 2 Write_com(0x80+15); //设置数据地址指针到星期的位置
186 2 Up_key();
187 2 Down_key();
188 2 break;
189 2 case 5:
190 2 Write_com(0x80+11); //设置数据地址指针到日的位置
191 2 Up_key();
192 2 Down_key();
193 2 break;
194 2 case 6:
195 2 Write_com(0x80+8); //设置数据地址指针到月的位置
196 2 Up_key();
197 2 Down_key();
198 2 break;
199 2 case 7:
200 2 Write_com(0x80+3); //设置数据地址指针到年的位置
201 2 Up_key();
202 2 Down_key();
203 2 break;
204 2
205 2 default:break;
206 2 }
207 1 TR0=1;
208 1 }
209
210
211 //加调节键按键扫描程序
212 void Up_key(void)
213 {
214 1 if(value_up==0)
215 1 {
216 2 Delay(5);
217 2 if(value_up==0)
218 2 {
219 3 while(!value_up);
220 3 switch(temp)
221 3 {
222 4 case 1:
223 4 // Write_com(0x80+9);
224 4 // sec=Read_Data();
225 4 sec++;
226 4 if(sec==60)
227 4 sec=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -