?? lcd128x64.lst
字號:
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 V6.23a LCD128X64 04/07/2008 20:12:29 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 V6.23a LCD128X64 04/07/2008 20:12:29 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 V6.23a LCD128X64 04/07/2008 20:12:29 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 = 2060 ----
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 + -