📄 51
字号:
123 1 delay(5);
124 1 WriteInstruction(0x01); //清屏幕指令,将以前的显示内容清除
125 1 delay(5);
126 1
127 1 }
128 /******************************************************************************
129 函数功能:显示小时
130 ******************************************************************************/
131 void DisplayHour()
132 {
133 1 unsigned char i,j;
134 1 i=h/10; //取整运算,求得十位数字
135 1 j=h%10; //取余运算,求得各位数字
136 1 WriteAddress(0x44); //写显示地址,将十位数字显示在第2行第5列
137 1 WriteData(digit[i]); //将十位数字的字符常量写入LCD
138 1 WriteData(digit[j]); //将个位数字的字符常量写入LCD
139 1
140 1 }
141 /******************************************************************************
142 函数功能:显示分钟
143 ******************************************************************************/
144 void DisplayMinute()
145 {
146 1 unsigned char i,j;
147 1 i=m/10; //取整运算,求得十位数字
148 1 j=m%10; //取余运算,求得各位数字
149 1 WriteAddress(0x47); //写显示地址,将十位数字显示在第2行第8列
150 1 WriteData(digit[i]); //将十位数字的字符常量写入LCD
151 1 WriteData(digit[j]); //将个位数字的字符常量写入LCD
152 1
153 1 }
154 /******************************************************************************
155 函数功能:显示秒
156 ******************************************************************************/
157 void DisplaySecond()
158 {
159 1 unsigned char i,j;
160 1 i=s/10; //取整运算,求得十位数字
161 1 j=s%10; //取余运算,求得各位数字
162 1 WriteAddress(0x4a); //写显示地址,将十位数字显示在第2行第11列
163 1 WriteData(digit[i]); //将十位数字的字符常量写入LCD
164 1 WriteData(digit[j]); //将个位数字的字符常量写入LCD
165 1 }
166
167 /*********************************************************************
168 main function
169 ***********************************************************************/
170 void main(void)
171 {
172 1 unsigned char i;
173 1 LcdInitiate(); //调用LCD初始化函数
174 1
175 1 TMOD=0x01; //使用定时器T0的模式1
176 1 TH0=(65536-46083)/256; //定时器T0的高8位设置初值
177 1 TL0=(65536-46083)%256; //定时器T0的低8位设置初值
178 1 EA=1; //开总中断
179 1 ET0=1; //定时器T0中断允许
C51 COMPILER V8.09 EX84 07/12/2010 14:33:30 PAGE 4
180 1 TR0=1; //启动定时器T0
181 1
182 1 count=0; //中断次数初始化为0
183 1 s=0; //秒初始化为0
184 1 m=0; //分钟初始化为0
185 1 h=0; //小时初始化为0
186 1
187 1 WriteAddress(0x03); //写地址,从第1行第4列开始显示
188 1 i=0; //从字符数组的第1个元素开始显示
189 1 while(string[i]!='\0') //只要没有显示到字符串的结束标志'\0',就继续
190 1 {
191 2 WriteData(string[i]); //将第i个字符数组元素写入LCD
192 2 i++; //指向下一个数组元素
193 2 }
194 1 WriteAddress(0x46); //写地址,将第二个分号显示在第2行第7列
195 1 WriteData(':'); //将分号的字符常量写入LCD
196 1 WriteAddress(0x49); //写地址,将第二个分号显示在第2行第10列
197 1 WriteData(':'); //将分号的字符常量写入LCD
198 1 while(1) //无限循环
199 1 {
200 2 DisplayHour(); //显示小时
201 2 delay(5); //给硬件一点反应时间
202 2 DisplayMinute(); //显示分钟
203 2 delay(5); //给硬件一点反应时间
204 2 DisplaySecond(); //显示秒
205 2 delay(5); //给硬件一点反应时间
206 2 }
207 1 }
208 /*******************************************************
209 函数功能:定时器T0的中断服务函数
210 ********************************************************/
211 void Time0(void ) interrupt 1 using 1 //定时器T0的中断编号为1,使用第1组工作寄存器
212 {
213 1 count++; //每产生1次中断,中断累计次数加1
214 1 if(count==20) //如果中断次数计满20次
215 1 {
216 2 count=0; //中断累计次数清0
217 2 s++; //秒加1
218 2 }
219 1 if(s==60) //如果计满60秒
220 1 {
221 2 s=0; //秒清0
222 2 m++; //分钟加1
223 2 }
224 1 if(m==60) //如果计满60分
225 1 {
226 2 m=0; //分钟清0
227 2 h++; //小时加1
228 2 }
229 1 if(h==24) //如果计满24小时
230 1 {
231 2 h=0; //小时清0
232 2 }
233 1 TH0=(65536-46083)/256; //定时器T0高8位重新赋初值
234 1 TL0=(65536-46083)%256; //定时器T0低8位重新赋初值
235 1 }
236
237
238
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V8.09 EX84 07/12/2010 14:33:30 PAGE 5
CODE SIZE = 411 ----
CONSTANT SIZE = 24 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
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 + -