迪文科技论坛

 找回密码
 立即注册
搜索
查看: 4537|回复: 6

在用数据窗口控件修改日期时,通过OS判断是否为闰年

[复制链接]

1

主题

4

回帖

44

积分

新手上路

Rank: 1

积分
44
发表于 2019-8-28 17:42:15 | 显示全部楼层 |阅读模式
各位大侠。我想用数据窗口控件的滑动功能来修改日期。 如何通过OS判断是否为闰年从而修改数据窗口控件的上限值。从而避免用户在选择时出现2月30/31号这样的不准确数据。OS怎么实现呢?
回复

使用道具 举报

0

主题

181

回帖

1857

积分

金牌会员

Rank: 6Rank: 6

积分
1857
发表于 2019-8-28 19:17:47 | 显示全部楼层
是否闰年可以将年份除以4看是否有余数,如果有那么2月就只有28天,如果没有那么2月就有29天(闰年)。通过设置描述指针加相应的偏移量等于属性地址。82指令写这个属性地址就可以修改。
(数据窗口描叙指针偏移2个字长度就是修改上限)。
回复

使用道具 举报

1

主题

4

回帖

44

积分

新手上路

Rank: 1

积分
44
 楼主| 发表于 2019-8-29 10:16:22 | 显示全部楼层
我知道如何判断闰年及如何通过修改描述指针属性来修改上限。我在DWINC里是这么写的。下载到屏幕后没有任何反应int leap(int x)
{
int i;
i=((x%4==0)&&(x%100 != 0))||(x % 400 == 0);
return i;
}

int main()
{
    int Year,Month,Day_upper;
    Year=19;
    Month=9;
    Day_upper=31;

    read_dgus_vp(0x3116,&Year,2);   //3116是年数据窗口的变量地址
    read_dgus_vp(0x5042,&Day_upper,2);  //5042是日的描述指针
    read_dgus_vp(0x3124,&Month,2);   //3124是月的变量地址

   
    if ((Month== 1) || (Month == 3) || (Month == 5) || (Month == 7) || (Month == 8) || (Month == 10) || (Month == 12)) {
                Day_upper=31;
              } else if ((Month == 4) || (Month == 6) || (Month== 9) || (Month == 11)) {
                Day_upper=30;
              } else if (Month== 2) {
                if (leap(Year + 2000)) {
                   Day_upper=29;
                  
                } else {
                  Day_upper=28;
                }
              }
   
    write_dgus_vp(0x5042,&Day_upper, 2);
   
   
    return 0;
}
//中断函数实体
void Time0_IRQHandler(void)
{

}
void Time1_IRQHandler(void)
{
}
void Time2_IRQHandler(void)
{
}
回复

使用道具 举报

1

主题

149

回帖

2396

积分

金牌会员

Rank: 6Rank: 6

积分
2396
发表于 2019-8-29 11:45:53 | 显示全部楼层
工程方便发上传一下吗,如果这里不方便发可以发给与你对接的迪文的业务。
回复

使用道具 举报

0

主题

23

回帖

201

积分

中级会员

Rank: 3Rank: 3

积分
201
发表于 2019-9-4 17:29:59 | 显示全部楼层
测试屏幕:DMT10600C070_07WT,使用汇编OS 程序;测试是可以的!
ORG 1000H
GOTO MAIN

MAIN:
     CALL  YEAR      ;闰年还是平年
     CALL  DAY        ;每个月对应的天数



GOTO MAIN


YEAR:   ;判断闰年还是平年    闰年2月有29天,平年28
      LDBR R20,0,40
      LDWR R0,1000H
      MOVXR R26,1,1
      LDWR  R36,400   ;整数年除以400,余数为0代表闰年
      DIV R20,R30,0
      IJNE R37,0,YEAR_1
      LDWR R0,4000H  ;闰年标识
      LDWR R70,1
      MOVXR R70,0,1
      RET
      
YEAR_1:
       LDBR R20,0,40
       LDWR R0,1000H
       MOVXR R26,1,1
       LDWR  R36,4   ;非整数年除以4,余数为0代表闰年
       DIV R20,R30,0
       IJNE R37,0,YEAR_2
       LDWR R0,4000H  ;闰年标识
       LDWR R70,1
       MOVXR R70,0,1
       RET

YEAR_2:
       LDWR R0,4000H  ;平年标识
       LDWR R70,0
       MOVXR R70,0,1
       RET
     
     
  DAY:
      LDBR R20,0,40
      LDWR R0,1002H
      MOVXR R20,1,1
      IJNE R21,1,DAY_2
      ;1月 天限是31天
      LDWR R0,2002H
      LDWR R80,31
      MOVXR R80,0,1
      RET
  
  DAY_2:
         IJNE R21,2,DAY_3
        ;1月 天限是31天
         LDWR R0,4000H
         MOVXR R22,1,1
         IJNE R23,0,DAY_2_1
         ;平年28天
          LDWR R0,2002H
          LDWR R80,28
          MOVXR R80,0,1
         RET
  DAY_2_1:
            ;闰年29天
          LDWR R0,2002H
          LDWR R80,29
           MOVXR R80,0,1
          RET
  DAY_3:
       IJNE R21,3,DAY_4
      ;3月 天限是31天
       LDWR R0,2002H
      LDWR R80,31
      MOVXR R80,0,1
      
      RET
  
DAY_4:
       IJNE R21,4,DAY_5
      ;4月 天限是30天
      LDWR R0,2002H
      LDWR R80,30
      MOVXR R80,0,1
      RET         
     
  DAY_5:
       IJNE R21,5,DAY_6
      ;5月 天限是31天
       LDWR R0,2002H
      LDWR R80,31
      MOVXR R80,0,1
      RET        

   DAY_6:
       IJNE R21,6,DAY_7
      ;6月 天限是30天
      LDWR R0,2002H
      LDWR R80,30
      MOVXR R80,0,1
      RET
      
   DAY_7:
       IJNE R21,7,DAY_8
      ;7月 天限是31天
       LDWR R0,2002H
      LDWR R80,31
      MOVXR R80,0,1
      RET  
      
    DAY_8:
       IJNE R21,8,DAY_9
      ;8月 天限是31天
       LDWR R0,2002H
      LDWR R80,31
      MOVXR R80,0,1
      RET   
      

      
     DAY_9:
       IJNE R21,9,DAY_10
      ;9月 天限是30天
      LDWR R0,2002H
      LDWR R80,30
      MOVXR R80,0,1
      RET   
      
  DAY_10:
       IJNE R21,10,DAY_11
      ;10月 天限是31天
       LDWR R0,2002H
      LDWR R80,31
      MOVXR R80,0,1
      RET         
      
  DAY_11:
       IJNE R21,11,DAY_12
      ;11月 天限是30天
        LDWR R0,2002H
      LDWR R80,30
      MOVXR R80,0,1
      RET            
   DAY_12:
       IJNE R21,12,DAY_ret
      ;12月 天限是31天
       LDWR R0,2002H
      LDWR R80,31
      MOVXR R80,0,1
      RET      
      
DAY_ret:
         RET     

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

1

主题

4

回帖

44

积分

新手上路

Rank: 1

积分
44
 楼主| 发表于 2019-9-5 09:14:27 | 显示全部楼层
pp_XIA 发表于 2019-9-4 17:29
测试屏幕:DMT10600C070_07WT,使用汇编OS 程序;测试是可以的!
ORG 1000H
GOTO MAIN

谢谢,我试下。
回复

使用道具 举报

1

主题

4

回帖

44

积分

新手上路

Rank: 1

积分
44
 楼主| 发表于 2019-9-5 10:05:04 | 显示全部楼层
不胜感谢。 程序可以正常使用,现在就剩下一个问题:每次加电后,数据窗口控件自动默认值为0.不知道有没有什么好的解决办法
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-11-24 21:40 , Processed in 0.093228 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表