找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7095|回复: 29
打印 上一主题 下一主题
收起左侧

[原创]农历转换程序模块,c51和a51文件均可调用,有c51调用示范,汇编...

  [复制链接]
跳转到指定楼层
楼主
ID:7485 发表于 2013-5-9 12:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
农历转换程序模块,c51和a51文件均可调用,有c51调用示范,汇编程序
可以屏蔽闰月的“节日”,可以辨别腊月小月29日的除夕。
农历天干、地支纪年,有生肖。
新建工程,然后直接将两个文件(其中nongli.c是示范文件)加入源代码组即可。

单片机源程序如下:
  1. //此文件经2013.04.14 00:00调试正常,可以通过c程序调用,
  2. //输入: 变量 YEAR,MONTH,DATE(年、月、日,16进制码)
  3. //输出:位变量CHUXI(腊月29或30除夕标志),=0是小月,腊月29日是除夕。
  4. //输出:位变量FLAG_Y(闰月标志,判农历节日用)FLAG_Y=0,是后月,后月无节日
  5. //输出: TIANGAN,DIZHI(天干、地支、生肖)
  6. //输出: NO_YEAR,NO_MONTH,NO_DATE(农历年、月、日),(16进制码)
  7. //      FLAG_Y,闰月标志,CHUXI,腊月小时,腊月29是除夕标志,
  8. //      以上变量和子程序名均为大写,c51引用时应注意。
  9. ;**************************************************************
  10. ;转换农历子程序
  11. ;把已计算出的当年已过天数,从元旦对应的农历日期开始,减去29
  12. ;天,再减去大小月标志,如够减,[判断现存的农历月和当年的闰月
  13. ;是否相等,如相等就减1(下面加1,保持不变)],月数加1,
  14. ;再一次循环,直到不够减,余数做日,退出子程序(本次转换结束)
  15. ;*******************************************************
  16. PUBLIC  YEAR, MONTH,DATE                          //外部可以调用的变量(公共的)输入的
  17. PUBLIC  NO_YEAR,NO_MONTH,NO_DATE,TIANGAN,DIZHI    //外部可以调用的变量(公共的)输出的
  18. PUBLIC   CHUXI,FLAG_Y                             //外部可以调用的位变量(公共的)输出的
  19. PUBLIC  ZHUAN_H                                   //外部可以调用的子程序(公共的)
  20. ZH_RAM  SEGMENT DATA      ;定义一个段名,ZH_RAM是段名,在data区间,这种格式是让编译器统一安排内存使用
  21.                           ;作为定义变量的空间段
  22. ZH_ROM    SEGMENT CODE    ;定义一个段名,KEYP是段名, 在CODE区间,作为本程序的存储空间
  23. //ZH_BIAO    SEGMENT BDATA
  24. RSEG    ZH_RAM            ;定义ZH_RAM段的使用
  25.             YEAR:               DS    1        //在编译连接整个工程时,给以下各变量保留一个字节的DATA空间
  26.             MONTH:              DS    1
  27.             DATE:               DS    1
  28.             NO_YEAR:            DS    1
  29.             NO_MONTH:           DS    1
  30.             NO_DATE:            DS    1
  31.             NO_MONTH_R:         DS    1             ;闰月
  32.             TIANGAN:            DS    1
  33.             DIZHI:              DS    1
  34. BSEG        AT  00H                                  ;定义位地址,下面的位地址从 00H开始(指定绝对地址,也可以不指定)
  35.             RUNYUEBIT:          DBIT  1              ;农历闰月标志
  36.             CHUXI:              DBIT   RUNYUEBIT+1   ;定义除夕标志,区分腊月大小月
  37.             BZ_RUN_NIAN:        DBIT   RUNYUEBIT+2   ;定义闰年标志
  38.             FLAG_Y:             DBIT   RUNYUEBIT+3   ;闰月标志,写农历节日用(闰月无节日)
  39. RSEG  ZH_ROM                    //以下的代码使用ZH_ROM段
  40. ZHUAN_H:
  41.             PUSH     ACC   
  42.             PUSH     DPH
  43.             PUSH     DPL
  44.             PUSH     03H
  45.             PUSH     04H
  46.             PUSH     05H
  47.             PUSH     06H
  48.             PUSH     07H
  49. /*           mov  sbuf, year           ;发送到电脑一个字节,供调试使用
  50.              jnb   ti,   $
  51.              clr  ti              */
  52.             CLR    RUNYUEBIT           ;清除标记位,待处理闰月时用
  53.             CALL   TIANSHU             ;调用计算天数子程序
  54.             CALL   ZUZHUANG            ;调用读表子程序
  55.             MOV    A,   #4             ;读第4字节,是元旦对应的农历月日
  56.             CALL   DU_NO_SHU           ;读取的数据在A,元旦对应的农历月日
  57.             MOV    B,    A             ;先保护起来读取的数据
  58.             ANL    A,   #00011111B     ;屏蔽掉高3位,只取元旦对应的农历日
  59.             MOV    NO_DATE,  A         ;存入农历日暂存器
  60.             MOV    A,   B              ;取回数据
  61.             ANL    A,   #10000000B     ;只取元旦农历月份值,A=00H是11月,A=80H,是腊月,仅此可能
  62.             JZ     ZHUAN_H_0           ;A=00H是11月,A=80H,是腊月
  63.             MOV    NO_MONTH,   #12     ;A=1,就是腊月12月
  64.             CALL   ZOYI                ;是腊月,左移,表中第一个月是11月,变成腊月
  65.             JMP    ZHUAN_H_6
  66. ;以上是读出元旦对应的农历的月日,写入对应单元。调整对应农历月大小标志到最左边一位
  67. ZHUAN_H_0:  MOV    NO_MONTH,   #11     ;否则就是11月(春节元旦间只能是11、12月)
  68. ZHUAN_H_6:  MOV    NO_YEAR,   YEAR
  69.             DEC    NO_YEAR
  70.             MOV    A,    R3            ;取出已过天数的低位
  71.             MOV    NO_MONTH_R,NO_MONTH ;另存,备农历纪念日用(闰月标记为0)
  72.             ADD    A,    NO_DATE       ;从元旦对应农历月的月初算起(以便后面计算)
  73.             MOV    R3,   A             ;低位送回R3
  74.             MOV    A,    R4            ;加上低位,相加后可能的进位
  75.             ADDC   A,    #0            ;加上可能有的进位
  76.             MOV    R4,   A             ;高位送回R4
  77. ZHUAN_H_3:  
  78.             MOV    NO_DATE,  R3        ;先暂存,如下面不够减的,这就是农历日期         
  79.             CALL   RUNYUE              ;判断下一个月是否是闰月,并作处理
  80.             CALL   JIAN                ;减去一个月的天数(子程序)
  81.             JNZ    ZHUAN_H_4           ;刚好够减A=0,否则跳过下面一行
  82.             MOV    A,   R4
  83.             JNZ    ZHUAN_H_4   
  84.             JMP    ZHUAN_H_2           ;跳出
  85. ZHUAN_H_4:  
  86.             JC     ZHUAN_H_2           ;不够减的,有借位C=1,跳转,退出
  87. ZHUAN_H_1:  
  88.             INC    NO_MONTH            ;月份加1,是否闰月都到这来,加1
  89.             MOV    A, NO_MONTH         ;是不是到了腊月?是腊月再加1,就是1月
  90.             CJNE   A,  #13, ZHUAN_H_5  ;12月再加1,就是13,转为1月
  91.             MOV    NO_MONTH,  #1       ;农历月进位,变为1月,农历年加1
  92.             INC    NO_YEAR
  93. ZHUAN_H_5:  
  94.             MOV    NO_MONTH_R,NO_MONTH ;调整以后拷贝到NO_MONTH_R
  95.             JMP    ZHUAN_H_3           ;转回,进行下一轮减法
  96. ZHUAN_H_2:                             ;如果天数没有够减,从这转出
  97.             CALL     GAN_ZHI
  98.             POP      07H
  99.             POP      06H
  100.             POP      05H
  101.             POP      04H
  102.             POP      03H
  103.             POP      DPL
  104.             POP      DPH
  105.             POP      ACC
  106.             RET          ;
  107. ;**************************************************
  108. ;当前日距离元旦天数计算子程序(农历转换二级子程序)
  109. ;出口:高位在R4,低位在R3
  110. ;**************************************************
  111. TIANSHU:
  112.             PUSH     ACC
  113.             PUSH     DPH
  114.             PUSH     DPL
  115.             MOV   DPTR,  #TAB_MONTH    ;当前月止,累计整月天数表
  116.             MOV   A,     MONTH         ;当前公历月份
  117.             CLR   C
  118.             RLC   A                    ;表中,每月高、低位占2字节,所以乘2
  119.             MOV   B,     A             ;保存ACC中的值
  120.             MOVC  A,     @A+DPTR       ;查表,求日期的低位字节
  121.             ADD   A,     DATE          ;加上当前日期,可能会有进位
  122.             DEC   A                    ;因后面的程序要加上元旦所对应农历日前面的天数
  123.                                        ;比如当日17,需要加16,先减1,在这里减比较方便
  124.             MOV   R3,    A             ;暂时保存到R3
  125.             INC   DPTR                 ;读高位字节
  126.             MOV   A,     B             ;取出ACC中的值,使用
  127.             MOVC  A,     @A+DPTR       ;查表,整月天数高位字节
  128.             ADDC  A,     #0            ;加上低位字节可能的进位(如果有C=1,否C=0)
  129.             MOV   R4,    A             ;R4存放高位字节
  130.             MOV   A,     MONTH         ;再取当前月份
  131.             CJNE  A,  #3,TIANSHU_0     ;月份是否大于3月份,如果是3月份以后需区别闰月
  132. TIANSHU_0:  JC   TIANSHU_1             ;若A<3,C=1,A>=3,C=0,若C=1则跳转,1、2月不加闰     ;
  133.             MOV   A,     R3            ;取回当前已过天数         ;
  134.             MOV   C,     BZ_RUN_NIAN   ;大于3月加上闰年(等于1,或等于0)
  135.             ADDC  A,     #0            ;加上C中闰年的天数,是闰年RUN=1,否RUN=0,另加1天?
  136.             MOV   R3,    A             ;
  137.             MOV   A,     R4            ;加闰月以后,是否有进位?
  138.             ADDC  A,     #0            ;加上进位
  139.             MOV   R4,    A             ;存回,已过天数的高位在R4,
  140. TIANSHU_1:;  POP      PSW               ;当前日止,累计天数计算完成
  141.             POP      DPL
  142.             POP      DPH
  143.             POP      ACC
  144.             RET                        ;
  145. ;************************************************************************
  146. ;闰月处理子程序。(农历转换二级子程序)农历数据表中第3字节是闰月信息,
  147. ;                最高位是闰月月份的大小,低4位是月份
  148. ;功能:1、判断当前月是不是闰月。
  149. ;      2、是闰月在R6、R5最左面一位塞入闰月的大小标志。以后的月份大小标志顺序后推
  150. ;      3、月份减1,因为后面程序按正常月加1,所以保持月份不加
  151. ;      4、闰月处理过后,做上标记,下一循环时,闰月已过去,按正常月
  152. ;************************************************************************
  153. RUNYUE:
  154.             PUSH     ACC
  155.             PUSH     B
  156.             MOV    C,   RUNYUEBIT      ;RUNYUEBIT是标记(20H.6),=1处理过
  157.             JC     RUNYUE_E            ;闰月是否处理过了(C=1),处理过,退出
  158.             MOV    A,   #3             ;判断是否是闰月,第3字节是闰月数据
  159.             CALL   DU_NO_SHU           ;调读数子程序
  160.             MOV    B,   A              ;保存待用
  161.             ANL    A,   #0FH           ;将读到的数据屏蔽高4位(低4位是闰月月份)
  162.             JZ     RUNYUE_E
  163.             INC    A                   ;闰月月份加上1,如:闰四月,是第个五月
  164.             CLR    FLAG_Y              ;清除闰月标志,根据下面一句重新设置
  165.             CJNE   A,  NO_MONTH,RUNYUE_E;判断当前月和闰月等否? 不等,跳出
  166.             SETB   FLAG_Y
  167.             MOV    A,   B              ;送回第三字节的值
  168.             RLC    A                   ;闰月大小标志移到C
  169.             MOV    A,   R6             ;前半年的大小月标志
  170.             RRC    A                   ;闰月大小标志插入R6最高位(即将处理月的位置)
  171.             MOV    R6,  A              ;
  172.             MOV    A,   R5             ;
  173.             RRC    A                   ;每个月的标志全部往后退一位
  174.             MOV    R5,  A
  175.             DEC    NO_MONTH            ;月份数减1,和上一次的月份值一样
  176.             MOV    NO_MONTH_R,#0       ;把闰月标记为0,闰月的纪念日无效
  177.             SETB   RUNYUEBIT           ;闰年已经处理过,做上标记
  178. RUNYUE_E:
  179.             POP      B
  180.             POP      ACC
  181.             RET
  182. ;***************************************************************
  183. ;左转移子程序,(农历转换二级子程序)
  184. ;每次把当月的大小值左移到C,参与农历日期转换运算
  185. ;***************************************************************
  186. ZOYI:
  187.             PUSH   ACC
  188.             MOV    A,   R5             ;R5是后半年的月份大小值
  189.             RLC    A                   ;
  190.             MOV    R5,   A             ;左转以后存回
  191.             MOV    A,    R6            ;R6中存放的是前半年月份大小值
  192.             RLC    A                   ;R6转出到C的数据参与转移
  193.             MOV    R6,   A             ;存回。
  194.             POP    ACC
  195.             RET
  196. ;****************************************************************
  197. ;已过天数,减农历一个月的天数子程序。(农历转换二级子程序)
  198. ;当年已过天数减29减大小月标志
  199. ;入口:低位数在R3,高位数在R4,
  200. ;出口:低位数在R3,高位数在R4
  201. ;****************************************************************
  202. JIAN:  
  203.             CALL   ZOYI                ;把当前月的大小标志左移到C
  204.             MOV    A,    R3            ;取已过天数的低位
  205.             SUBB   A,    #29           ;减去基本天数(小月29天,大月再减1)
  206.             MOV    R3,   A             ;送回
  207.             MOV    A,    R4
  208.             SUBB   A,    #0            ;减去C中可能有的借位
  209.             MOV    R4,   A             ;送回
  210.             MOV    A,    R3            ;
  211.             RET
  212. ;**********************************************************
  213. ;(农历转换二级子程序)
  214. ;读表子程序是把农历数据表第一个字节,放到R5中,7~2位表示7.8.9.10.11.12月
  215. ;第二字节,7~0位表示:上年11.12.当年1.2.3.4.5.6月,读出后,放入R6
  216. ;(本来该子程序是将分散在多个字节中的信息合并,后来改变,没有取消)
  217. ;**********************************************************
  218. ZUZHUANG:                 
  219.             MOV      A,   #1           ;读第1字节11.12.1.2.3.4.5.6月,返回在A
  220.             CALL     DU_NO_SHU         ;读数子程序
  221.             MOV      R6,   A           ;R6中存放11.12.1.2.3.4.5.6月大小值
  222.             MOV      C,  ACC.6         ;这个字节在后面纪念日确定除夕是否30时候用,暂存
  223.             MOV      CHUXI, C          ;CHUXI是腊月的大小标志,1为大月,除夕为30日
  224.             MOV      A,    #2          ;读第2字节
  225.             CALL     DU_NO_SHU         ;读数子程序
  226.             MOV      R5,   A           ;7.8.9.10.11.12月大小值存入R5
  227.             RET
  228. ;*****************************************************
  229. ;读取农历数据表的子程序(农历转换二级子程序)
  230. ;入口:欲读取的字节序号(1~4)在A,当前年份仍然在YEAR
  231. ;出口:读取到的数据在A
  232. ;*****************************************************
  233. DU_NO_SHU:
  234.             MOV     R7,   A            ;保存A中的字节号
  235.             MOV     DPTR, #TAB_NO_SHU  ;数据表首送DPTR
  236.             MOV     A,    YEAR         ;年送A
  237. //-------------------------------------------------------------
  238.             CLR     BZ_RUN_NIAN
  239.             JB      ACC.0,  HHHHHH     ;如果YEAR的低2位为0,是闰年
  240.             JB      ACC.1,  HHHHHH     ;
  241.             SETB    BZ_RUN_NIAN        ;设置闰年标志
  242. //-------------------------------------------------------------
  243.        HHHHHH:
  244.             CLR     C                  ;求出行数
  245.             MOV     B,    #4         ;年份乘4(左转2次=乘4)
  246.             MUL     AB               ;因为每年4个字节数据
  247.             ADD     A,   DPL           ;偏移字节数和DPTR低位相加
  248.             MOV     DPL, A             ;送回
  249.             MOV     A,   B             ;如果仅仅是2010~2030,可以简化        
  250.             ADDC    A,   DPH           ;低位可能有进位,所以加
  251.             MOV     DPH, A             ;*****最后修正2009.12.22.22:58
  252.             MOV     A,   R7            ;R7中是入口参数,字节号
  253.             MOVC    A,   @A+DPTR
  254.             RET
  255. ;***************************************************************
  256. ;计算农历纪年"干支"子程序(农历转换二级子程序)
  257. ;***************************************************************
  258. GAN_ZHI:
  259.             PUSH  ACC
  260.             MOV   A,  NO_YEAR
  261.             CLR   C
  262.             SUBB  A,  #4               ;2004年是甲申年,设"甲"为"0",4=2004年
  263.             MOV   B,  #10              ;除以10,取余数
  264.             DIV   AB
  265.             MOV   TIANGAN,  B          ;送"天干""TIANGAN"寄存
  266.       
  267.             MOV   A,  NO_YEAR
  268.             SUBB  A,  #8               ;2008年是戊子年,子为"0"
  269.             MOV   B,  #12              ;除以12,取余数
  270.             DIV   AB
  271.             MOV   DIZHI,  B            ;送"地支""DIZHI"寄存
  272.             POP   ACC
  273.             RET
  274. ;************************************************************
  275. TAB_MONTH:
  276.           DB   0,0,0,0,31,0,59,0,90,0,120,0,151       ;每月初止天数,低位在前,高位在后
  277.                         DB   0,181,0,212,0,243,0,17,1,48,1,78,1
  278. ;******************************************************
  279. ;*******************************************************
  280. TAB_NO_SHU:         
  281.                                DB  00      ;机器是从0开始,我们习惯从1开始
  282.                                DB                        0B2H,        058H,        000H,        019H                ;2000
  283.                                DB                        0B6H,        054H,        004H,        087H                ;2001
  284.                                DB                        075H,        028H,        000H,        012H                ;2002
  285.                                DB                        0B6H,        094H,        000H,        01DH                ;2003
  286.                                DB                        05DH,        054H,        002H,        08AH                ;2004
  287.                                DB                        055H,        0A8H,        000H,        015H                ;2005
  288.                                DB                        0AAH,        0ECH,        007H,        082H                ;2006
  289.                                DB                        0C9H,        074H,        000H,        00DH                ;2007
  290.                                DB                        064H,        0B4H,        000H,        017H                ;2008
  291.                                DB                        072H,        0ACH,        005H,        086H                ;2009
  292.                                DB                        0EAH,        054H,        000H,        011H                ;2010
  293.                                DB                        06DH,        028H,        000H,        01BH                ;2011
  294.                                DB                        0AEH,        0A8H,        004H,        088H                ;2012(原数据表第一字节是0BAH,错的)
  295.                                DB                        0ABH,        054H,        000H,        014H                ;2013
  296.                                DB                        055H,        074H,        009H,        081H                ;2014
  297.                                DB                        052H,        0E8H,        000H,        00BH                ;2015
  298.                                DB                        0A9H,        06CH,        000H,        016H                ;2016
  299.                                DB                        0D4H,        05CH,        086H,        084H                ;2017
  300.                                DB                        0D4H,        0ACH,        000H,        00FH                ;2018
  301.                                DB                        0EAH,        04CH,        000H,        01AH                ;2019
  302.                                DB                        0DEH,        054H,        004H,        087H                ;2020
  303.                                DB                        05AH,        0A8H,        000H,        012H                ;2021
  304.                                DB                        0ABH,        054H,        000H,        01DH                ;2022
  305.                                DB                        056H,        0D4H,        002H,        08AH                ;2023
  306.                                DB                        052H,        0D8H,        000H,        014H                ;2024
  307.                                DB                        0A9H,        0B8H,        006H,        082H                ;2025
  308.                                DB                        0A9H,        038H,        000H,        00DH                ;2026
  309.                                DB                        0B4H,        098H,        000H,        018H                ;2027
  310.                                DB                        0BAH,        098H,        005H,        085H                ;2028
  311.                                DB                        0B5H,        04CH,        000H,        011H                ;2029
  312.                                DB                        0D6H,        0A8H,        000H,        01CH                ;2030
  313.                                DB                        09DH,        0A8H,        003H,        088H                ;2031
  314.                                DB                        0A5H,        0B4H,        000H,        013H                ;2032
  315.                                DB                        052H,        0F4H,        007H,        081H                ;2033
  316.                                DB                        052H,        0B4H,        000H,        00BH                ;2034
  317.                                DB                        069H,        034H,        000H,        016H                ;2035
  318.                                DB                        074H,        02CH,        086H,        084H                ;2036
  319.                                DB                        0F4H,        094H,        000H,        010H                ;2037
  320.                                DB                        075H,        048H,        000H,        01AH                ;2038
  321.                                DB                        0B7H,        050H,        005H,        087H                ;2039
  322.                                DB                        02DH,        068H,        000H,        011H                ;2040
  323.                                DB                        095H,        0B4H,        000H,        01DH                ;2041
  324.                                DB                        055H,        06CH,        002H,        08AH                ;2042
  325.                                DB                        0D2H,        06CH,        000H,        015H                ;2043
  326.                                DB                        0E9H,        05CH,        007H,        082H                ;2044
  327.                                DB                        0E9H,        02CH,        000H,        00EH                ;2045
  328.                                DB                        0EAH,        094H,        000H,        019H                ;2046
  329.                                DB                        06CH,        094H,        085H,        086H                ;2047
  330.                                DB                        05BH,        048H,        000H,        010H                ;2048
  331.                                DB                        0ABH,        068H,        000H,        01CH                ;2049
  332.                                DB                        092H,        0D8H,        083H,        088H                ;2050
  333.                                DB                        0A4H,        0DCH,        000H,        013H                ;2051
  334.                                DB                        0D2H,        07CH,        008H,        01EH                ;2052
  335.                                DB                        0D2H,        05CH,        000H,        00CH                ;2053
  336.                                DB                        0D9H,        02CH,        000H,        017H                ;2054
  337.                                DB                        0DAH,        028H,        086H,        084H                ;2055
  338.                                DB                        0BAH,        094H,        000H,        00FH                ;2056
  339.                                DB                        05AH,        0C8H,        000H,        01AH                ;2057
  340.                                DB                        0A9H,        0B0H,        084H,        087H                ;2058
  341.                                DB                        02AH,        0B8H,        000H,        011H                ;2059
  342.                                DB                        0A4H,        0B8H,        000H,        01CH                ;2060
  343.                                DB                        0B4H,        0B8H,        003H,        08AH                ;2061
  344.                                DB                        0B2H,        058H,        000H,        015H                ;2062
  345.                                DB                        0B5H,        054H,        007H,        082H                ;2063
  346.                                DB                        075H,        028H,        000H,        00DH                ;2064
  347.                                DB                        0B6H,        094H,        000H,        019H                ;2065
  348.                                DB                        057H,        054H,        005H,        086H                ;2066
  349.                                DB                        055H,        0A8H,        000H,        010H                ;2067
  350.                                DB                        0A9H,        0B4H,        000H,        01BH                ;2068
  351.                                DB                        055H,        074H,        004H,        089H                ;2069
  352.                                DB                        054H,        0B4H,        000H,        013H                ;2070
  353.                                DB                        06AH,        06CH,        008H,        081H                ;2071
  354.                                DB                        0EAH,        054H,        000H,        00CH                ;2072
  355.                                DB                        06DH,        028H,        000H,        017H                ;2073
  356.                                DB                        0ADH,        0A8H,        006H,        084H                ;2074
  357.                                DB                        0ABH,        054H,        000H,        00FH                ;2075
  358.                                DB                        055H,        068H,        000H,        019H                ;2076
  359.                                DB                        0AAH,        0E8H,        004H,        087H                ;2077
  360.                                DB                        0A9H,        06CH,        000H,        012H                ;2078
  361.                                DB                        0D4H,        0ACH,        000H,        01DH                ;2079
  362.                                DB                        0ECH,        09CH,        003H,        08AH                ;2080
  363.                                DB                        0DAH,        04CH,        000H,        016H                ;2081
  364.                                DB                        0DCH,        0CCH,        007H,        083H                ;2082
  365.                                DB                        0DAH,        0A8H,        000H,        00EH                ;2083
  366.                                DB                        0ABH,        054H,        000H,        018H                ;2084
  367.                                DB                        052H,        0D4H,        085H,        086H                ;2085
  368.                                DB                        052H,        0D8H,        000H,        010H                ;2086
  369.                                DB                        0A9H,        05CH,        000H,        01BH                ;2087
  370.                                DB                        0D5H,        038H,        004H,        088H                ;2088
  371.                                DB                        0B4H,        098H,        000H,        014H                ;2089
  372.                                DB                        0BAH,        058H,        008H,        081H                ;2090
  373.                                DB                        0B5H,        048H,        000H,        00CH                ;2091
  374.                                DB                        0B6H,        0A8H,        000H,        017H                ;2092
  375.                                DB                        09AH,        0A8H,        086H,        084H                ;2093
  376.                                DB                        095H,        0B4H,        000H,        00FH                ;2094
  377.                                DB                        052H,        0B8H,        000H,        019H                ;2095
  378.                                DB                        0AAH,        074H,        004H,        086H                ;2096
  379.                                DB                        069H,        034H,        000H,        012H                ;2097
  380.                                DB                        074H,        054H,        000H,        01DH                ;2098
  381.                                DB                        07CH,        094H,        002H,        08BH                ;2099
  382.                                DB                        075H,        04CH,        000H,        015H                ;2100
  383. ;*********************************************************************
  384. END
  385. /*
  386. //以下是c51调用汇编语言"农历转换.asm"文件示范,需要另建立一个.c文件
  387. extern unsigned char data year,month,date;
  388. extern void zhuan_h(void);
  389. extern bit flag_y,chuxi; //农历闰月标志,FLAG_Y=1,是前月,FLAG_Y=0,是后月,就是闰月,闰月无节日
  390.                          //chuxi是腊月大小月的标志。=0是小月,腊月29日是除夕。
  391. extern NO_YEAR,NO_MONTH,NO_DATE,TIANGAN,DIZHI;
  392. void main(void)
  393.    {
  394.      unsigned char year_1,month_1,date_1;
  395. //     year=0x0d;          //年、月、日可以是时钟芯片读出的值,如果是压缩BCD码,需要先转换,此处为模拟
  396. //     month=0x05;         //如果是ds12887等,可以设定读出的位hex码,不需要转换。
  397. //     date=0x09;
  398. //如果是ds1302读出的值,是压缩BCD码,如:year_1=0x13(2013年)month_1=0x05,daye_1=0x09,需要如下转换:
  399.      year_1=0x13;            //年、月、日若是ds1302时钟芯片读出的值,是压缩BCD码,需要先转换,此处为模拟
  400.      month_1=0x05;
  401.      date_1=0x09;      
  402.      year=year_1/16*10+year_1%16;
  403.      month=month_1/16*10+month_1%16;
  404.      date=date_1/16*10+date_1%16;     
  405.      zhuan_h();
  406.     while(1);               //无限循环,模拟主程序,
  407.    }

  408. */
复制代码

以上程序51hei提供下载:
汇编程序.7z (5.5 KB, 下载次数: 54)


评分

参与人数 1威望 +5 黑币 +5 收起 理由
wangyin + 5 + 5 正好需要,对我很有用,谢谢楼主的无私奉献

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶1 踩
回复

使用道具 举报

来自 2#
ID:7485 发表于 2013-6-27 14:12 | 只看该作者
liujia 发表于 2013-5-23 06:54
nongli.c  这个文件怎么找不到啊?

就是帖子里直接看到的那个程序内容。
//以下是c51调用汇编语言"农历转换.asm"文件示范.c文件
extern unsigned char data year,month,date;
extern void zhuan_h(void);
extern bit flag_y,chuxi; //农历闰月标志,FLAG_Y=1,是前月,FLAG_Y=0,是后月,就是闰月,闰月无节日
                         //chuxi是腊月大小月的标志。=0是小月,腊月29日是除夕。
extern NO_YEAR,NO_MONTH,NO_DATE,TIANGAN,DIZHI;
void main(void)
   {
//     unsigned char year_1,month_1,date_1;
     year=0x0d;          //年、月、日可以是时钟芯片读出的值,如果是压缩BCD码,需要先转换,此处为模拟
     month=0x05;         //如果是ds12887等,可以设定读出的位hex码,不需要转换。
     date=0x09;
//如果是ds1302读出的值,是压缩BCD码,如:year_1=0x13(2013年)month_1=0x05,daye_1=0x09,需要如下转换:
//     year_1=0x13;            //年、月、日若是ds1302时钟芯片读出的值,是压缩BCD码,需要先转换,此处为模拟
//     month_1=0x05;
//     date_1=0x09;      
//     year=year_1/16*10+year_1%16;
//     month=month_1/16*10+month_1%16;
//     date=date_1/16*10+date_1%16;     
     zhuan_h();
    while(1);               //无限循环,模拟主程序,
   }
回复

使用道具 举报

板凳
ID:7485 发表于 2013-5-9 12:38 | 只看该作者
怎么出来一个“扣除金钱数”30??怎么去不掉?
回复

使用道具 举报

地板
ID:25820 发表于 2013-5-23 06:53 | 只看该作者
终于在本论坛找到我想要的东西了
回复

使用道具 举报

5#
ID:25820 发表于 2013-5-23 06:54 | 只看该作者
nongli.c  这个文件怎么找不到啊?
回复

使用道具 举报

6#
ID:50527 发表于 2013-5-24 11:15 | 只看该作者
找了很久,谢了
回复

使用道具 举报

7#
ID:60546 发表于 2014-4-11 00:02 | 只看该作者
今天无意中来到这里,这个论坛真好。
回复

使用道具 举报

8#
ID:63692 发表于 2014-7-7 10:00 | 只看该作者
这个论坛真好,学习学习
回复

使用道具 举报

9#
ID:21524 发表于 2014-7-12 22:32 | 只看该作者
学习学习
回复

使用道具 举报

10#
ID:67678 发表于 2014-11-15 21:14 | 只看该作者
谢谢楼主好资料
回复

使用道具 举报

11#
ID:63831 发表于 2014-11-17 09:23 | 只看该作者
学习哈!!!
回复

使用道具 举报

12#
ID:94112 发表于 2015-10-30 16:51 | 只看该作者
找了很久,参考一下
回复

使用道具 举报

13#
ID:98220 发表于 2015-12-3 21:05 | 只看该作者
不错!!!!~看看
回复

使用道具 举报

14#
ID:91262 发表于 2016-4-9 14:40 来自手机 | 只看该作者
很有用的材料,找了很久
回复

使用道具 举报

15#
ID:111188 发表于 2016-4-9 23:49 | 只看该作者
看看学习一下
回复

使用道具 举报

16#
ID:112865 发表于 2016-4-12 09:00 来自手机 | 只看该作者
感谢楼主
回复

使用道具 举报

17#
ID:112053 发表于 2016-5-8 17:25 | 只看该作者
挺好的,拿来学习
回复

使用道具 举报

18#
ID:153912 发表于 2016-12-11 16:19 | 只看该作者
终于有汇编的了
回复

使用道具 举报

19#
ID:190602 发表于 2017-4-17 21:01 | 只看该作者
谢谢楼主
回复

使用道具 举报

20#
ID:77498 发表于 2017-5-1 08:06 | 只看该作者
谢谢楼主好资料
回复

使用道具 举报

21#
ID:216269 发表于 2017-7-7 15:24 | 只看该作者
今天无意中来到这里,这个论坛真好。
回复

使用道具 举报

22#
ID:205887 发表于 2017-7-8 10:29 | 只看该作者
好东西一定要顶一下
回复

使用道具 举报

23#
ID:373976 发表于 2018-7-31 18:01 | 只看该作者
看看算法是不是与众不同?
回复

使用道具 举报

24#
ID:373976 发表于 2018-7-31 18:03 | 只看该作者
竟然说我非法入侵?莫名其妙。
回复

使用道具 举报

25#
ID:88727 发表于 2018-8-1 11:33 | 只看该作者

谢谢楼主
回复

使用道具 举报

26#
ID:205015 发表于 2019-4-9 14:32 | 只看该作者
需要,感谢分享。
回复

使用道具 举报

27#
ID:389903 发表于 2019-9-20 09:17 | 只看该作者
谢谢分享。下载回来学习一下。
回复

使用道具 举报

28#
ID:623087 发表于 2019-10-21 23:19 | 只看该作者
太及时了,正好用到
回复

使用道具 举报

29#
ID:699879 发表于 2020-3-31 17:33 | 只看该作者
正好能用的上,试试看。
回复

使用道具 举报

30#
ID:572101 发表于 2020-4-7 15:26 | 只看该作者
终于找到我需要的了
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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