📄 timer01.lst
字号:
C51 COMPILER V8.05a TIMER01 02/07/2009 16:55:59 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE TIMER01
OBJECT MODULE PLACED IN timer01.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE timer01.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*shi fen miao 是char 型的为什么不用赋初值?
2 *s1 能进行时分秒位选择,但只能选择一次
3 *s2 不能完成对时分秒的位的加
4 */
5 #include<reg52.h>
6 #define uchar unsigned char
7 #define uint unsigned int
8 uchar s1num;
9 uchar count;
10 char shi,fen,miao;
11 uint i;
12 sbit rs=P3^5;
13 sbit lcden=P3^4;
14 sbit s1=P2^0;
15 sbit s2=P2^1;
16 sbit s3=P2^2;
17 uchar code table[]=" 2007-7-30 MON";//第一行显示
18 uchar code table1[]=" 00:00:00";//第二行 共12个字符,地址从零开始计0~11
19 /*液晶内延时函数*/
20 void delay(uint z)
21 {
22 1 uint x,y;
23 1 for(x=z;x>0;x--)
24 1 for(y=110;y>0;y--);
25 1 }
26 /*1602液晶写指令初始化,条件是rs为低电平,E为高脉冲*/
27 void write_com(uchar com)
28 {
29 1 rs=0;
30 1 lcden=0;
31 1 P0=com;//写入指令
32 1 delay(5);//延时5ms
33 1 lcden=1;
34 1 delay(5);
35 1 lcden=0;
36 1 }
37 /*1602液晶写数据初始化,条件是rs为高电平电平,E为高脉冲*/
38
39 void write_date(uchar date)
40 {
41 1 rs=1;
42 1 lcden=0;
43 1 P0=date;//写入指令
44 1 delay(5);//延时5ms
45 1 lcden=1;
46 1 delay(5);
47 1 lcden=0;
48 1 }
49 /*初始化液晶1602,说明书上有初始化设置,设置液晶的显示方式*/
50 void init()
51 {
52 1 lcden=0;
53 1 write_com(0x38);//显示模式设置,设置为16*2,5*7点阵,8位数据接口
54 1 write_com(0x0c);//开显示,不显示光标,光标不显示。
55 1 write_com(0x06);//当读或写一个字符后地址指针加1,且光标加1。
C51 COMPILER V8.05a TIMER01 02/07/2009 16:55:59 PAGE 2
56 1 write_com(0x01);//刷新,数据指针清零、所有显示清零,不写的话刚显示会有一个黑团
57 1 write_com(0x80);//初始化地址,默认地址80H从第二行开始显示write_com(0x80+0x40h)
58 1 TMOD=0x01;
59 1 TH0=(65536-50000)/256;//12mhZ
60 1 TL0=(65536-50000)%256;//50MS
61 1 EA=1;
62 1 ET0=1;
63 1 TR0=1;
64 1 for (i=0;i<=12;i++)
65 1 write_date(table[i]);
66 1 write_com(0x80+0x40);
67 1 for(i=0;i<12;i++)
68 1 write_date(table1[i]);
69 1 }
70 void write_sfm(uchar add ,uchar date)//时分秒函数,add为地址变量,date为写入的时分秒
71 {
72 1 uchar shi ,ge;
73 1 shi=date/10;
74 1 ge=date%10;//分离date时分秒的十位和个位用数码管也得分离
75 1 write_com(0x80+0x40+add);//时分秒的地址
76 1 write_date(0x30+shi);//跟据acs码,先送十位
77 1 write_date(0x30+ge);
78 1 }
79 void keyscan()
80 {
81 1 if(s1==0)
82 1 {
83 2 delay(5);
84 2 if(s1==0)
85 2 {
86 3 s1num++;
87 3 while(!s1);
88 3 switch(s1num)
89 3 {
90 4 case 1:
91 4 {
92 5 write_com(0x80+0x40+11);
93 5 write_com(0x0f);
94 5 TR0=0;
95 5 } break;
96 4 case 2:
97 4 {
98 5 write_com(0x80+0x40+8) ;
99 5 write_com(0x0f);
100 5 TR0=0;
101 5 } break;
102 4 case 3:
103 4 {
104 5 write_com(0x80+0x40+5);
105 5 write_com(0x0f);
106 5 TR0=0;
107 5 } break;
108 4 default:
109 4 {
110 5 write_com(0x0c);
111 5 TR0=1;
112 5 }
113 4 }
114 3 }//s1键被按下
115 2 if(s1num!=0)
116 2 {
117 3 if(s2==0)
C51 COMPILER V8.05a TIMER01 02/07/2009 16:55:59 PAGE 3
118 3 {
119 4 delay(5);
120 4 if(s2==0)
121 4 {
122 5 while(!s2);
123 5 switch(s1num)
124 5 {
125 6 case 1:
126 6 {
127 7 miao++;
128 7 if(miao==60) miao=0;
129 7 write_sfm(10,miao);
130 7 } break;
131 6 case 2:
132 6 {
133 7 fen++;
134 7 if(fen==60) fen=0;
135 7 write_sfm(7,fen);
136 7 } break;
137 6 default:
138 6 {
139 7 shi++;
140 7 if(shi==24) shi=0;
141 7 write_sfm(4,shi);
142 7 }
143 6
144 6 }
145 5 }
146 4 }
147 3 }
148 2 }
149 1 }
150
151 void main()
152 {
153 1 init();
154 1 while(1)
155 1 {
156 2 keyscan();
157 2 }
158 1 }
159 void timer0() interrupt 1
160 {
161 1 TH0=(65536-50000)/256;
162 1 TL0=(65536-50000)%256;
163 1 count++;
164 1 if(count==20)//1s
165 1 {
166 2 count=0;
167 2 miao++;
168 2 if(miao==60)// 判断秒是否到达60
169 2 {
170 3 miao=0;
171 3 fen++;
172 3 if(fen==60)
173 3 {
174 4 fen=0;
175 4 shi++;
176 4 if (shi==24)
177 4 {
178 5 shi=0;
179 5 }
C51 COMPILER V8.05a TIMER01 02/07/2009 16:55:59 PAGE 4
180 4 write_sfm(4,shi);
181 4 }
182 3 write_sfm(7,fen);
183 3 }
184 2 write_sfm(10,miao);//根据table1[]中秒的十位的地址
185 2 }
186 1
187 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 458 ----
CONSTANT SIZE = 29 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 ----
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 + -