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

📄 时钟_1602.lst

📁 基于51单片机的1602显示的时钟c语言程序及汇编程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 183   1      //第1行
 184   1         comw(0x84);
 185   1         for(i=0;i<8;i++)
 186   1            { if(i==2||i==5) dataw(num[11]);
 187   2                     else dataw(num[time[i]]);
 188   2                //  if(i==2&&time[7]%2) P2=num[10];//秒闪
 189   2                }
 190   1      ////////////////////////////////////////////////////////////
 191   1      //第2行
 192   1         comw(0xc6);
 193   1         for(i=0;i<=3;i++)
 194   1            dataw(tmp[i]);
 195   1      }
 196          
 197          
 198          
 199          /****************************************************************************************
 200          显示时间调整子程序
 201          
 202          *****************************************************************************************/ 
 203          
 204          void t_adj(void)
 205          {  uchar i;
 206   1         time[0]=hour0/10;//
 207   1         time[1]=hour0%10;
 208   1         time[3]=minute0/10;
 209   1         time[4]=minute0%10;//将时间拆分
 210   1         
 211   1         if(dp_flag==1){if(right<2) time[right]=10;
 212   2                           else if(right>=2) time[right+1]=10;}//判断是否是当前调整位 ,是当前调整位闪烁
 213   1      //////////////////////////////////////////////////////
 214   1      //第1行 
 215   1         comw(0x80);
 216   1         for(i=0;i<6;i++)
 217   1            dataw(adj[i]); //" adjust"
 218   1         for(i=0;i<6;i++)
 219   1            dataw(adj_0[i]);//" time "
 220   1      /////////////////////////////////////////////////////
 221   1      //第2行
 222   1         comw(0xc5);
 223   1         for(i=0;i<5;i++)
 224   1            {if(i==2)dataw(num[11]);
 225   2                   else  dataw(num[time[i]]);}
 226   1      }
 227          
 228          
 229          
 230          /****************************************************************************************
 231           显示闹钟1调整子程序
 232          
 233          *****************************************************************************************/
 234          
 235           void t1_adj(void)
 236          {     uchar i;
 237   1            t1_set[0]=hour1/10;//
 238   1            t1_set[1]=hour1%10;
 239   1            t1_set[3]=minute1/10;
 240   1            t1_set[4]=minute1%10;//将定时1设定的时间拆分
 241   1      /////////////////////////////////////////////////////////////////////////////////////////////////
C51 COMPILER V7.50   时钟_1602                                                             08/18/2007 17:24:18 PAGE 5   

 242   1         if(dp_flag==1){if(right<2) t1_set[right]=10;
 243   2                          else if(right>=2) t1_set[right+1]=10;}//判断是否是当前调整位 ,是当前调整位闪烁
 244   1      ///////////////////////////////////////////////////////////////////////////////////////////////////
 245   1         comw(0x02);
 246   1      //第1行 
 247   1         comw(0x80); 
 248   1         for(i=0;i<6;i++)
 249   1            dataw(adj[i]); //" adjust"
 250   1         for(i=0;i<6;i++)
 251   1            dataw(adj_1[i]);//" t1 "
 252   1      ///////////////////////////////////////////////////////////////////////////////////////////////////
 253   1      //判断显示t1是显示on还是off 
 254   1            if(out==1){for(i=0;i<4;i++) dataw(off[i]);} 
 255   1                   else {for(i=0;i<4;i++)dataw(ON[i]);}//ON[]两个字母均为大写,用小写时会出错,也不知为什么
 256   1      /////////////////////////////////////////////////////
 257   1      //第2行
 258   1         comw(0xc5);
 259   1         for(i=0;i<5;i++)
 260   1            {if(i==2)dataw(num[11]);
 261   2                   else  dataw(num[t1_set[i]]);}    
 262   1      }
 263          
 264          
 265          
 266          /****************************************************************************************
 267           定时控制1输出子程序
 268          
 269          *****************************************************************************************/
 270          
 271              void t1_out(void)
 272          {       if(out1==0) p_out1=0;
 273   1                 else p_out1=1;
 274   1              if(hour0==hour1&&minute0==minute1) {p_out1=1;out1=1;}
 275   1      }
 276          
 277          
 278          
 279          /****************************************************************************************
 280          键盘扫描子程序
 281          
 282          *****************************************************************************************/
 283           void key_scan (void)
 284          
 285          {  
 286   1           key_flag=0;//将键盘按下标志位清零
 287   1      
 288   1               if(set_key==0) { set++;if(set==3) set=0;//设置加1,切换状态
 289   2                                 while(set_key==0);//等待键松开
 290   2                            }
 291   1               if(right_key==0){right++;if(right==4) right=0;//右移,切换调整位
 292   2                                 while(right_key==0) {;}}//等待键松开
 293   1      
 294   1               switch(set) //根据当前调整,将其时间传送给调整的缓存数组
 295   1                 { case 1: {ten_hour=hour0/10,hour=hour0%10,ten_minute=minute0/10,minute=minute0%10; adj_flag=1;} break
             -;//时间调整
 296   2                   case 2: {ten_hour=hour1/10,hour=hour1%10,ten_minute=minute1/10,minute=minute1%10;adj_flag=1;} break;
             -//定时1调整
 297   2                       //case 3: {ten_hour=hour2/10,hour=hour2%10,ten_minute=minute2/10,minute=minute2%10;} break;//定时2调整
 298   2                 }
 299   1      
 300   1               if(up_key==0) {  switch(right)//根据调整位进行相应调整
 301   2                                 { case 0:{ten_hour++;if(ten_hour==3)ten_hour=0;} break;//十时调整
C51 COMPILER V7.50   时钟_1602                                                             08/18/2007 17:24:18 PAGE 6   

 302   3                                                   case 1:{hour++;if((ten_hour!=2&&hour==10)||(ten_hour==2&&hour==4)) hour=0;} break;//时调整
 303   3                                                       case 2:{ten_minute++;if(ten_minute==6) ten_minute=0;} break;//十分调整
 304   3                                                       case 3:{minute++;if(minute==10) minute=0;} break;//分调整
 305   3                                                  }
 306   2                                                while(up_key==0) {;}//等待键松开
 307   2                                              }
 308   1      
 309   1            if(on_off_key==0)out=~out;//设置是否启动定时
 310   1                while(on_off_key==0){;};//等待键松开
 311   1      
 312   1         switch(set) //将调整后的时间传送回去
 313   1               { case 1:{hour0=ten_hour*10+hour;minute0=ten_minute*10+minute;}break;
 314   2                 case 2:{hour1=ten_hour*10+hour;minute1=ten_minute*10+minute;out1=out;}break;
 315   2              //  case 3:{hour2=ten_hour*10+hour,minute2=ten_minute*10+minute,out2=out;}break;
 316   2               }
 317   1      }
 318          
 319          /****************************************************************************************
 320          T0中断子程序
 321          
 322          *****************************************************************************************/
 323          
 324           void t0(void) interrupt 1 using 1 
 325          { uchar a,b;
 326   1         b++;a++;
 327   1      
 328   1        TH0=(65536-46080)/256;//     
 329   1        TL0=(65536-46080)%256;// 50ms定时
 330   1        if(a==5)  {a=0;dp_flag=~dp_flag;}
 331   1        if(b==20) {b=0;s_flag=1;second++;}//够1s则将数码管小数点取反,则看到闪烁
 332   1        if(second==60){second=0;minute0++;}//够1分钟则加分钟计数加1
 333   1        if(minute0==60){minute0=0,hour0++;}////够1小时则小时计数加1
 334   1        if(hour0==24)hour0=0;//够24小时则清零
 335   1      }
 336          /****************************************************************************************
 337           T1中断子程序
 338          
 339          *****************************************************************************************/  
 340          
 341          void t1(void) interrupt 3 using 2
 342           { 
 343   1         uchar j,key_1;
 344   1         j++;
 345   1      
 346   1         TH1=(65536-10000)/256;
 347   1         TL1=(65536-10000)%256;//10ms定时
 348   1         
 349   1         P3=0xff;//键盘扫描程序
 350   1         if(j==2){j=0,key=P3&00111100;
 351   2                  if(key=key_1) key_flag=1; }
 352   1         key_1=P3&00111100;//10ms内若两次的结果一样,表明有按键按下
 353   1         
 354   1       }
 355          
 356          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    989    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V7.50   时钟_1602                                                             08/18/2007 17:24:18 PAGE 7   

   DATA SIZE        =     74       5
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      7    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -