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

📄 zdbwnl.lst

📁 万年历+温度+闹钟.dan单片机应用上的一些小代码。
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V7.50   ZDBWNL                                                                12/22/2005 13:04:37 PAGE 17  

 947          void id_case2_key(void)//id为1时的下一级选择
 948          {
 949   1              if(Add_Key == 0) //增加1
 950   1          {
 951   2              Delay(100);
 952   2              if(Add_Key == 0)
 953   2                              Set_Bell(id2,0);  //调用Set_Bell函数
 954   2                              while(Add_Key ==0);//等待键松开
 955   2          }
 956   1              if(Dec_Key == 0)  //减少1
 957   1          {
 958   2              Delay(100);
 959   2              if(Dec_Key == 0)
 960   2                              Set_Bell(id2,1);  //调用Set_Bell函数
 961   2                      while(Dec_Key ==0);//等待键松开
 962   2            }
 963   1      }
 964          
 965          /******************************************************************************/
 966          void Set_Bell(unsigned char sel, bit sel_1)//根据选择调整相应项目并写入
 967          {
 968   1        signed char address,item;
 969   1        signed char max,mini;
 970   1        if(sel==4)  {address=0xc6; max=59;mini=0;}    //秒
 971   1        if(sel==3)  {address=0xc4; max=59;mini=0;}    //分
 972   1        if(sel==2)  {address=0xc2; max=23; mini=0;}   //时
 973   1        if(sel==1)                                                                    //标志位
 974   1        {
 975   2              address=0xc8;//for read
 976   2              if(Add_Key ==0 || Dec_Key ==0)
 977   2              Bell_Swh=~Bell_Swh;
 978   2              write_clock(address,Bell_Swh);
 979   2        }    //开关
 980   1      
 981   1        item=((read_clock(address+1))/16)*10 + (read_clock(address+1))%16;
 982   1        if(sel_1==0) 
 983   1              item++;  
 984   1        else
 985   1              item--;
 986   1        if(item>max) item=mini;   
 987   1        if(item<mini) item=max;
 988   1      
 989   1        write_clock(0x8e,0x00);//允许写操作
 990   1        write_clock(address,(item/10)*16+item%10);//转换成16进制写入1302
 991   1        write_clock(0x8e,0x80);//写保护,禁止写操作 
 992   1      }
 993          
 994          /******************************************************************************/
 995          void Timer0_Init(void)//定时器0初始化
 996          {
 997   1              TMOD=0x01;
 998   1              TH0=(65535-50000)/256;
 999   1              TL0=(65535-50000)%256;
1000   1              EA=1;
1001   1              ET0=1; 
1002   1              TR0=1;
1003   1      }
1004          
1005          /******************************************************************************/
1006          void Timer0(void) interrupt 1 using 1//中断入口,冒号闪烁
1007          {
1008   1              static unsigned char timecount = 0;
C51 COMPILER V7.50   ZDBWNL                                                                12/22/2005 13:04:37 PAGE 18  

1009   1      
1010   1              TH0=(65535-50000)/256; //50ms定时
1011   1              TL0=(65535-50000)%256;  
1012   1              timecount++;
1013   1              if(timecount > 9)//500MS
1014   1              {
1015   2              timecount = 0;    
1016   2              flag = ~flag;          
1017   2          }
1018   1      }
1019          
1020          /******************************************************************************/
1021          void Init_1302(void)//设置1302的初始时间
1022          {
1023   1              write_clock(0x8e,0x00);//允许写操作
1024   1              write_clock(0x8c,0x05);//年
1025   1              write_clock(0x8a,0x06);//星期
1026   1              write_clock(0x88,0x01);//月
1027   1              write_clock(0x86,0x01);//日
1028   1              write_clock(0x84,0x12);//小时
1029   1              write_clock(0x82,0x00);//分钟
1030   1              write_clock(0x80,0x00);//秒
1031   1              write_clock(0x90,0xa5);//充电   
1032   1              write_clock(0x8e,0x80);//禁止写操作
1033   1      }
1034          
1035          /******************************************************************************/
1036          void Lcd_Mark1(void)//在预定的位置上写入汉字
1037          {
1038   1              Clr_Scr();//清屏
1039   1              frame();//显示边框
1040   1              Mcs=1;Scs=0;
1041   1              Disp_Chinese(5,8,shi);//显示室温,星期,年, . ,℃
1042   1              Disp_Chinese(5,24,wen);
1043   1              Disp_Chinese(3,8,xing);
1044   1              Disp_Chinese(3,24,qi);
1045   1              Disp_Chinese(1,40,nian);
1046   1              Disp_Digit(5,56,point);
1047   1              Mcs=0;Scs=1;
1048   1              Disp_Chinese(5,8,sheshidu);
1049   1              if(Bell_Swh == 1)//闹钟为开
1050   1              {       
1051   2                      Mcs=0;Scs=1;
1052   2                      Disp_Chinese(5,40,biaozhi);//显示闹钟图标
1053   2              }
1054   1      }
1055          
1056          /******************************************************************************/
1057          void Lcd_Mark2(void)
1058          {
1059   1              Clr_Scr();//清屏
1060   1              frame();//显示边框
1061   1              
1062   1              Mcs=1;Scs=0;//显示闹钟设定等几个汉字
1063   1              Disp_Chinese(2,16,nao);
1064   1              Disp_Chinese(2,32,zhong);
1065   1              Disp_Chinese(2,48,she);
1066   1              Mcs=0;Scs=1;
1067   1              Disp_Chinese(2,0,ding);
1068   1              Disp_Digit(4,0,maohao);//显示:
1069   1              Disp_Digit(4,24,maohao);        
1070   1      }
C51 COMPILER V7.50   ZDBWNL                                                                12/22/2005 13:04:37 PAGE 19  

1071          
1072          /******************************************************************************/
1073          void Beep(void)//BELL 蜂明器发声,整点报警
1074          {
1075   1              Bell_Out = 0;
1076   1              Delay(6000);//50ms
1077   1              Bell_Out = 1;
1078   1              Delay(6000);//50ms
1079   1      }
1080                  
1081          /*****************************************************************************/
1082          void Bell_now(void)
1083          {
1084   1              Bell_Out = 0;
1085   1              Delay(31250); //for 250ms
1086   1              Bell_Out = 1;
1087   1              Delay(6350); //50ms
1088   1              Bell_Out = 0;
1089   1              Delay(18750);//150ms
1090   1              Bell_Out = 1;
1091   1          Delay(50000);//400ms
1092   1      }
1093          
1094          /******************************************************************************/
1095          void main(void) //主函数 
1096          {
1097   1              //初始化状态
1098   1              Bell_Out = 1;//蜂明器关闭
1099   1              Bak_Light = 0;//开机背光开
1100   1      
1101   1              Timer0_Init();
1102   1              Init_lcd();//设置液晶显示器
1103   1      
1104   1              Clr_Scr();//清屏
1105   1              Disp_Img(logo); //显示湘灵电子LOGO开机画面
1106   1              Delay12864(60000);//Delay 4s
1107   1      
1108   1              Bak_Light = 1;//关闭背光
1109   1              Bell_Swh = read_clock(0xc9);//读取开,关的状态
1110   1              Lcd_Mark1();
1111   1      
1112   1              while(1)//主循环
1113   1              {       
1114   2                      //设置时钟的初始值,显示05年1月1号星期六12:00:00
1115   2                      if(Rst_Key == 0)//按下系统复位键,S4
1116   2                      {
1117   3                              Delay(1000);//延时消抖
1118   3                              if(Rst_Key == 0)
1119   3                              {
1120   4                                      Init_1302();//初始化时钟
1121   4                              }
1122   3                      }
1123   2      
1124   2                      if(OK_Key == 0 && Dec_Key ==0 )//进入闹钟设置界面
1125   2                      {
1126   3                              Delay12864(100);
1127   3                              if(OK_Key == 0 && Dec_Key ==0 )
1128   3                              {
1129   4                                      Lcd_Mark2();
1130   4                                      if(Bell_Swh == 0){Mcs=0;Scs=1;Disp_Chinese(2,32,guan);}//关
1131   4                                      else  {Mcs=0;Scs=1;Disp_Chinese(2,32,kai);}
1132   4                                      while(1)
C51 COMPILER V7.50   ZDBWNL                                                                12/22/2005 13:04:37 PAGE 20  

1133   4                                      {       
1134   5                                              if (OK_Key == 0) // 设置和选择项目键
1135   5                                      {       
1136   6                                                      Delay(1000);
1137   6                                              if(OK_Key == 0)
1138   6                                                      {
1139   7                                                              id2++;if(id2>5) id2=0;
1140   7                                                      }
1141   6                                              while(OK_Key == 0);//等待键松开   
1142   6                                          }
1143   5                                              switch( id2 )
1144   5                                              {
1145   6                                                      case 0:Disp2();break;//正常显示
1146   6                                                      case 1:Kgb = 1;id_case2_key();Disp2();break;//开关
1147   6                                                      case 2:Kgb= 0;Hourb=1;id_case2_key();Disp2();break;//
1148   6                                                      case 3:Hourb=0;Minb=1;id_case2_key();Disp2();break;
1149   6                                                      case 4:Minb=0;Secb=1;id_case2_key();Disp2();break;
1150   6                                                      case 5:Secb=0;id2 = 0;Lcd_Mark1();goto FF;break;//返回主界面
1151   6                                                      default:break;
1152   6                                              }
1153   5                                      }//while(1)
1154   4                              }//if
1155   3                      }//if
1156   2      /*****************************************/
1157   2                      FF:   //返回主界面
1158   2      /*****************************************/                     
1159   2                      if(flag == 0)
1160   2                      {
1161   3                              Mcs=0;Scs=1;
1162   3                              Disp_Digit(3,8,maohao);// :闪烁 
1163   3                              Disp_Digit(3,32,maohao);
1164   3                      }
1165   2                      else 
1166   2                      {
1167   3                              Mcs=0;Scs=1;
1168   3                              Disp_Digit(3,8,space);//显示空格
1169   3                              Disp_Digit(3,32,space); 
1170   3                      }
1171   2                      if (OK_Key == 0) // 设置和选择项目键
1172   2              {
1173   3                      Delay(1000);
1174   3                      if(OK_Key == 0)
1175   3                              {
1176   4                                      id++;if(id>7)id=0;      
1177   4                              }
1178   3                      while(OK_Key == 0);//等待键松开    
1179   3              }
1180   2              switch( id )
1181   2              {
1182   3                      case 0:sec = 0; Disp( );break;//正常显示
1183   3                      case 1:year = 1;id_case1_key();Disp();break;//年        
1184   3                              case 2:year=0;mon=1;id_case1_key();Disp();break;//月
1185   3                  case 3:mon=0;day=1;id_case1_key();Disp();break;  //日 
1186   3                      case 4:day=0;weekk=1;id_case1_key();Disp();break;//星期     
1187   3                      case 5:weekk=0;hour=1;id_case1_key();Disp();break;  //小时
1188   3                      case 6:hour=0;min=1;id_case1_key();Disp();break; //分钟
1189   3                      case 7:min=0;sec=1;id_case1_key();Disp();break; //秒
1190   3                      default:break;  
1191   3              }
1192   2      
1193   2                      if(Bell_Swh == 1)//闹钟为

⌨️ 快捷键说明

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