📄 zdbwnl.lst
字号:
C51 COMPILER V8.05a ZDBWNL 10/13/2008 19:59:37 PAGE 17
947 /******************************************************************************/
948 void id_case2_key(void)//id为1时的下一级选择
949 {
950 1 if(Add_Key == 0) //增加1
951 1 {
952 2 Delay(100);
953 2 if(Add_Key == 0)
954 2 Set_Bell(id2,0); //调用Set_Bell函数
955 2 while(Add_Key ==0);//等待键松开
956 2 }
957 1 if(Dec_Key == 0) //减少1
958 1 {
959 2 Delay(100);
960 2 if(Dec_Key == 0)
961 2 Set_Bell(id2,1); //调用Set_Bell函数
962 2 while(Dec_Key ==0);//等待键松开
963 2 }
964 1 }
965
966 /******************************************************************************/
967 void Set_Bell(unsigned char sel, bit sel_1)//根据选择调整相应项目并写入
968 {
969 1 signed char address,item;
970 1 signed char max,mini;
971 1 if(sel==4) {address=0xc6; max=59;mini=0;} //秒
972 1 if(sel==3) {address=0xc4; max=59;mini=0;} //分
973 1 if(sel==2) {address=0xc2; max=23; mini=0;} //时
974 1 if(sel==1) //标志位
975 1 {
976 2 address=0xc8;//for read
977 2 if(Add_Key ==0 || Dec_Key ==0)
978 2 Bell_Swh=~Bell_Swh;
979 2 write_clock(address,Bell_Swh);
980 2 } //开关
981 1
982 1 item=((read_clock(address+1))/16)*10 + (read_clock(address+1))%16;
983 1 if(sel_1==0)
984 1 item++;
985 1 else
986 1 item--;
987 1 if(item>max) item=mini;
988 1 if(item<mini) item=max;
989 1
990 1 write_clock(0x8e,0x00);//允许写操作
991 1 write_clock(address,(item/10)*16+item%10);//转换成16进制写入1302
992 1 write_clock(0x8e,0x80);//写保护,禁止写操作
993 1 }
994
995 /******************************************************************************/
996 void Timer0_Init(void)//定时器0初始化
997 {
998 1 TMOD=0x01;
999 1 TH0=(65535-50000)/256;
1000 1 TL0=(65535-50000)%256;
1001 1 EA=1;
1002 1 ET0=1;
1003 1 TR0=1;
1004 1 }
1005
1006 /******************************************************************************/
1007 void Timer0(void) interrupt 1 using 1//中断入口,冒号闪烁
1008 {
C51 COMPILER V8.05a ZDBWNL 10/13/2008 19:59:37 PAGE 18
1009 1 static unsigned char timecount = 0;
1010 1
1011 1 TH0=(65535-50000)/256; //50ms定时
1012 1 TL0=(65535-50000)%256;
1013 1 timecount++;
1014 1 if(timecount > 9)//500MS
1015 1 {
1016 2 timecount = 0;
1017 2 flag = ~flag;
1018 2 }
1019 1 }
1020
1021 /******************************************************************************/
1022 void Init_1302(void)//设置1302的初始时间
1023 {
1024 1 write_clock(0x8e,0x00);//允许写操作
1025 1 write_clock(0x8c,0x05);//年
1026 1 write_clock(0x8a,0x06);//星期
1027 1 write_clock(0x88,0x01);//月
1028 1 write_clock(0x86,0x01);//日
1029 1 write_clock(0x84,0x12);//小时
1030 1 write_clock(0x82,0x00);//分钟
1031 1 write_clock(0x80,0x00);//秒
1032 1 write_clock(0x90,0xa5);//充电
1033 1 write_clock(0x8e,0x80);//禁止写操作
1034 1 }
1035
1036 /******************************************************************************/
1037 void Lcd_Mark1(void)//在预定的位置上写入汉字
1038 {
1039 1 Clr_Scr();//清屏
1040 1 frame();//显示边框
1041 1 Mcs=1;Scs=0;
1042 1 Disp_Chinese(5,8,shi);//显示室温,星期,年, . ,℃
1043 1 Disp_Chinese(5,24,wen);
1044 1 Disp_Chinese(3,8,xing);
1045 1 Disp_Chinese(3,24,qi);
1046 1 Disp_Chinese(1,40,nian);
1047 1 Disp_Digit(5,56,point);
1048 1 Mcs=0;Scs=1;
1049 1 Disp_Chinese(5,8,sheshidu);
1050 1 if(Bell_Swh == 1)//闹钟为开
1051 1 {
1052 2 Mcs=0;Scs=1;
1053 2 Disp_Chinese(5,40,biaozhi);//显示闹钟图标
1054 2 }
1055 1 }
1056
1057 /******************************************************************************/
1058 void Lcd_Mark2(void)
1059 {
1060 1 Clr_Scr();//清屏
1061 1 frame();//显示边框
1062 1
1063 1 Mcs=1;Scs=0;//显示闹钟设定等几个汉字
1064 1 Disp_Chinese(2,16,nao);
1065 1 Disp_Chinese(2,32,zhong);
1066 1 Disp_Chinese(2,48,she);
1067 1 Mcs=0;Scs=1;
1068 1 Disp_Chinese(2,0,ding);
1069 1 Disp_Digit(4,0,maohao);//显示:
1070 1 Disp_Digit(4,24,maohao);
C51 COMPILER V8.05a ZDBWNL 10/13/2008 19:59:37 PAGE 19
1071 1 }
1072
1073 /******************************************************************************/
1074 void Beep(void)//BELL 蜂明器发声,整点报警
1075 {
1076 1 Bell_Out = 0;
1077 1 Delay(6000);//50ms
1078 1 Bell_Out = 1;
1079 1 Delay(6000);//50ms
1080 1 }
1081
1082 /*****************************************************************************/
1083 void Bell_now(void)
1084 {
1085 1 Bell_Out = 0;
1086 1 Delay(31250); //for 250ms
1087 1 Bell_Out = 1;
1088 1 Delay(6350); //50ms
1089 1 Bell_Out = 0;
1090 1 Delay(18750);//150ms
1091 1 Bell_Out = 1;
1092 1 Delay(50000);//400ms
1093 1 }
1094
1095 /******************************************************************************/
1096 void main(void) //主函数
1097 {
1098 1 //初始化状态
1099 1 Bell_Out = 1;//蜂明器关闭
1100 1 Bak_Light = 0;//开机背光开
1101 1
1102 1 Timer0_Init();
1103 1 Init_lcd();//设置液晶显示器
1104 1
1105 1 Clr_Scr();//清屏
1106 1 Disp_Img(logo); //显示湘灵电子LOGO开机画面
1107 1 Delay12864(60000);//Delay 4s
1108 1
1109 1 Bak_Light = 1;//关闭背光
1110 1 Bell_Swh = read_clock(0xc9);//读取开,关的状态
1111 1 Lcd_Mark1();
1112 1
1113 1 while(1)//主循环
1114 1 {
1115 2 //设置时钟的初始值,显示05年1月1号星期六12:00:00
1116 2 if(Rst_Key == 0)//按下系统复位键,S4
1117 2 {
1118 3 Delay(1000);//延时消抖
1119 3 if(Rst_Key == 0)
1120 3 {
1121 4 Init_1302();//初始化时钟
1122 4 }
1123 3 }
1124 2
1125 2 if(OK_Key == 0 && Dec_Key ==0 )//进入闹钟设置界面
1126 2 {
1127 3 Delay12864(100);
1128 3 if(OK_Key == 0 && Dec_Key ==0 )
1129 3 {
1130 4 Lcd_Mark2();
1131 4 if(Bell_Swh == 0){Mcs=0;Scs=1;Disp_Chinese(2,32,guan);}//关
1132 4 else {Mcs=0;Scs=1;Disp_Chinese(2,32,kai);}
C51 COMPILER V8.05a ZDBWNL 10/13/2008 19:59:37 PAGE 20
1133 4 while(1)
1134 4 {
1135 5 if (OK_Key == 0) // 设置和选择项目键
1136 5 {
1137 6 Delay(1000);
1138 6 if(OK_Key == 0)
1139 6 {
1140 7 id2++;if(id2>5) id2=0;
1141 7 }
1142 6 while(OK_Key == 0);//等待键松开
1143 6 }
1144 5 switch( id2 )
1145 5 {
1146 6 case 0:Disp2();break;//正常显示
1147 6 case 1:Kgb = 1;id_case2_key();Disp2();break;//开关
1148 6 case 2:Kgb= 0;Hourb=1;id_case2_key();Disp2();break;//
1149 6 case 3:Hourb=0;Minb=1;id_case2_key();Disp2();break;
1150 6 case 4:Minb=0;Secb=1;id_case2_key();Disp2();break;
1151 6 case 5:Secb=0;id2 = 0;Lcd_Mark1();goto FF;break;//返回主界面
1152 6 default:break;
1153 6 }
1154 5 }//while(1)
1155 4 }//if
1156 3 }//if
1157 2 /*****************************************/
1158 2 FF: //返回主界面
1159 2 /*****************************************/
1160 2 if(flag == 0)
1161 2 {
1162 3 Mcs=0;Scs=1;
1163 3 Disp_Digit(3,8,maohao);// :闪烁
1164 3 Disp_Digit(3,32,maohao);
1165 3 }
1166 2 else
1167 2 {
1168 3 Mcs=0;Scs=1;
1169 3 Disp_Digit(3,8,space);//显示空格
1170 3 Disp_Digit(3,32,space);
1171 3 }
1172 2 if (OK_Key == 0) // 设置和选择项目键
1173 2 {
1174 3 Delay(1000);
1175 3 if(OK_Key == 0)
1176 3 {
1177 4 id++;if(id>7)id=0;
1178 4 }
1179 3 while(OK_Key == 0);//等待键松开
1180 3 }
1181 2 switch( id )
1182 2 {
1183 3 case 0:sec = 0; Disp( );break;//正常显示
1184 3 case 1:year = 1;id_case1_key();Disp();break;//年
1185 3 case 2:year=0;mon=1;id_case1_key();Disp();break;//月
1186 3 case 3:mon=0;day=1;id_case1_key();Disp();break; //日
1187 3 case 4:day=0;weekk=1;id_case1_key();Disp();break;//星期
1188 3 case 5:weekk=0;hour=1;id_case1_key();Disp();break; //小时
1189 3 case 6:hour=0;min=1;id_case1_key();Disp();break; //分钟
1190 3 case 7:min=0;sec=1;id_case1_key();Disp();break; //秒
1191 3 default:break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -