⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clock.lst

📁 用C写的单片机中断时钟
💻 LST
📖 第 1 页 / 共 2 页
字号:
 202   1      		Delay(3);	
 203   1      		P2_6 = 1;
 204   1      
 205   1      		P2_7 = 0;//第8个数码管显示闹钟秒的十位。
 206   1      		Led[5] =naozhong.miao % 10;
 207   1      		P0 = SEG_TAB1[Led[5]];	
 208   1      		Delay(3);	
 209   1      		P2_7= 1;
 210   1      }			
 211          
 212          /********************************************************************************************/
 213          
 214          void IsrTimer0(void) interrupt 1 using 1    //定时器0中断服务程序
 215          {
 216   1      	static unsigned char count = 0;	//定义静态变量count
 217   1      
 218   1      	TR0 = 0;               //以下调整出栈入栈的时间误差
 219   1          TL0 += (_TH0_TL0_ + 9) % 256;
 220   1         	TH0 += (_TH0_TL0_ + 9) / 256 + (char)CY;
 221   1          TR0 = 1;
 222   1      
 223   1          count++;
 224   1      	if(count == M)  //1秒种时间到
 225   1      	{
 226   2      		count = 0;	
 227   2      		clock.sec++;		
 228   2      		if(	clock.sec == 60)  //1分钟时间到
 229   2      		{
 230   3      			clock.min++;
 231   3      			clock.sec = 0;
 232   3      			if(	clock.min == 60)  //1小时时间到
 233   3      			{
 234   4      				clock.hour++;
 235   4      				clock.min = 0;
 236   4      				if(	clock.hour == 24)  //24小时时间到
 237   4      				{
 238   5      					clock.hour = 0;
 239   5      					clock.min = 0;
 240   5      					clock.sec = 0;
 241   5      				    rili.day++;
C51 COMPILER V6.12  CLOCK                                                                  07/05/2007 08:11:03 PAGE 5   

 242   5                          if(rili.day==31)  //一天
 243   5                           {
 244   6                            rili.month++;
 245   6                            rili.day=0;
 246   6                            if(rili.month==13)  //一月
 247   6                             {
 248   7                              rili.year++;
 249   7                              rili.month=0;
 250   7                             }
 251   6                           } 
 252   5                       }
 253   4      			}
 254   3      		}
 255   2      	}
 256   1      }
 257          
 258          /**********************************************************************************/
 259          
 260          int keypressed1()       //键盘调节时间函数
 261          {
 262   1         if(P3_4 == 0)
 263   1          {
 264   2            Delay(50);
 265   2            if(P3_4 == 0)
 266   2                clock.sec ++;
 267   2      
 268   2          }
 269   1         
 270   1      	if(P3_5 == 0)
 271   1          {
 272   2            Delay(50);
 273   2            if(P3_5 == 0)
 274   2                clock.min ++;
 275   2          }
 276   1         
 277   1      	if(P3_6 == 0)
 278   1          {
 279   2            Delay(50);
 280   2            if(P3_6 == 0)
 281   2                clock.hour ++;
 282   2          }
 283   1         
 284   1          if(clock.sec ==60) clock.sec =0;
 285   1          if(clock.min==60) clock.min =0;
 286   1          if(clock.hour==24) clock.hour =0;
 287   1      }
 288          
 289          int keypressed2()      //键盘调节日期函数
 290          {
 291   1         if(P3_4 == 0)
 292   1          {
 293   2            Delay(50);
 294   2            if(P3_4 == 0)
 295   2                rili.day ++;
 296   2           }
 297   1          
 298   1      	 if(P3_5 == 0)
 299   1          {
 300   2            Delay(50);
 301   2            if(P3_5 == 0)
 302   2                rili.month ++;
 303   2           }
C51 COMPILER V6.12  CLOCK                                                                  07/05/2007 08:11:03 PAGE 6   

 304   1          
 305   1      	if(P3_6 == 0)
 306   1          {
 307   2            Delay(50);
 308   2            if(P3_6 == 0)
 309   2                rili.year ++;
 310   2          }
 311   1         
 312   1          if(rili.day ==31) rili.day =1;
 313   1          if(rili.month==13) rili.month =1;
 314   1          if(rili.year==2031) rili.year =1997;
 315   1      }
 316          
 317          int keypressed3()     //键盘调节闹钟时间函数
 318          {
 319   1         if(P3_4 == 0)
 320   1          {
 321   2            Delay(50);
 322   2            if(P3_4 == 0)
 323   2                naozhong.miao++;
 324   2          }
 325   1         
 326   1      	if(P3_5 == 0)
 327   1          {
 328   2            Delay(50);
 329   2            if(P3_5 == 0)
 330   2                naozhong.fen++;
 331   2          }
 332   1         
 333   1      	if(P3_6 == 0)
 334   1          {
 335   2            Delay(50);
 336   2            if(P3_6 == 0)
 337   2                naozhong.shi++;
 338   2          }
 339   1         
 340   1          if(naozhong.miao==60) naozhong.miao=0;
 341   1          if(naozhong.fen==60)  naozhong.fen=0;
 342   1          if(naozhong.shi==24)  naozhong.shi=0;
 343   1      }
 344          
 345          
 346          /********************************************************************************/
 347          
 348          
 349          void Timer0Init(void)    //初始化定时器0程序
 350          {
 351   1      	TMOD = 0x01;   //设置模式1 定时器0 工作方式0
 352   1      
 353   1      	TH0 = HI;   //给TH0,TL0赋初始值
 354   1      	TL0 = LO;
 355   1      
 356   1      	TR0 = 1;  //启动定时器0
 357   1      	ET0 = 1;  //定时器中断开
 358   1      	EA = 1;	//总中断开
 359   1      }
 360          
 361          
 362          void main(void)
 363          {
 364   1        int j=0,r=0;
 365   1        Timer0Init();
C51 COMPILER V6.12  CLOCK                                                                  07/05/2007 08:11:03 PAGE 7   

 366   1        while(1)
 367   1        {
 368   2          if(P3_7 == 0)
 369   2          {
 370   3            Delay(20);
 371   3            if(P3_7 == 0)
 372   3               r++;         //按键被按下次数
 373   3            if(r==6) r=0;	
 374   3      	  if(r<2) j=0;	 
 375   3            if(r>=2&&r<=3)j=1 ;  //考虑到硬件不稳定,让每按两次才实现模块转换功能
 376   3            if(r<6&&r>4)j=2;}
 377   2            switch(j)
 378   2            {
 379   3      	   case 0:Disp1();
 380   3                   keypressed1();break;
 381   3             case 1:Disp3();
 382   3                   keypressed3();break;
 383   3             case 2:Disp2();
 384   3                  keypressed2();break;
 385   3             default:break;
 386   3      	   }
 387   2             
 388   2         if(clock.sec==naozhong.miao&&clock.min==naozhong.fen&&clock.hour==naozhong.shi)
 389   2         {                      //闹钟和时钟时间相同,闹铃
 390   3      	BEEP_on;      
 391   3      	Delay(100);
 392   3          BEEP_off;
 393   3         }
 394   2        }
 395   1      }
 396          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1078    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     45       2
   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 + -