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

📄 24m点阵时钟.lst

📁 基于C51的点阵时钟显示仿真电路和源码
💻 LST
📖 第 1 页 / 共 5 页
字号:
 891   1           DQ = 1 ;      //DQ复位
 892   1           Delay(8) ;    //稍做延时
 893   1      
 894   1           DQ = 0 ;      //单片机将DQ拉低
 895   1           Delay(90) ;   //精确延时 大于 480us
 896   1      
 897   1           DQ = 1 ;       //拉高总线
 898   1           Delay(8) ;
 899   1      
 900   1           presence = DQ ;    //如果=0则初始化成功 =1则初始化失败
 901   1           Delay(100) ;
 902   1           DQ = 1 ; 
 903   1           
 904   1           return(presence) ; //返回信号,0=presence,1= no presence
 905   1      }
 906          
 907          
 908          /* 读一个字节                     */
 909          /*******************************************************************/
 910           ReadOneChar(void)
 911          {
 912   1      unsigned char i = 0 ;
 913   1      unsigned char dat = 0 ;
 914   1      
 915   1      for (i = 8 ; i > 0 ; i--)
 916   1        {
 917   2          DQ = 0 ; // 给脉冲信号
 918   2          dat >>= 1 ;
C51 COMPILER V8.05a   24M点阵时钟                                                          09/28/2010 07:26:18 PAGE 16  

 919   2          DQ = 1 ; // 给脉冲信号
 920   2      
 921   2          if(DQ)
 922   2           dat |= 0x80 ;
 923   2          Delay(4) ;
 924   2        }
 925   1      
 926   1          return (dat) ;
 927   1      }
 928          
 929          /* 写一个字节                                         */
 930          /*******************************************************************/
 931           WriteOneChar(unsigned char dat)
 932          {
 933   1        unsigned char i = 0 ;
 934   1        for (i = 8 ; i > 0 ; i--)
 935   1        {
 936   2          DQ = 0 ;
 937   2          DQ = dat&0x01 ;
 938   2          Delay(5) ;
 939   2      
 940   2          DQ = 1 ;
 941   2          dat>>=1 ;
 942   2        }
 943   1      }
 944          
 945          /* 读取温度                            */
 946          /*******************************************************************/
 947           Read_Temperature(void)
 948          {
 949   1           Init_DS18B20() ;
 950   1        
 951   1           WriteOneChar(0xCC) ;  // 跳过读序号列号的操作
 952   1           WriteOneChar(0x44) ;  // 启动温度转换
 953   1      
 954   1           Init_DS18B20() ;
 955   1           WriteOneChar(0xCC) ;  //跳过读序号列号的操作
 956   1           WriteOneChar(0xBE) ;  //读取温度寄存器
 957   1      
 958   1           temp_data[0] = ReadOneChar() ;   //温度低8位
 959   1           temp_data[1] = ReadOneChar() ;   //温度高8位 
 960   1      }
 961          
 962          /* 数据转换与温度显示                                              */
 963          /*******************************************************************/
 964           void Disp_Temperature()
 965          {
 966   1        temp_ram[4]=temp_data[0]&0x0f ;
 967   1        temp_ram[0]=ditab[temp_ram[4]]+0x30 ;     //查表得小数位的值
 968   1        
 969   1        temp_ram[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4) ;
 970   1        temp_ram[3]=temp_ram[4]/100+0x30 ;
 971   1        temp_ram[1]=temp_ram[4]%100 ;
 972   1        temp_ram[2]=temp_ram[1]/10+0x30 ;
 973   1        temp_ram[1]=temp_ram[1]%10+0x30 ;
 974   1      
 975   1          if(temp_ram[3]==0x30)        //高位为0,不显示
 976   1         { 
 977   2           temp_ram[3]=0x20 ;              
 978   2           if(temp_ram[2]==0x30)      //次高位为0,不显示
 979   2           temp_ram[2]=0x20 ;
 980   2         }
C51 COMPILER V8.05a   24M点阵时钟                                                          09/28/2010 07:26:18 PAGE 17  

 981   1      
 982   1      } 
 983          /*
 984          void start_time(){
 985                  Time.Year = 0x10;
 986                  Time.Month = 0x7;
 987                  Time.Day = 0x23;
 988                  Time.Hour = 0x21;
 989                  Time.Minute = 0x58;
 990                  Time.Second = 0x0;
 991                  Time.Week = 0x5;
 992          }*/
 993          
 994          //=================
 995          //****校时函数****
 996          //=================
 997          void Change_Time(){
 998   1              //
 999   1              MSG_MV = MSG_MV_L;
1000   1              move_times = 0;
1001   1              start_word=0;
1002   1              TMP_TIME = Time.Hour;
1003   1              TR1 = 1;                //开启定时器1闪烁
1004   1              do{
1005   2                      switch(CHANGE){
1006   3                                      case CHG_HOUR:
1007   3                                      case CHG_MIN:
1008   3                                      case CHG_SEC:
1009   3                                              Put_Tdispram(0);
1010   3                                              break;
1011   3                                      case CHG_MON:
1012   3                                      case CHG_DAY:
1013   3                                              Put_Ddispram(0);
1014   3                                              break;
1015   3                                      case CHG_WEEK:
1016   3                                              Put_Kdispram(0);
1017   3                                              break;
1018   3                                      case CHG_YEAR:
1019   3                                              Put_Ydispram(0);
1020   3                                              break;
1021   3                                      default:
1022   3                                              break;
1023   3                                      }       
1024   2                      Show_sWord();
1025   2                      //if(!key_done)
1026   2                      //      ReadKey1();
1027   2                      }while(ReadKey1() != KEY3_S && exit < 10);              //MSG_KEY
1028   1              Change_obj();   //保证退出校时无隐身
1029   1              HIDE = 0;
1030   1              key_done = 0;
1031   1              //key_done = 1; //按键事件处理完成
1032   1              TR1 = 0;                //关闭定时器1闪烁                                       
1033   1              
1034   1      }
1035          //==================
1036          //****对象切换****
1037          //==================
1038          void Change_obj(){
1039   1              switch(CHANGE){
1040   2                                      case CHG_HOUR:
1041   2                                              if(Time.Hour == 0xcc)
1042   2                                                      Time.Hour = TMP_TIME;
C51 COMPILER V8.05a   24M点阵时钟                                                          09/28/2010 07:26:18 PAGE 18  

1043   2                                              TMP_TIME = Time.Minute;
1044   2                                              break;
1045   2                                      case CHG_MIN:
1046   2                                              if(Time.Minute == 0xcc)
1047   2                                                      Time.Minute = TMP_TIME;
1048   2                                              TMP_TIME = Time.Second;
1049   2                                              break;
1050   2                                      case CHG_SEC:
1051   2                                              if(Time.Second == 0xcc)
1052   2                                                      Time.Second = TMP_TIME;
1053   2                                              TMP_TIME = Time.Month;
1054   2                                              break;
1055   2                                      case CHG_MON:
1056   2                                              if(Time.Month == 0xcc)
1057   2                                                      Time.Month = TMP_TIME;
1058   2                                              TMP_TIME = Time.Day;
1059   2                                              break;
1060   2                                      case CHG_DAY:
1061   2                                              if(Time.Day == 0xcc)
1062   2                                                      Time.Day = TMP_TIME;
1063   2                                              TMP_TIME = Time.Week;
1064   2                                              break;
1065   2                                      case CHG_WEEK:
1066   2                                              if(Time.Week == 0xcc)
1067   2                                                      Time.Week = TMP_TIME;
1068   2                                              TMP_TIME = Time.Year;
1069   2                                              break;
1070   2                                      case CHG_YEAR:
1071   2                                              if(Time.Year == 0xcc)
1072   2                                                      Time.Year = TMP_TIME;
1073   2                                              TMP_TIME = Time.Hour;
1074   2                                              break;
1075   2                                      default:
1076   2                                              break;
1077   2                                      }
1078   1      }
1079          //==================
1080          //****加加函数****
1081          //功能: 0x19 ++  =0x20
1082          //==================
1083          uchar Add_num(char *num){
1084   1              ++(*num);
1085   1              if(((*num) & 0x0f) == 0x0a){
1086   2                      *num += 0x10;
1087   2                      *num &= 0xf0;
1088   2                      }
1089   1              return *num;
1090   1      }
1091          //==================
1092          //****校时加加****
1093          //==================
1094          void Add_Time(){
1095   1              switch(CHANGE){
1096   2                                      case CHG_HOUR:
1097   2                                              if(HIDE){
1098   3                                                      if(Add_num(&TMP_TIME) == 0x24)
1099   3                                                              TMP_TIME= 0;
1100   3                                                      }
1101   2                                              else{
1102   3                                                      if(Add_num(&Time.Hour) == 0x24)
1103   3                                                              Time.Hour = 0;
1104   3                                                      }
C51 COMPILER V8.05a   24M点阵时钟                                                          09/28/2010 07:26:18 PAGE 19  

1105   2                                              break;
1106   2                                      case CHG_MIN:
1107   2                                              if(HIDE){
1108   3                                                      if(Add_num(&TMP_TIME) == 0x60)
1109   3                                                              TMP_TIME= 0;
1110   3                                                      }
1111   2                                              else{
1112   3                                                      if(Add_num(&Time.Minute) == 

⌨️ 快捷键说明

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