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

📄 ds1302.lst

📁 1302是用来输出北京时间的,18b20用来检测温度,输出在ds1302上显示,有仿真文件
💻 LST
📖 第 1 页 / 共 4 页
字号:
 686          
 687          void keydone()//按键功能执行
 688          {        uchar Second;
 689   1                       if(flag==0)    //关闭时钟,停止计时
 690   1               { Write1302(0x8e,0x00); //写入允许
 691   2                 temp=Read1302(0x80);
 692   2                 Write1302(0x80,temp|0x80);
 693   2                     Write1302(0x8e,0x80); //禁止写入
 694   2                 flag=1;
 695   2               }
 696   1               Setkey();                                          //扫描模式切换按键
 697   1                       switch(count)
 698   1                       {case 1:do                                             //count=1,调整秒
 699   2                                {
 700   3                         outkey();                       //扫描跳出按钮
 701   3                                         Upkey();                //扫描加按钮
 702   3                                         Downkey();              //扫描减按钮
 703   3                                         if(up_flag==1||down_flag==1)  //数据更新,重新写入新的数据
 704   3                                         {
 705   4                                         Write1302(0x8e,0x00); //写入允许
 706   4                                         Write1302(0x80,temp|0x80); //写入新的秒数
 707   4                                         Write1302(0x8e,0x80); //禁止写入
 708   4                                         up_flag=0;
 709   4                                         down_flag=0;
 710   4                                         }
 711   3      
 712   3                                         hide_sec++;          //位闪计数
 713   3                                         if(hide_sec>3)
 714   3                                           hide_sec=0;
 715   3                         show_time();         //液晶显示数据
 716   3                                        }while(count==2);break;  
 717   2                        case 2:do                                             //count=2,调整分
 718   2                                {
 719   3                                         hide_sec=0;
 720   3                                         outkey();
 721   3                                         Upkey();
 722   3                                         Downkey();
 723   3                                         if(temp>0x60)
 724   3                                           temp=0;
 725   3                                         if(up_flag==1||down_flag==1)
 726   3                                         {
 727   4                                         Write1302(0x8e,0x00); //写入允许
 728   4                                         Write1302(0x82,temp); //写入新的分数
 729   4                                         Write1302(0x8e,0x80); //禁止写入
 730   4                                         up_flag=0;
 731   4                                         down_flag=0;
 732   4                                         }
 733   3                                         hide_min++;
C51 COMPILER V7.50   DS1302                                                                04/30/2008 22:40:42 PAGE 13  

 734   3                                         if(hide_min>3)
 735   3                                           hide_min=0;
 736   3                         show_time();
 737   3                                        }while(count==3);break;
 738   2                        case 3:do                                             //count=3,调整小时
 739   2                                {
 740   3                         hide_min=0; 
 741   3                                         outkey();
 742   3                                         Upkey();
 743   3                                         Downkey();
 744   3                                         if(up_flag==1||down_flag==1)
 745   3                                         {
 746   4                                         Write1302(0x8e,0x00); //写入允许
 747   4                                         Write1302(0x84,temp); //写入新的小时数
 748   4                                         Write1302(0x8e,0x80); //禁止写入
 749   4                                         up_flag=0;
 750   4                                         down_flag=0;
 751   4                                         }
 752   3                                         hide_hour++;
 753   3                                         if(hide_hour>3)
 754   3                                           hide_hour=0;
 755   3                         show_time();
 756   3                                        }while(count==4);break;
 757   2                        case 4:do                                             //count=4,调整星期
 758   2                                {
 759   3                         hide_hour=0; 
 760   3                                         outkey();
 761   3                                         Upkey();
 762   3                                         Downkey();
 763   3                                         if(up_flag==1||down_flag==1)
 764   3                                         {
 765   4                                         Write1302(0x8e,0x00); //写入允许
 766   4                                         Write1302(0x8a,temp); //写入新的星期数
 767   4                                         Write1302(0x8e,0x80); //禁止写入
 768   4                                         up_flag=0;
 769   4                                         down_flag=0;
 770   4                                         }
 771   3                                         hide_week++;
 772   3                                         if(hide_week>3)
 773   3                                           hide_week=0;
 774   3                         show_time();
 775   3                                        }while(count==5);break;
 776   2                        case 5:do                                             //count=5,调整日
 777   2                                {
 778   3                                         hide_week=0; 
 779   3                                         outkey();
 780   3                                         Upkey();
 781   3                                         Downkey();
 782   3                                         if(up_flag==1||down_flag==1)
 783   3                                         {
 784   4                                         Write1302(0x8e,0x00); //写入允许
 785   4                                         Write1302(0x86,temp); //写入新的日数
 786   4                                         Write1302(0x8e,0x80); //禁止写入
 787   4                                         up_flag=0;
 788   4                                         down_flag=0;
 789   4                                         }
 790   3                                         hide_day++;
 791   3                                         if(hide_day>3)
 792   3                                           hide_day=0;
 793   3                         show_time();
 794   3                                        }while(count==6);break;
 795   2                        case 6:do                                             //count=6,调整月
C51 COMPILER V7.50   DS1302                                                                04/30/2008 22:40:42 PAGE 14  

 796   2                                {
 797   3                         hide_day=0; 
 798   3                                         outkey();
 799   3                                         Upkey();
 800   3                                         Downkey();
 801   3                                         if(up_flag==1||down_flag==1)
 802   3                                         {
 803   4                                         Write1302(0x8e,0x00); //写入允许
 804   4                                         Write1302(0x88,temp); //写入新的月数
 805   4                                         Write1302(0x8e,0x80); //禁止写入
 806   4                                         up_flag=0;
 807   4                                         down_flag=0;
 808   4                                         }
 809   3                                         hide_month++;
 810   3                                         if(hide_month>3)
 811   3                                           hide_month=0;
 812   3                         show_time();
 813   3                                        }while(count==7);break;
 814   2                        case 7:do                                             //count=7,调整年
 815   2                                {
 816   3                         hide_month=0; 
 817   3                                         outkey();
 818   3                                         Upkey();
 819   3                                         Downkey();
 820   3                                         if(up_flag==1||down_flag==1)
 821   3                                         {
 822   4                                         Write1302(0x8e,0x00); //写入允许
 823   4                                         Write1302(0x8c,temp); //写入新的年数
 824   4                                         Write1302(0x8e,0x80); //禁止写入
 825   4                                         up_flag=0;
 826   4                                         down_flag=0;
 827   4                                         }
 828   3                                         hide_year++;
 829   3                                         if(hide_year>3)
 830   3                                           hide_year=0;
 831   3                         show_time();
 832   3                                        }while(count==8);break;
 833   2                        case 8: count=0;hide_year=0;  //count8, 跳出调整模式,返回默认显示状态
 834   2                            Second=Read1302(DS1302_SECOND);
 835   2                        Write1302(0x8e,0x00); //写入允许
 836   2                            Write1302(0x80,Second&0x7f);
 837   2                            Write1302(0x8E,0x80);          //禁止写入
 838   2                                        done=0;
 839   2                        break; //count=7,开启中断,标志位置0并退出
 840   2                        default:break;
 841   2      
 842   2                       }
 843   1      
 844   1      }
 845          
 846          
 847          void show_time()   //液晶显示程序
 848          {
 849   1        DS1302_GetTime(&CurrentTime);  //获取时钟芯片的时间数据
 850   1        TimeToStr(&CurrentTime);       //时间数据转换液晶字符
 851   1        DateToStr(&CurrentTime);       //日期数据转换液晶字符
 852   1        ReadTemp();                    //开启温度采集程序
 853   1        temp_to_str();                 //温度数据转换成液晶字符
 854   1        GotoXY(12,1);                  //液晶字符显示位置
 855   1        Print(TempBuffer);             //显示温度
 856   1        GotoXY(0,1);
 857   1        Print(CurrentTime.TimeString); //显示时间
C51 COMPILER V7.50   DS1302                                                                04/30/2008 22:40:42 PAGE 15  

 858   1        GotoXY(0,0);
 859   1        Print(CurrentTime.DateString); //显示日期
 860   1        GotoXY(15,0);
 861   1        Print(week_value);             //显示星期
 862   1        GotoXY(11,0);
 863   1        Print("Week");        //在液晶上显示 字母 week
 864   1        keyscan(); 
 865   1        GotoXY(8,1);
 866   1        Print(ledcode);
 867   1        Delay1ms(400);                 //扫描延时
 868   1      }
 869          
 870          
 871          
 872          main()
 873          {
 874   1          flag=1;           //时钟停止标志
 875   1              LCD_Initial();    //液晶初始化
 876   1              Init_DS18B20( ) ;      //DS18B20初始化
 877   1              Initial_DS1302(); //时钟芯片初始化
 878   1              keyscan();
 879   1              up_flag=0;
 880   1              down_flag=0;
 881   1              done=0;           //进入默认液晶显示
 882   1              wireless_1=0;
 883   1              wireless_2=0;
 884   1              wireless_3=0;
 885   1              wireless_4=0;
 886   1              while(1)
 887   1              {   
 888   2              while(done==1)
 889   2                keydone();    //进入调整模式
 890   2                      while(done==0)
 891   2                  {  
 892   3                  show_time();                //液晶显示数据
 893   3                  flag=0;                  
 894   3                          Setkey();                            //扫描各功能键
 895   3                      }
 896   2              }
 897   1      }
 898          
 899          
 900          
 901          


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