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

📄 lcd128x64.lst

📁 128*64程序和仿真80C51 128*64 LCM program and simulate for 80C51. help for you
💻 LST
📖 第 1 页 / 共 4 页
字号:
 738          ///// 函数功能: 初始化T0定时50ms             //////
 739          ///// 调用:     无                           //////
 740          ///// 函数参数: 无                           //////
 741          ///// 返回值:   无                           //////
 742          //////////////////////////////////////////////////// 
 743          
 744          void Init_T0(void)
 745           { 
 746   1        TMOD=0x01;            //定时器T0,工作模式1//
 747   1        TH0=0x3c;             //50ms//
 748   1        TL0=0xb0;
 749   1        EA=1; 
 750   1        ET0=1;
 751   1        TR0=1;
 752   1       }
 753          /**************************************************************************************************/
 754          ////////////////////////////////////////////////////
 755          ///// 函数名:   闪烁信号产生子函数           //////
 756          ///// 函数功能: 用定时中断方式产生闪烁信号   //////
 757          ///// 调用:     无                           //////
 758          ///// 函数参数: 无                           //////
 759          ///// 返回值:   无                           //////
 760          //////////////////////////////////////////////////// 
 761          
 762          void T0_flash(void) interrupt 1          // 中断程序,产生时钟秒信号 //
 763           {
 764   1        TR0=0;          
 765   1        fla_cou++;
 766   1        if(fla_cou==3)             //闪烁间隔为50ms*5次=250ms//
 767   1         {
 768   2          flash=!flash;
 769   2          fla_cou=0;
 770   2         }
 771   1        TH0=0x3c;             //50ms//
 772   1        TL0=0xb0;
 773   1        TR0=1;
 774   1       }
 775          /**************************************************************************************************/
 776          ////////////////////////////////////////////////////
 777          ///// 函数名:   时间闪烁子函数               //////
 778          ///// 函数功能: 选择确定闪烁位等待调整       //////
 779          ///// 调用:     Add();                       //////
 780          ///// 函数参数: 无                           //////
 781          ///// 返回值:   无                           //////
 782          //////////////////////////////////////////////////// 
 783          
 784          void FlashKey(void)             //闪烁子函数//
 785          {
 786   1       if(P1_0==0)
 787   1        {
 788   2         while(P1_0==0)
 789   2          Refresh();
 790   2         n++;                        
 791   2        }                            
 792   1       if(n==8)  n=0;                         
 793   1       if(n!=1)  K1=1;
 794   1       if(n!=2)  K2=1;
 795   1       if(n!=3)  K3=1;                      
 796   1       if(n!=4)  K4=1;
 797   1       if(n!=5)  K5=1;
 798   1       if(n!=6)  K6=1;                      
C51 COMPILER V7.50   LCD128X64                                                             08/15/2007 22:03:43 PAGE 14  

 799   1       if(n!=7)  K7=1;
 800   1       switch(n)
 801   1        {
 802   2         case 0:KT=0;break;
 803   2         case 1:K1=flash;hms=year;KT=1;break;        //hms为调时临时变量,需要调整某位时则先把其初始值放到hms中/
             -/
 804   2         case 2:K2=flash;hms=month;KT=1;break;
 805   2         case 3:K3=flash;hms=date;KT=1;break;
 806   2         case 4:K4=flash;hms=hour;KT=1;break;
 807   2              case 5:K5=flash;hms=min;KT=1;break;
 808   2         case 6:K6=flash;hms=sec;KT=1;break;
 809   2         case 7:K7=flash;hms=day;KT=1;break;
 810   2        }
 811   1       Add();
 812   1      } 
 813          /*********************************************************************************************************
             -/
 814          ////////////////////////////////////////////////////
 815          ///// 函数名:   时间调整子函数               //////
 816          ///// 函数功能: 对闪烁位进行调整(加一)       //////
 817          ///// 调用:     SetTime();                   //////
 818          ///// 函数参数: 无                           //////
 819          ///// 返回值:   无                           //////
 820          //////////////////////////////////////////////////// 
 821          
 822          void Add(void)           //调时子函数//
 823           {
 824   1        if(P1_2==0)             //按P0_2键进行时间调整//
 825   1         {
 826   2          while(P1_2==0)
 827   2           Refresh();
 828   2          if(KT==1)             //检验可调标志位KT//
 829   2           {
 830   3            hms++;
 831   3            switch(n)
 832   3             {
 833   4              case 1:year=hms;break;           //根据n不同,返回给不同的位: n=1  ->  返回给小时位//
 834   4              case 2:month=hms;break;          //                            n=2  ->  返回给分钟位//
 835   4              case 3:date=hms;break;           //                            n=3  ->  返回给秒位  //
 836   4              case 4:hour=hms;break;           //                            n=4  ->  返回给星期位//
 837   4              case 5:min=hms;break;            //                   依次类推                      //
 838   4                        case 6:sec=hms;break;
 839   4                        case 7:day=hms;break;
 840   4                       }
 841   3            if((sec&0x0f)==0x0a) {sec&=0xf0; sec+=0x10;}         // 如果秒位满十,向十秒位进一 //
 842   3            if((min&0x0f)==0x0a) {min&=0xf0; min+=0x10;}         // 如果分位满十,向十分位进一 //
 843   3            if((hour&0x0f)==0x0a) {hour&=0xf0; hour+=0x10;}      // 如果时位满十,向十时位进一 //
 844   3            if(day==8) {day=1;}          // 如果星期满七,重新从星期一开始计 //
 845   3            
 846   3            if((sec&0xf0)==0x60) {sec&=0x0f;}         // 如果十秒位满六,清零 //
 847   3            if((min&0xf0)==0x60) {min&=0x0f;}         // 如果十分位满六,清零 //
 848   3            if(((hour&0xf0)==0x20)&((hour&0x0f)==0x04)) {hour&=0x00;}          //如果小时满24,清零//
 849   3      
 850   3            if((date&0x0f)==0x0a) {date&=0xf0; date+=0x10;}         // 如果日期位满十,向十号位进一 //
 851   3            if((month&0x0f)==0x0a) {month&=0xf0; month+=0x10;}         // 如果月份位满十,向十月位进一 //
 852   3            if((year&0x0f)==0x0a) {year&=0xf0; year+=0x10;}      // 如果年位满十,向十年位进一 //
 853   3      
 854   3                      if(((date&0xf0)==0x30)&((date&0x0f)==0x02)) {date&=0x00;}
 855   3                      if(((month&0xf0)==0x10)&((month&0x0f)==0x03)) {month&=0x00;}
 856   3                      if((year&0xf0)==0xa0) {year&=0x0f;}
 857   3            
 858   3            Curtime[0] = sec;
C51 COMPILER V7.50   LCD128X64                                                             08/15/2007 22:03:43 PAGE 15  

 859   3            Curtime[1] = min;
 860   3            Curtime[2] = hour;
 861   3                 Curtime[3] = date;
 862   3                 Curtime[4] = month;
 863   3            Curtime[5] = day;
 864   3                 Curtime[6] = year;
 865   3            SetTime(&Curtime[0]);         // 将调整过后的时间值写入DS1302 //
 866   3           }
 867   2         }
 868   1       }
 869          /********************************************************************************************************/
 870          /*******************************************************************************************************/
 871          ////////////////////////////////////////////////////
 872          ///// 函数名:   时钟初始化子函数             //////
 873          ///// 函数功能: 对所有时钟程序变量初始化     //////
 874          ///// 调用:     Init_T0();                   //////
 875          ///// 函数参数: 无                           //////
 876          ///// 返回值:   无                           //////
 877          //////////////////////////////////////////////////// 
 878          
 879          void Init_Clock(void)
 880           {
 881   1        K1=1; K2=1; K3=1; K4=1; K5=1;
 882   1        K6=1; K7=1; KT=0; n=0;
 883   1        Init_T0();
 884   1       }
 885          /*******************************************************************************************///时钟部分// 
             -↑ 
 886          ////////////////////////////////////////////////////
 887          ///// 函数名:   刷新显示子函数               //////
 888          ///// 函数功能: 即时刷新时钟数据进行显示     //////
 889          ///// 调用:  InputCommand();DisplayChar();   //////
 890          ///// 函数参数: 无                           //////
 891          ///// 返回值:   无                           //////
 892          //////////////////////////////////////////////////// 
 893          void Refresh(void)
 894           {
 895   1        GetTime();
 896   1        CS1=1;CS2=0;
 897   1        if(K6)
 898   1         { sz_disp16(5,40,shuzi[sec&0x0f]);       // 秒位 //
 899   2           sz_disp16(5,32,shuzi[sec>>4]); }       // 十秒位 //
 900   1        else
 901   1         { hz_disp16(5,32,kongbai2); }             // 秒位  十秒位 //
 902   1        
 903   1        if(K5)
 904   1         { sz_disp16(5,8,shuzi[min&0x0f]);        // 分钟位 //
 905   2           sz_disp16(5,0,shuzi[min>>4]); }        // 十分位 //
 906   1        else
 907   1         { hz_disp16(5,0,kongbai2); }
 908   1        
 909   1        if(K7)
 910   1         { sz_disp16(1,0,shuzi[day&0x0f]); }
 911   1        else
 912   1         { sz_disp16(1,0,kongbai1); }
 913   1       
 914   1        if(K3)
 915   1         { sz_disp16(3,24,shuzi[date&0x0f]);       // 日期位 //
 916   2           sz_disp16(3,16,shuzi[date>>4]);  }
 917   1        else
 918   1         { hz_disp16(3,16,kongbai2); }
 919   1      
C51 COMPILER V7.50   LCD128X64                                                             08/15/2007 22:03:43 PAGE 16  

 920   1        CS1=0;CS2=1;
 921   1        if(K4)
 922   1         { sz_disp16(5,40,shuzi[hour&0x0f]);       // 小时位 //
 923   2           sz_disp16(5,32,shuzi[hour>>4]); }     // 十时位 //
 924   1        else
 925   1         { hz_disp16(5,32,kongbai2); }
 926   1              
 927   1        if(K2)
 928   1         { sz_disp16(3,56,shuzi[month&0x0f]);       // 月份位 //
 929   2           sz_disp16(3,48,shuzi[month>>4]);  }
 930   1        else
 931   1         { hz_disp16(3,48,kongbai2); }         
 932   1      
 933   1        if(K1)
 934   1         { sz_disp16(3,24,shuzi[year&0x0f]);       // 年份位 //
 935   2           sz_disp16(3,16,shuzi[year>>4]);  }
 936   1        else
 937   1         { hz_disp16(3,16,kongbai2); } 
 938   1       } 
 939          /*-----------------------------状态判断于提示------------------------*/
 940          void State(void)
 941           {
 942   1        CS1=1;CS2=0;
 943   1        if(KT==1)
 944   1         { hz_disp16(1,32,tiao);
 945   2                hz_disp16(1,48,shi2);}
 946   1        else
 947   1         { hz_disp16(1,32,kongbai2);
 948   2                hz_disp16(1,48,kongbai2); }
 949   1       }
 950          /*------------------------------主函数---------------------------------*/
 951          
 952          main()
 953           {
 954   1        Init_Clock();
 955   1        init_lcd();
 956   1        Disp_Img(FirstPage);
 957   1        delay(10000);
 958   1        StartMsg();
 959   1        delay(10000);
 960   1        ClockMsg();
 961   1        while(1)
 962   1         {
 963   2          Refresh();
 964   2          FlashKey();
 965   2               State();
 966   2               delay(250);       // 适当延时防止因为不断查忙而耗费大量CUP资源 //
 967   2         } 
 968   1       }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1997    ----
   CONSTANT SIZE    =   1978    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     37      15
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      9    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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