📄 +
字号:
C51 COMPILER V7.50 时钟 06/09/2010 21:22:26 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 时钟
OBJECT MODULE PLACED IN 时钟.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 时钟.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 1、按键可以调整当时时间
3 2、按键可以调节定时时间
4 3、定时时间到继电器吸合
5
6 *8位数码管显示 时间格式格式 12-08-00 标示12点08分00秒
7
8 S1 用于小时 加1操作
9 S2 用于小时减1操作
10 S3 用于分钟 加1操作
11 S4 用于分钟减1操作
12 */
13
14 /*-----------------------------------------------
15 名称:普通时钟
16 内容:
17 ------------------------------------------------*/
18 #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
19
20
21 sbit KEY1=P3^0; //定义端口参数
22 sbit KEY2=P3^1;
23 sbit KEY3=P3^2;
24 sbit KEY4=P3^3;
25
26 sbit LED=P1^2; //定义指示灯参数
27 code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
28 //共阴数码管 0-9
29 unsigned char StrTab[8]; //定义缓冲区
30 unsigned char minute=30,hour=12,second; //定义并且初始化值 12:30:00
31 /******************************************************************/
32 /* 延时函数 */
33 /******************************************************************/
34 void delay(unsigned int cnt)
35 {
36 1 while(--cnt);
37 1 }
38
39 /******************************************************************/
40 /* 显示处理函数 */
41 /******************************************************************/
42 void Displaypro(void)
43 {
44 1
45 1 StrTab[0]=tab[hour/10]; //显示小时
46 1 StrTab[1]=tab[hour%10];
47 1 StrTab[2]=0x40; //显示"-"
48 1 StrTab[3]=tab[minute/10]; //显示分钟
49 1 StrTab[4]=tab[minute%10];
50 1 StrTab[5]=0x40; //显示"-"
51 1 StrTab[6]=tab[second/10]; //显示秒
52 1 StrTab[7]=tab[second%10];
53 1
54 1 }
55 /******************************************************************/
C51 COMPILER V7.50 时钟 06/09/2010 21:22:26 PAGE 2
56 /* 主函数 */
57 /******************************************************************/
58 main()//主函数
59 {
60 1 TMOD |=0x01;//定时器0 10ms in 12M crystal 用于计时
61 1 TH0=0xd8; //初值
62 1 TL0=0xf0;
63 1 ET0=1;
64 1 TR0=1;
65 1
66 1 TMOD |=0x10; //定时器1用于动态扫描
67 1 TH1=0xF8; //初值
68 1 TL1=0xf0;
69 1 ET1=1;
70 1 TR1=1;
71 1 EA =1;
72 1
73 1
74 1 Displaypro(); //调用显示处理
75 1
76 1 while(1)//主循环
77 1 {
78 2
79 2
80 2 if(!KEY1) //按键1去抖以及动作
81 2 {
82 3 delay(10000);
83 3 if(!KEY1)
84 3 {
85 4 hour++;if(hour==24)hour=0; //正常时间 小时 加1
86 4 Displaypro();
87 4 }
88 3 }
89 2
90 2 if(!KEY2) //按键2去抖以及动作
91 2 {
92 3 delay(10000);
93 3 if(!KEY2)
94 3 {
95 4 hour--;if(hour==255)hour=23; //正常时间 小时减1
96 4
97 4 Displaypro();
98 4 }
99 3 }
100 2 if(!KEY3) //按键去抖以及动作
101 2 {
102 3 delay(10000);
103 3 if(!KEY3)
104 3 {
105 4 minute++;if(minute==60)minute=0;//分加1
106 4 Displaypro();
107 4 }
108 3 }
109 2 if(!KEY4) //按键去抖以及动作
110 2 {
111 3 delay(10000);
112 3 if(!KEY4)
113 3 {
114 4 minute--;if(minute==255)minute=59; //分减1
115 4 Displaypro();
116 4 }
117 3 }
C51 COMPILER V7.50 时钟 06/09/2010 21:22:26 PAGE 3
118 2 }
119 1 }
120 /******************************************************************/
121 /* 定时器1中断 */
122 /******************************************************************/
123 void time1_isr(void) interrupt 3 using 0//定时器1用来动态扫描
124 {
125 1 static unsigned char num;
126 1 TH1=0xF8;//重入初值
127 1 TL1=0xf0;
128 1
129 1 switch (num){
130 2 case 0:P2=0;P0=StrTab[num];break; //分别调用缓冲区的值进行扫描
131 2 case 1:P2=1;P0=StrTab[num];break;
132 2 case 2:P2=2;P0=StrTab[num];break;
133 2 case 3:P2=3;P0=StrTab[num];break;
134 2 case 4:P2=4;P0=StrTab[num];break;
135 2 case 5:P2=5;P0=StrTab[num];break;
136 2 case 6:P2=6;P0=StrTab[num];break;
137 2 case 7:P2=7;P0=StrTab[num];break;
138 2 default:break;
139 2 }
140 1 num++; //扫描8次,使用8个数码管
141 1 if(num==8)
142 1 num=0;
143 1 }
144 /******************************************************************/
145 /* 定时器0中断 */
146 /******************************************************************/
147 void tim(void) interrupt 1 using 1
148 {
149 1 static unsigned char count;//定义内部静态变量
150 1
151 1 TH0=0xd8; //重新赋值
152 1 TL0=0xf0;
153 1 count++;
154 1 switch (count)
155 1 {
156 2 case 0:
157 2 case 20:
158 2 case 40:
159 2 case 60:
160 2 case 80:Displaypro(); //隔一定时间调用显示处理
161 2 break;
162 2 case 50:P1=~P1; //半秒 LED闪烁
163 2 break;
164 2 default:break;
165 2 }
166 1
167 1 if (count==100)
168 1 {
169 2 count=0;
170 2 second++; //秒加1
171 2 if(second==60)
172 2 {
173 3 second=0;
174 3 minute++; //分加1
175 3 if(minute==60)
176 3 {
177 4 minute=0;
178 4 hour++; //时加1
179 4 if(hour==24)
C51 COMPILER V7.50 时钟 06/09/2010 21:22:26 PAGE 4
180 4 hour=0;
181 4 }
182 3
183 3 }
184 2
185 2 }
186 1
187 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 426 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 13 ----
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 + -