找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机汇编DS1302实时时钟课程设计(Proteus仿真+代码)

  [复制链接]
跳转到指定楼层
楼主
实时时钟课题要求:
实时时钟系统设计
1、用 1 个拨动开关设定“工作状态”和“设置状态”;
2、“设置状态”下,用 4 个独立按键实现时间设置:“+”“-”、“移位”、“确认”,
对年(2 位)、月、日、时、分、秒进行每 1 位的数值设置;
3、采用 DS1302 时钟芯片,采用 LCD 进行时钟显示  

Proteus7.8仿真效果如下:
(注:Proteus仿真源文件见附件)
汇编代码如下:
  1. /*******************************实时时钟实验(Zidone)*************************************************/
  2. /***********LCD12864相关定义******************/
  3. //指定管脚
  4.                 LCD_E        BIT P2.0          /*12864使能口*/
  5.                 LCD_DI        BIT P3.0         /*12864数据命令选择*/
  6.                 LCD_RW        BIT P3.1         /*12864读写选择*/
  7.                 LCD_RST        BIT P3.3     /*12864复位*/
  8.                 LCD_CS1        BIT P3.2         /*12864选屏*/
  9.                 LCD_CS2        BIT P2.1         /*12864选屏*/
  10. //指定存放地址        
  11.                 LCD_CMD                EQU 30H             /*12864命令存放地址*/
  12.                 LCD_DATA        EQU 31H         /*12864数据存放地址*/
  13.                 LCD_PAGE        EQU 32H  /*起始B8H 存放页数(用于字符或汉字)*/
  14.                 LCD_COLUMN        EQU 33H  /*起始40H  存放列数*/
  15. /***********DS1302相关定义******************/        
  16. //指定管脚
  17.                 T_CLK        BIT P2.6     /*DS1302时钟口*/
  18.                 T_IO           BIT P2.7         /*DS1302输入输出口*/
  19.                 T_RST        BIT P2.5         /*DS1302复位口*/
  20. //指定存放地址
  21.                 SECOND        EQU 40H                /*秒分时日月周年低位年高位存储地址*/
  22.                 MINUTE        EQU 41H
  23.                 HOUR        EQU 42H
  24.                 DAY                EQU 43H
  25.                 MONTH   EQU 44H
  26.                 WEEK    EQU 45H
  27.                 YEARL   EQU 46H
  28.                 YEARH        EQU 47H
  29. //命令字
  30.                 WR_SECOND EQU 80H
  31.                 RD_SECOND EQU 81H
  32.                 WR_MINUTE EQU 82H
  33.                 RD_MINUTE EQU 83H
  34.                 WR_HOUR   EQU 84H
  35.                 RD_HOUR   EQU 85H
  36.                 WR_DAY    EQU 86H
  37.                 RD_DAY          EQU 87H
  38.                 WR_MONTH  EQU 88H
  39.                 RD_MONTH  EQU 89H
  40.                 WR_WEEK   EQU 8AH
  41.                 RD_WEEK   EQU 8BH
  42.                 WR_YEAR   EQU 8CH
  43.                 RD_YEAR   EQU 8DH
  44.                 WR_PROTECT   EQU 8EH
  45.                 RD_PROTECT   EQU 8FH        
  46. /*********用户开关及按键管脚定义***************/        
  47.                 MODE_SELECT BIT P0.0         /*模式选择管脚:默认高电平,1-正常计时模式,0-时间设定模式*/
  48.                 BIT_SELECT        BIT P0.1        /*移位选择需要修改的参数,使其闪烁,表明选中*/
  49.                 MODE_INC        BIT P0.2        /*加*/
  50.                 MODE_DEC        BIT P0.3        /*减*/
  51.                 MODE_ENSURE BIT P0.4        /*确认*/
  52. /**************主程序**************************/        
  53.                 ORG         0000H
  54.                 LJMP        MAIN
  55.                 ORG                0100H
  56. MAIN:        
  57.                 MOV                SP,#60H
  58. //DS1302初始默认时间设置
  59.                 MOV                YEARH,#20H  
  60.                 MOV                YEARL,#19H
  61.                 MOV                MONTH,#01H
  62.                 MOV                DAY,#05H
  63.                 MOV                WEEK,#06H
  64.                 MOV                HOUR,#21H
  65.                 MOV                MINUTE,#18H
  66.                 MOV                SECOND,#00H
  67.                
  68.                 LCALL        DS1302Init          /*DS1302初始设置*/
  69.                 LCALL         Lcd12864Init /*LCD12864初始化*/
  70. //选择左半屏               
  71.                 SETB        LCD_CS2      
  72.                 CLR                LCD_CS1
  73. //左半屏需要显示的固定汉字               
  74.                 LCALL Write_NIAN        /*’年‘*/
  75.                 LCALL Write_SHI                /*’时‘*/
  76.                 LCALL Write_XING        /*’星‘*/
  77.                 LCALL Write_QI_1        /*’期‘左一半*/
  78. //选择右半屏
  79.                 SETB        LCD_CS1  
  80.                 CLR                LCD_CS2
  81. //右半屏需要显示的固定汉字        
  82.                 LCALL Write_YUE                /*’月‘*/
  83.                 LCALL Write_RI                /*‘日’*/
  84.                 LCALL Write_FEN                /*‘分’*/
  85.                 LCALL Write_MIAO        /*‘秒’*/
  86.                 LCALL Write_QI_2        /*‘期’右边一半*/
  87.                
  88. LOOP1:  
  89.                 JB                MODE_SELECT,LOOP2    /*状态选择,闭合低电平为时间设置状态,断开高电平(默认状态)正常计时状态*/
  90.                 LCALL         DELAY10MS        /*软件消抖*/
  91.                 JB                MODE_SELECT,LOOP2
  92.                 LCALL        DS1302SetTime
  93. LOOP2:
  94.                 LCALL   DS1302GetData
  95.                 LCALL        DS1302ShowTime
  96.                 LCALL   DELAY800MS
  97.                 LJMP    LOOP1
  98. /***************通过按键设定DS1302的起始时间**************************/
  99. /*
  100. 首先判断模式选择开关:
  101.         1.没有按下,执行正常显示的程序(也是弹开后重新执行显示程序)
  102.         2.按下后,执行时间设置程序
  103. 其次判断移位选择开关:
  104.         1.没有按下,默认选择修改年高位
  105.         2.按下,切换需要修改的参数(顺序为:如下标识),并使其闪烁,证明选中
  106. 加按钮:
  107.         1.没有按下,等待
  108.         2.按下,判断选择的是哪一位,执行相应位的加程序
  109. 减按钮:
  110.         1.没有按下,等待
  111.         2.按下,判断选择的是哪一位,执行相应位的加程序
  112. 确认按钮:
  113.         1.没有按下,等待
  114.         2.按下,锁定当前的值写入DS1302
  115.         
  116. 使选中字符闪烁:
  117. 无法在主循环延时,可以尝试开一个定时器中断,每隔一秒插叙状态,执行闪烁,写空白字。
  118. */
  119. DS1302SetTime:
  120.                 MOV                R0,#8   /*R0默认为周*/
  121.                
  122. SELECT_BIT_IF_INC:
  123.                 JB                BIT_SELECT,EEE        /*弹开的说明是选择好了,判断执行的是加还是减*/
  124.                 LCALL         DELAY10MS
  125.                 JB                BIT_SELECT,EEE
  126.                 CJNE        R0,#0,SELECT_BIT
  127.                 MOV                R0,#8
  128. EEE:        LJMP        IF_INC
  129.                
  130. SELECT_BIT:        
  131.                 DEC                R0
  132.                 JNB                BIT_SELECT,$ /*锁定,避免按下后不放就一直加*/
  133. //加判断                        
  134. IF_INC:
  135.                 JB                MODE_INC,GGG        /*没有按下,显示默认状态(被迫这么些短转移JB距离不够,只好中转)*/
  136.                 LCALL         DELAY10MS
  137.                 JB                MODE_INC,GGG
  138.                 CJNE        R0,#8,SET_SECOND
  139.                 LJMP        SET_WEEK
  140. //减判断               
  141. GGG:
  142.                 JB                MODE_DEC,AAA        /*没有按下,显示默认状态(被迫这么些短转移JB距离不够,只好中转)*/
  143.                 LCALL         DELAY10MS
  144.                 JB                MODE_DEC,AAA
  145.                 CJNE        R0,#8,HHH
  146.                 LJMP        SET_WEEK_2
  147.                
  148. HHH:        LJMP        SET_SECOND_2
  149. AAA:        
  150.                 LJMP        SHOW_PROCESS
  151. /**************************************************************************************************/               
  152. //设置周+(8)
  153. SET_WEEK:
  154.                 MOV                A,WEEK
  155.                 CJNE        A,#7,WEEK_INC
  156.                 MOV                WEEK,#1
  157.                
  158.             LJMP    SHOW_PROCESS
  159.                
  160. WEEK_INC:
  161.                 MOV                A,WEEK
  162.                 ADD                A,#1
  163.                 DA                A
  164.                 MOV                WEEK,A
  165.                 LJMP    SHOW_PROCESS
  166.                
  167. //设置秒+(7)
  168. SET_SECOND:
  169.                 CJNE        R0,#7,SET_MINUTE
  170.                 MOV                A,SECOND
  171.                 CJNE        A,#59H,SECOND_INC
  172.                 MOV                SECOND,#00H
  173.             LJMP    SHOW_PROCESS

  174. SECOND_INC:        
  175.                 MOV                A,SECOND
  176.                 ADD                A,#1
  177.                 DA                A
  178.                 MOV                SECOND,A
  179.                 LJMP    SHOW_PROCESS
  180.                
  181. //设置分+(6)               
  182. SET_MINUTE:        
  183.                 CJNE        R0,#6,SET_HOUR
  184.                 MOV                A,MINUTE
  185.                 CJNE        A,#59H,MINUTE_INC
  186.                 MOV                MINUTE,#00H
  187.                 LJMP    SHOW_PROCESS
  188.                
  189. MINUTE_INC:        
  190.                 MOV                A,MINUTE
  191.                 ADD                A,#1
  192.                 DA                A
  193.                 MOV                MINUTE,A
  194.                 LJMP    SHOW_PROCESS
  195.                
  196. //设置时+(5)               
  197. SET_HOUR:  
  198.                 CJNE        R0,#5,SET_DAY
  199.                 MOV                A,HOUR
  200.                 CJNE        A,#23H,HOUR_INC
  201.                 MOV                HOUR,#00
  202.                 LJMP    SHOW_PROCESS
  203.                
  204. HOUR_INC:        
  205.                 MOV                A,HOUR
  206.                 ADD                A,#1
  207.                 DA                A
  208.                 MOV                HOUR,A
  209.                 LJMP    SHOW_PROCESS
  210.                
  211. //设置天+(4)               
  212. SET_DAY:        
  213.                 CJNE        R0,#4,SET_MONTH
  214.                 MOV                A,DAY
  215.                 CJNE        A,#31H,DAY_INC
  216.                 MOV                DAY,#1
  217.                 LJMP    SHOW_PROCESS
  218.                
  219. DAY_INC:        
  220.                 MOV                A,DAY
  221.                 ADD                A,#1
  222.                 DA                A
  223.                 MOV                DAY,A
  224.                 LJMP    SHOW_PROCESS
  225.                
  226. //设置月+(3)               
  227. SET_MONTH:
  228.                 CJNE        R0,#3,SET_YEARL
  229.                 MOV                A,MONTH
  230.                 CJNE        A,#12H,MONTH_INC
  231.                 MOV                MONTH,#1
  232.                 LJMP    SHOW_PROCESS
  233.                
  234. MONTH_INC:        
  235.                 MOV                A,MONTH
  236.                 ADD                A,#1
  237.                 DA                A
  238.                 MOV                MONTH,A
  239.                 LJMP    SHOW_PROCESS
  240.                
  241. //设置年低位+(2)               
  242. SET_YEARL:  
  243.                 CJNE        R0,#2,SET_YEARH
  244.                 MOV                A,YEARL
  245.                 CJNE        A,#99H,YEARL_INC
  246.                 MOV                YEARL,#00H
  247.                 LJMP    SHOW_PROCESS
  248.                
  249. YEARL_INC:        
  250.                 MOV                A,YEARL
  251.                 ADD                A,#1
  252.                 DA                A
  253.                 MOV                YEARL,A
  254.                 LJMP    SHOW_PROCESS        
  255.                
  256. //设置年高位+(1)        
  257. SET_YEARH:  
  258.                 CJNE        R0,#1,FFF
  259.         MOV                A,YEARH
  260.                 CJNE        A,#99H,YEARH_INC
  261.                 MOV                YEARH,#00H
  262.                 LJMP    SHOW_PROCESS        

  263. YEARH_INC:        
  264.                 MOV                A,YEARH
  265.                 ADD                A,#1
  266.                 DA                A
  267.                 MOV                YEARH,A
  268.             LJMP    SHOW_PROCESS

  269. FFF:        LJMP        SET_WEEK  //回调,这个特别需要注意(头疼死我了)
  270. /************************************************************************/
  271. //减部分咯
  272. //设置周-(8)
  273. SET_WEEK_2:
  274.                 MOV                A,WEEK
  275.                 CJNE        A,#1,WEEK_DEC
  276.                 MOV                WEEK,#7
  277.                
  278.             LJMP    SHOW_PROCESS
  279.                
  280. WEEK_DEC:
  281.                 MOV                A,WEEK
  282.                 CLR                AC
  283.                 SUBB        A,#1
  284.                 DA                A
  285.                 MOV                WEEK,A
  286.                 LJMP    SHOW_PROCESS
  287.                
  288. //设置秒-(7)
  289. SET_SECOND_2:
  290.                 CJNE        R0,#7,SET_MINUTE_2
  291.                 MOV                A,SECOND
  292.                 CJNE        A,#00H,SECOND_DEC
  293.                 MOV                SECOND,#59H
  294.             LJMP    SHOW_PROCESS

  295. SECOND_DEC:        
  296.                 MOV                A,SECOND
  297.                 CLR                AC
  298.                 SUBB        A,#1
  299.                 DA                A
  300.                 MOV                SECOND,A
  301.                 LJMP    SHOW_PROCESS
  302.                
  303. //设置分-(6)               
  304. SET_MINUTE_2:        
  305.                 CJNE        R0,#6,SET_HOUR_2
  306.                 MOV                A,MINUTE
  307.                 CJNE        A,#00H,MINUTE_DEC
  308.                 MOV                MINUTE,#59H
  309.                 LJMP    SHOW_PROCESS
  310.                
  311. MINUTE_DEC:        
  312.                 MOV                A,MINUTE
  313.                 CLR                AC
  314.                 SUBB        A,#1
  315.                 DA                A
  316.                 MOV                MINUTE,A
  317.                 LJMP    SHOW_PROCESS
  318.                
  319. //设置时-(5)               
  320. SET_HOUR_2:  
  321.                 CJNE        R0,#5,SET_DAY_2
  322.                 MOV                A,HOUR
  323.                 CJNE        A,#00H,HOUR_DEC
  324.                 MOV                HOUR,#23H
  325.                 LJMP    SHOW_PROCESS
  326.                
  327. HOUR_DEC:        
  328.                 MOV                A,HOUR
  329.                 CLR                AC
  330.                 SUBB        A,#1
  331.                 DA                A
  332.                 MOV                HOUR,A
  333.                 LJMP    SHOW_PROCESS
  334.                
  335. //设置天-(4)               
  336. SET_DAY_2:        
  337.                 CJNE        R0,#4,SET_MONTH_2
  338.                 MOV                A,DAY
  339.                 CJNE        A,#01H,DAY_DEC
  340.                 MOV                DAY,#31H
  341.                 LJMP    SHOW_PROCESS
  342.                
  343. DAY_DEC:        
  344.                 MOV                A,DAY
  345.                 CLR                AC
  346.                 SUBB        A,#1
  347.                 DA                A
  348.                 MOV                DAY,A
  349.                 LJMP    SHOW_PROCESS
  350.                
  351. //设置月-(3)               
  352. SET_MONTH_2:
  353.                 CJNE        R0,#3,SET_YEARL_2
  354.                 MOV                A,MONTH
  355.                 CJNE        A,#01H,MONTH_DEC
  356.                 MOV                MONTH,#12H
  357.                 LJMP    SHOW_PROCESS
  358.                
  359. MONTH_DEC:        
  360.                 MOV                A,MONTH
  361.                 CLR                AC
  362.                 SUBB        A,#1
  363.                 DA                A
  364.                 MOV                MONTH,A
  365.                 LJMP    SHOW_PROCESS
  366.                
  367. //设置年低位-(2)               
  368. SET_YEARL_2:  
  369.                 CJNE        R0,#2,SET_YEARH_2
  370.                 MOV                A,YEARL
  371.                 CJNE        A,#00H,YEARL_DEC
  372.                 MOV                YEARL,#99H
  373.                 LJMP    SHOW_PROCESS
  374.                
  375. YEARL_DEC:        
  376.                 MOV                A,YEARL
  377.                 CLR                AC
  378.                 SUBB        A,#1
  379.                 DA                A
  380.                 MOV                YEARL,A
  381.                 LJMP    SHOW_PROCESS        
  382.                
  383. //设置年高位-(1)        
  384. SET_YEARH_2:  
  385.                 CJNE        R0,#1,III        
  386.         MOV                A,YEARH
  387.                 CJNE        A,#00H,YEARH_DEC
  388.                 MOV                YEARH,#99H
  389.                 LJMP    SHOW_PROCESS        

  390. YEARH_DEC:        
  391.                 MOV                A,YEARH
  392.                 CLR                AC
  393.                 SUBB        A,#1
  394.                 DA                A
  395.                 MOV                YEARH,A
  396.             LJMP    SHOW_PROCESS

  397. III:        LJMP        SET_WEEK_2  //回调,这个特别需要注意(头疼死我了)
  398. //把修改后的结果显示               
  399. SHOW_PROCESS:        
  400.                 JNB                MODE_INC,[        DISCUZ_CODE_1        ]nbsp;       //加按键没有弹起,就等待弹起
  401.                 JNB                MODE_DEC,[        DISCUZ_CODE_1        ]nbsp;       //减按键没有弹起,就等待弹起
  402.                 LCALL        DS1302ShowTime //弹起了说明一次操作完成,就可以把结果显示出来               
  403.                 JB                MODE_ENSURE,BBB //确认键没有按下的话,跳转回去等待移位选择
  404.                 LCALL         DELAY10MS
  405.              JB                MODE_ENSURE,BBB
  406.                 LJMP        DDD
  407. BBB:        LJMP    SELECT_BIT_IF_INC
  408. DDD:        LCALL        DS1302Init                //如果确认键按下就把初始值写入DS1302
  409.                 RET
  410.                
  411. /***************时间显示**************************/
  412. DS1302ShowTime:
  413. //左半屏
  414.                 SETB        LCD_CS2  
  415.                 CLR                LCD_CS1
  416. //左半屏读取到的内容
  417.                 LCALL        Write_YEARH        /*年份的高两位,如“20”*/
  418.                 LCALL        Write_YEARL  /*年份的低两位,如“18”*/
  419.                 LCALL   Write_MONTH_1        /*月份的十位,也就是左半部分,如12月的“1”*/
  420.                 LCALL   Write_HOUR   /*小时的两位,如12点10分的“12”*/
  421.                 LCALL   Write_MINUTE   /*分钟的两位,如12点10分的“10”*/
  422. //右半屏               
  423.                 SETB        LCD_CS1
  424.                 CLR                LCD_CS2
  425. //右半屏读取到的内容
  426.                 LCALL         Write_MONTH_2        /*月份的个位,也就是右半部分,如12月的“2”*/
  427.                 LCALL         Write_DAY                /*日期的两位,如30号的“30”*/
  428.                 LCALL   Write_SECOND   /*秒的两位,如45秒的“45”*/
  429.                 LCALL   Write_WEEK     /*周的一位汉字,如星期一的“一”*/
  430.                 RET
  431. /**************设置DS1302初始参数*************/
  432. DS1302Init:
  433.                 CLR                T_RST
  434.                 CLR                T_CLK
  435.                 SETB        T_RST
  436.                 MOV                B,#WR_PROTECT        /*写保护寄存器地址8EH*/
  437.                 LCALL        DS1302WriteByte
  438.                 MOV                B,#00H  /*WP=0允许写入*/
  439.                 LCALL        DS1302WriteByte               
  440.                 SETB        T_CLK        /*锁定*/        
  441.                 CLR                T_RST
  442.                 MOV                R0,#SECOND
  443.                 MOV                R7,#7        /*秒,分,时,日,月,星期,年*/
  444.                 MOV                R1,#WR_SECOND        
  445. WR_LOOP6:
  446.                 CLR                T_RST
  447.                 CLR                T_CLK
  448.                 SETB        T_RST
  449.                 MOV                B,R1
  450.                 LCALL        DS1302WriteByte        
  451.                 MOV                A,@R0
  452.                 MOV                B,A
  453.                 LCALL        DS1302WriteByte        
  454.                 INC                R0
  455.                 INC                R1         /*写命令字是隔一个地址的*/
  456.                 INC                R1
  457.                 SETB        T_CLK        /*锁定*/               
  458.                 CLR                T_RST
  459.                 DJNZ        R7,WR_LOOP6
  460. //重新锁定写保护寄存器               
  461.                 CLR                T_RST
  462.                 CLR                T_CLK
  463.                 SETB        T_RST
  464.                 MOV                B,#WR_PROTECT
  465.                 LCALL        DS1302WriteByte        
  466.                 MOV                B,#80H
  467.                 LCALL        DS1302WriteByte        
  468.                 SETB        T_CLK
  469.                 CLR                T_RST
  470.                 RET               
  471. /************读DS1302相关时间数据***********/
  472. DS1302GetData:
  473.                 MOV                R0,#SECOND
  474.                 MOV                R7,#7
  475.                 MOV                R1,#RD_SECOND
  476. RD_LOOP2:
  477.                 CLR                T_RST
  478.                 CLR                T_CLK
  479.                 SETB        T_RST
  480.                 MOV                B,R1
  481.                 LCALL        DS1302WriteByte
  482.                
  483.                 LCALL   DS1302ReadByte
  484.                 MOV                @R0,A
  485.                 INC                R0
  486.                 INC                R1
  487.                 INC                R1
  488.                 SETB        T_CLK
  489.                 CLR                T_RST
  490.                 DJNZ        R7,RD_LOOP2
  491.                 RET
  492. /***********串行读出DS1302一字节子程序*******/        
  493. DS1302ReadByte:
  494.                 MOV                R4,#8
  495. RD_LOOP1:
  496.                 MOV                C,T_IO
  497.                 RRC                A
  498.                 SETB        T_CLK
  499.                 CLR                T_CLK
  500.                 DJNZ        R4,RD_LOOP1
  501.                 RET
  502. /***********串行写入DS1302一字节子程序*******/
  503. DS1302WriteByte:
  504.                 MOV         R4,#8
  505. WR_LOOP5:
  506.                 MOV                A,B
  507.                 RRC         A
  508.                 MOV                B,A
  509.                 MOV                T_IO,C
  510.                 SETB    T_CLK
  511.                 CLR                T_CLK
  512.                 DJNZ        R4,WR_LOOP5
  513.                 RET        
  514. /***********写字子程序*************************/
  515. /*1.固定部分*/
  516. //注:一个汉字占两页中间空一页,正巧使用完8页
  517. //写‘年’
  518. Write_NIAN:                  
  519.                 MOV         LCD_PAGE,#0B8H    ;
  520.                 MOV                LCD_COLUMN,#67H
  521.                 MOV                DPTR,#HAN_NIAN
  522.                 MOV                A,#00H
  523.                 LCALL        WriteChinese
  524.                 RET
  525. //写‘月’
  526. Write_YUE:               
  527.                 MOV         LCD_PAGE,#0B8H     
  528.                 MOV                LCD_COLUMN,#49H
  529.                 MOV                DPTR,#HAN_YUE
  530.                 MOV                A,#00H
  531.                 LCALL        WriteChinese
  532.                 RET
  533. //写‘日’
  534. Write_RI:                        
  535.                 MOV         LCD_PAGE,#0B8H
  536.                 MOV                LCD_COLUMN,#6CH
  537.                 MOV                DPTR,#HAN_RI
  538.                 MOV                A,#00H
  539.                 LCALL        WriteChinese
  540.                 RET
  541. //写‘时’               
  542. Write_SHI:               
  543.                 MOV                LCD_PAGE,#0BBH
  544.                 MOV                LCD_COLUMN,#5EH
  545.                 MOV                DPTR,#HAN_SHI
  546.                 MOV                A,#00H
  547.                 LCALL   WriteChinese
  548.                 RET
  549. //写‘分’
  550. Write_FEN:               
  551.                 MOV         LCD_PAGE,#0BBH
  552.                 MOV                LCD_COLUMN,#40H
  553.                 MOV                DPTR,#HAN_FEN
  554.                 MOV                A,#00H
  555.                 LCALL        WriteChinese
  556.                 RET
  557. //写‘秒’
  558. Write_MIAO:               
  559.                 MOV         LCD_PAGE,#0BBH
  560.                 MOV                LCD_COLUMN,#63H
  561.                 MOV                DPTR,#HAN_MIAO
  562.                 MOV                A,#00H
  563.                 LCALL        WriteChinese
  564.                 RET
  565. //写‘星’
  566. Write_XING:               
  567.                 MOV         LCD_PAGE,#0BEH
  568.                 MOV                LCD_COLUMN,#67H
  569.                 MOV                DPTR,#HAN_XING
  570.                 MOV                A,#00H
  571.                 LCALL        WriteChinese
  572.                 RET
  573. //写‘期’左边一半                        
  574. Write_QI_1:        
  575.                 MOV                LCD_PAGE,#0BEH
  576.                 MOV                LCD_COLUMN,#78H
  577.                 MOV                DPTR,#YING_QI_1
  578.                 MOV                A,#00H
  579.                 LCALL   WriteChar        
  580.                 RET
  581. //写‘期’右边一半
  582. Write_QI_2:                        
  583.                 MOV                LCD_PAGE,#0BEH
  584.                 MOV                LCD_COLUMN,#40H
  585.                 MOV                DPTR,#YING_QI_2
  586.                 MOV                A,#00H
  587.                 LCALL   WriteChar        
  588.                 RET
  589. /*2.从DS1302获取部分*/
  590. Write_YEARH:
  591. /*
  592. 注:YEARH=20H手动给定,A=20H/10H=02H->20H,正巧度过两个字(8*2一个字符,20H为两个字符)        
  593. */
  594. //‘2’
  595.                 MOV                A,YEARH  
  596.                 MOV     B,#10H
  597.                 DIV          AB
  598.                 SWAP    A
  599.                 MOV         LCD_PAGE,#0B8H
  600.                 MOV                LCD_COLUMN,#43H
  601.                 MOV                DPTR,#YING_LING   
  602.                 LCALL        WriteChar
  603.                
  604. //‘0’               
  605.                 MOV                A,B
  606.                 SWAP    A
  607.                 MOV                LCD_PAGE,#0B8H
  608.                 MOV                LCD_COLUMN,#4CH
  609.                 MOV                DPTR,#YING_LING
  610.                 LCALL   WriteChar
  611.                 RET
  612. Write_YEARL:               
  613.                 MOV                A,YEARL
  614.                 MOV     B,#10H
  615.                 DIV          AB
  616.                 SWAP    A
  617.                 MOV         LCD_PAGE,#0B8H
  618.                 MOV                LCD_COLUMN,#55H
  619.                 MOV                DPTR,#YING_LING   
  620.                 LCALL        WriteChar
  621.                
  622.                 MOV                A,B
  623.                 SWAP    A
  624.                 MOV                LCD_PAGE,#0B8H
  625.                 MOV                LCD_COLUMN,#5EH
  626.                 MOV                DPTR,#YING_LING
  627.                 LCALL   WriteChar
  628.                 RET
  629. Write_MONTH_1:        
  630. //显示月份的十位,个位在右半屏显示
  631.                 MOV                A,MONTH
  632.                 MOV     B,#10H
  633.                 DIV          AB
  634.                 SWAP    A
  635.                 MOV         LCD_PAGE,#0B8H
  636.                 MOV                LCD_COLUMN,#78H
  637.                 MOV                DPTR,#YING_LING   
  638.                 LCALL        WriteChar
  639.                 RET
  640. Write_HOUR:                        
  641.                 MOV                A,HOUR
  642.                 MOV     B,#10H
  643.                 DIV          AB
  644.                 SWAP    A
  645.                 MOV         LCD_PAGE,#0BBH
  646.                 MOV                LCD_COLUMN,#4CH
  647.                 MOV                DPTR,#YING_LING   
  648.                 LCALL        WriteChar
  649.                
  650.                 MOV                A,B
  651.                 SWAP    A
  652.                 MOV                LCD_PAGE,#0BBH
  653.                 MOV                LCD_COLUMN,#53H
  654.                 MOV                DPTR,#YING_LING
  655.                 LCALL   WriteChar
  656.                 RET
  657. Write_MINUTE:               
  658.                 MOV                A,MINUTE
  659.                 MOV     B,#10H
  660.                 DIV          AB
  661.                 SWAP    A
  662.                 MOV         LCD_PAGE,#0BBH
  663.                 MOV                LCD_COLUMN,#6FH
  664.                 MOV                DPTR,#YING_LING     
  665.                 LCALL        WriteChar
  666.                
  667.                 MOV                A,B
  668.                 SWAP    A
  669.                 MOV                LCD_PAGE,#0BBH
  670.                 MOV                LCD_COLUMN,#78H
  671.                 MOV                DPTR,#YING_LING
  672.                 LCALL   WriteChar
  673.                 RET
  674. //月份的右半部份,即个位
  675. Write_MONTH_2:
  676.                 MOV                A,MONTH
  677.                 MOV     B,#10H
  678.                 DIV          AB
  679.                 MOV                A,B
  680.                 SWAP    A
  681.                 MOV                LCD_PAGE,#0B8H
  682.                 MOV                LCD_COLUMN,#40H
  683.                 MOV                DPTR,#YING_LING
  684.                 LCALL   WriteChar
  685.                 RET
  686. Write_DAY:               
  687.                 MOV                A,DAY
  688.                 MOV     B,#10H
  689.                 DIV          AB
  690.                 SWAP    A
  691.                 MOV         LCD_PAGE,#0B8H
  692.                 MOV                LCD_COLUMN,#5AH
  693.                 MOV                DPTR,#YING_LING   
  694.                 LCALL        WriteChar
  695.                
  696.                 MOV                A,B
  697.                 SWAP    A
  698.                 MOV                LCD_PAGE,#0B8H
  699.                 MOV                LCD_COLUMN,#63H
  700.                 MOV                DPTR,#YING_LING
  701.                 LCALL   WriteChar
  702.                 RET
  703. Write_SECOND:               
  704.                 MOV                A,SECOND
  705.                 MOV     B,#10H
  706.                 DIV          AB
  707.                 SWAP    A
  708.                 MOV         LCD_PAGE,#0BBH
  709.                 MOV                LCD_COLUMN,#51H
  710.                 MOV                DPTR,#YING_LING   
  711.                 LCALL        WriteChar
  712.                
  713.                 MOV                A,B
  714.                 SWAP    A
  715.                 MOV                LCD_PAGE,#0BBH
  716.                 MOV                LCD_COLUMN,#5AH
  717.                 MOV                DPTR,#YING_LING
  718.                 LCALL   WriteChar
  719.                 RET
  720. Write_WEEK:        
  721. /*
  722. 00H-周一;10H-周二;20H-周三;30H-周四;40H-周五;50H-周六;60H-周日(周七)
  723. 而BCD码取值范围为01H-07H,故减一处理
  724. */
  725.                 MOV                A,WEEK
  726.                 DEC                A
  727.                 SWAP    A
  728.                 MOV                B,A
  729.                 ADD                A,B
  730.                 MOV         LCD_PAGE,#0BEH
  731.                 MOV                LCD_COLUMN,#49H
  732.                 MOV                DPTR,#HAN_YI   
  733.                 LCALL        WriteChinese
  734.                 RET
  735. /*****************写汉字**********************/
  736. WriteChinese:
  737. //汉字上半部分8*16
  738.         MOV                R3,A
  739.                 MOV                LCD_CMD, LCD_PAGE                                         
  740.                 LCALL        Lcd12864WriteCmd
  741.                 MOV                LCD_CMD, LCD_COLUMN         
  742.                 LCALL        Lcd12864WriteCmd        
  743.                 MOV                R2, #16                                      
  744. WR_LOOP1:
  745.                 MOV                A,R3
  746.                 MOVC        A, @A+DPTR
  747.                 MOV                LCD_DATA, A
  748.                 LCALL        Lcd12864WriteData
  749.                 INC                DPTR
  750.                 DJNZ        R2, WR_LOOP1
  751. //汉字下半部分8*16               
  752.                 INC                LCD_PAGE
  753.                 MOV                LCD_CMD, LCD_PAGE               
  754.                 LCALL        Lcd12864WriteCmd
  755.                 MOV                LCD_CMD, LCD_COLUMN         
  756.                 LCALL        Lcd12864WriteCmd        
  757.                 MOV                R2, #16                        
  758. WR_LOOP2:
  759.                 MOV                A,R3
  760.                 MOVC        A, @A+DPTR
  761.                 MOV                LCD_DATA, A
  762.                 LCALL        Lcd12864WriteData
  763.                 INC                DPTR
  764.                 DJNZ        R2, WR_LOOP2
  765.             RET
  766. /*******************写字符**********************/
  767. WriteChar:        
  768. //英文上半部分
  769.                 MOV                R3,A
  770.                 MOV                LCD_CMD, LCD_PAGE                                 
  771.                 LCALL        Lcd12864WriteCmd
  772.                 MOV                LCD_CMD, LCD_COLUMN         
  773.                 LCALL        Lcd12864WriteCmd        
  774.                 MOV                R2,#8                                
  775. WR_LOOP3:
  776.         MOV                A,R3
  777.                 MOVC        A, @A+DPTR
  778.                 MOV                LCD_DATA, A
  779.                 LCALL        Lcd12864WriteData
  780.                 INC                DPTR
  781.                 DJNZ        R2, WR_LOOP3
  782. //英文下半部分               
  783.                 INC                LCD_PAGE
  784.                 MOV                LCD_CMD, LCD_PAGE         
  785.                 LCALL        Lcd12864WriteCmd
  786.                 MOV                LCD_CMD, LCD_COLUMN         
  787.                 LCALL        Lcd12864WriteCmd        
  788.                 MOV                R2, #8                        
  789. WR_LOOP4:
  790.                 MOV                A,R3
  791.                 MOVC        A, @A+DPTR
  792.                 MOV                LCD_DATA, A
  793.                 LCALL        Lcd12864WriteData
  794.                 INC                DPTR
  795.                 DJNZ        R2, WR_LOOP4
  796.             RET
  797. /**************LCD12864初始化*****************/
  798. Lcd12864Init:
  799.                 CLR            LCD_RST               
  800.                 LCALL        DELAY100US
  801.                 SETB        LCD_RST
  802.                
  803.                 SETB        LCD_CS1               
  804.                 CLR                 LCD_CS2
  805.                 MOV                 LCD_CMD, #3EH        
  806.                 LCALL        Lcd12864WriteCmd
  807.                 CLR                 LCD_CS1               
  808.                 SETB        LCD_CS2
  809.                 MOV                 LCD_CMD, #3EH        
  810.                 LCALL        Lcd12864WriteCmd
  811.                
  812.                 SETB        LCD_CS1               
  813.                 CLR                 LCD_CS2
  814.                 MOV                 LCD_CMD, #3FH        
  815.                 LCALL        Lcd12864WriteCmd
  816.                 CLR                 LCD_CS1               
  817.                 SETB        LCD_CS2
  818.                 MOV                 LCD_CMD, #3FH        
  819.                 LCALL        Lcd12864WriteCmd
  820.         RET
  821. /***************读状态*************************/
  822. Lcd12864ReadBusy:        
  823.                 MOV                  P1, #0FFH
  824. ReadBusyFlagLOOP:
  825.                 CLR                  LCD_E
  826.                 LCALL        LcdDelay
  827.                 CLR                  LCD_DI
  828.                 SETB        LCD_RW
  829.                 LCALL        LcdDelay
  830.                 SETB        LCD_E
  831.                 LCALL        LcdDelay
  832.                 MOV                  A, P1
  833.                 LCALL        LcdDelay
  834.                 CLR                  LCD_E
  835.                 LCALL        LcdDelay
  836.                 CLR                  LCD_RW
  837.                 CLR                  LCD_DI
  838.                 SETB        LCD_E
  839.                 JB                  ACC.7, ReadBusyFlagLOOP
  840.                 RET
  841. /**************LCD12864写命令*****************/
  842. Lcd12864WriteCmd:
  843.                 LCALL        Lcd12864ReadBusy
  844.                 CLR                  LCD_E
  845.                 LCALL        LcdDelay
  846.                 CLR                  LCD_DI
  847.                 CLR                  LCD_RW
  848.                 LCALL        LcdDelay
  849.                 SETB        LCD_E
  850.                 LCALL        LcdDelay
  851.                 MOV                  P1, LCD_CMD
  852.                 LCALL        LcdDelay
  853.                 CLR                  LCD_E
  854.                 LCALL        LcdDelay
  855.                 SETB        LCD_DI
  856.                 SETB        LCD_RW
  857.                 SETB        LCD_E
  858.                 RET
  859. /**************LCD12864写数据*****************/
  860. Lcd12864WriteData:        
  861.                 LCALL        Lcd12864ReadBusy
  862.                 CLR                 LCD_E
  863.                 LCALL        LcdDelay
  864.                 SETB        LCD_DI
  865.                 CLR                 LCD_RW
  866.                 LCALL        LcdDelay
  867.                 SETB        LCD_E
  868.                 LCALL        LcdDelay
  869.                 MOV                  P1, LCD_DATA
  870.                 LCALL        LcdDelay
  871.                 CLR                  LCD_E
  872.                 LCALL        LcdDelay
  873.                 SETB        LCD_DI
  874.                 SETB        LCD_RW
  875.                 SETB        LCD_E
  876.                 RET
  877. /***************LCD时序延时*************************/
  878. LcdDelay:
  879.                 NOP
  880.                 RET
  881. /*************LCD复位用延时*************************/
  882. DELAY100US:   
  883.     MOV R6,#13H
  884. DL0:
  885.     MOV R5,#01H
  886.     DJNZ R5,$
  887.     DJNZ R6,DL0
  888.     RET
  889. /***************闪烁用延时**************************/
  890. DELAY_1S:
  891.                 DEL1:                MOV R5,#10;1us
  892.                 DEL2:                MOV R6,#200;10*1us
  893.                 DEL3:                MOV R7,#249;200*10*1us
  894.                 DEL4:                DJNZ R7,DEL4;249*200*10*2us
  895.                                     DJNZ R6,DEL3;200*10*2us
  896.                                     DJNZ R5,DEL2;10*2us
  897.                                         RET
  898. /**************消抖用延时******************************/
  899. DELAY10MS:   ;误差 0us
  900.     MOV R7,#01H
  901. DL1:
  902.     MOV R6,#26H
  903. DL2:
  904.     MOV R5,#82H
  905.     DJNZ R5,$
  906.     DJNZ R6,DL2
  907.     DJNZ R7,DL1
  908.     RET
  909. /**************LCD显示用延时******************************/        
  910. DELAY800MS:   ;误差 0us
  911.     MOV R7,#5FH
  912. DL3:
  913.     MOV R6,#8AH
  914. DL4:
  915.     MOV R5,#1DH
  916.     DJNZ R5,$
  917.     DJNZ R6,DL0
  918.     DJNZ R7,DL1
  919.     NOP
  920.     NOP
  921.     RET

  922. /**************显示的内容(字模)**********************/
  923. /*
  924. 年(0) 月(1) 日(2) 星(3) 期(4) 一(5) 二(6) 三(7)
  925. 四(8) 五(9) 六(10) 七(11) 时(12) 分(13) 秒(14) 0(15)
  926. 1(16) 2(17) 3(18) 4(19) 5(20) 6(21) 7(22) 8(23) 9(24)
  927. */
  928. HAN_NIAN:
  929.              DB  0FFH,0DFH,0E7H,038H,0BBH,0BBH,0BBH,0BBH
  930.                 DB  003H,0BBH,0BBH,0BBH,0BBH,0FBH,0FFH,0FFH
  931.                 DB  0FBH,0FBH,0FBH,0F8H,0FBH,0FBH,0FBH,0FBH
  932.                 DB  000H,0FBH,0FBH,0FBH,0FBH,0FBH,0FBH,0FFH;年0
  933. HAN_YUE:
  934.                 DB  0FFH,0FFH,0FFH,001H,0DDH,0DDH,0DDH,0DDH
  935.                 DB  0DDH,0DDH,0DDH,0DDH,001H,0FFH,0FFH,0FFH
  936.                 DB  07FH,0BFH,0CFH,0F0H,0FDH,0FDH,0FDH,0FDH
  937.                 DB  0FDH,0FDH,0BDH,07DH,080H,0FFH,0FFH,0FFH;月1
  938. HAN_RI:
  939.                 DB  0FFH,0FFH,0FFH,001H,07DH,07DH,07DH,07DH
  940.                 DB  07DH,07DH,07DH,001H,0FFH,0FFH,0FFH,0FFH
  941.                 DB  0FFH,0FFH,0FFH,000H,0BFH,0BFH,0BFH,0BFH
  942.                 DB  0BFH,0BFH,0BFH,000H,0FFH,0FFH,0FFH,0FFH;日2
  943. HAN_XING:
  944.                 DB  0FFH,0FFH,0FFH,041H,0D5H,0D5H,0D5H,015H
  945.                 DB  0D5H,0D5H,0D5H,0C1H,0FFH,0FFH,0FFH,0FFH
  946.                 DB  0FFH,0BBH,0BDH,0B6H,0B6H,0B6H,0B6H,080H
  947.                 DB  0B6H,0B6H,0B6H,0B6H,0BEH,0BFH,0FFH,0FFH;星3
  948. YING_QI_1:               
  949.                 DB  0FFH,0FDH,000H,06DH,06DH,06DH,000H,0FDH
  950.                 DB  0BBH,0DBH,0E8H,0FBH,0FBH,0F3H,0A8H,0DBH
  951. YING_QI_2:
  952.                 DB  0FFH,000H,0EEH,0EEH,0EEH,000H,0FFH,0FFH
  953.                 DB  0E7H,0F8H,0FEH,0DEH,0BEH,0C0H,0FFH,0FFH;期4
  954. HAN_YI:
  955.             DB  07FH,07FH,07FH,07FH,07FH,07FH,07FH,07FH
  956.                 DB  07FH,07FH,07FH,07FH,07FH,07FH,07FH,0FFH
  957.                 DB  0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
  958.                 DB  0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;一5
  959. HAN_ER:
  960.                 DB  0FFH,0FFH,0F7H,0F7H,0F7H,0F7H,0F7H,0F7H
  961.                 DB  0F7H,0F7H,0F7H,0F7H,0F7H,0FFH,0FFH,0FFH
  962.                 DB  0EFH,0EFH,0EFH,0EFH,0EFH,0EFH,0EFH,0EFH
  963.                 DB  0EFH,0EFH,0EFH,0EFH,0EFH,0EFH,0EFH,0FFH;二6
  964. HAN_SAN:
  965.                 DB  0FFH,0FBH,07BH,07BH,07BH,07BH,07BH,07BH
  966.                 DB  07BH,07BH,07BH,07BH,07BH,0FBH,0FFH,0FFH
  967.                 DB  0DFH,0DFH,0DFH,0DFH,0DFH,0DFH,0DFH,0DFH
  968.                 DB  0DFH,0DFH,0DFH,0DFH,0DFH,0DFH,0DFH,0FFH;三7
  969. HAN_SI:
  970.                 DB  0FFH,003H,0FBH,0FBH,0FBH,003H,0FBH,0FBH
  971.                 DB  0FBH,003H,0FBH,0FBH,0FBH,003H,0FFH,0FFH
  972.                 DB  0FFH,080H,0D7H,0DBH,0DCH,0DFH,0DFH,0DFH
  973.                 DB  0DFH,0DEH,0DDH,0DDH,0DDH,080H,0FFH,0FFH;四8
  974. HAN_WU:
  975.                 DB  0FFH,0FDH,0BDH,0BDH,0BDH,03DH,081H,0BDH
  976.                 DB  0BDH,0BDH,0BDH,03DH,0FDH,0FDH,0FFH,0FFH
  977.                 DB  0BFH,0BFH,0BFH,0BFH,087H,0B8H,0BFH,0BFH
  978.                 DB  0BFH,0BFH,0BFH,080H,0BFH,0BFH,0BFH,0FFH;五9
  979. HAN_LIU:
  980.                 DB  0DFH,0DFH,0DFH,0DFH,0DFH,0DFH,0DEH,0DDH
  981.                 DB  0D3H,0DFH,0DFH,0DFH,0DFH,0DFH,0DFH,0FFH
  982.                 DB  0FFH,0BFH,0DFH,0EFH,0F3H,0FCH,0FFH,0FFH
  983.                 DB  0FFH,0FEH,0FDH,0FBH,0E7H,09FH,0FFH,0FFH;六10
  984. HAN_QI:/*也就是星期日*/
  985.                 DB  0FFH,0FFH,0FFH,001H,07DH,07DH,07DH,07DH
  986.                 DB  07DH,07DH,07DH,001H,0FFH,0FFH,0FFH,0FFH
  987.                 DB  0FFH,0FFH,0FFH,000H,0BFH,0BFH,0BFH,0BFH
  988.                 DB  0BFH,0BFH,0BFH,000H,0FFH,0FFH,0FFH,0FFH;日11
  989. HAN_SHI:
  990.                 DB  0FFH,003H,07BH,07BH,07BH,003H,0FFH,0EFH
  991.                 DB  0EFH,0EFH,0EFH,0EFH,000H,0EFH,0EFH,0FFH
  992.                 DB  0FFH,0C0H,0EFH,0EFH,0EFH,0C0H,0FFH,0FFH
  993.                 DB  0FEH,0F9H,0BFH,07FH,080H,0FFH,0FFH,0FFH;时12
  994. HAN_FEN:
  995.                 DB  07FH,0BFH,0DFH,06FH,077H,079H,07FH,07FH
  996.                 DB  07FH,07CH,073H,0EFH,0DFH,0BFH,07FH,0FFH
  997.                 DB  0FFH,07FH,0BFH,0DFH,0E7H,0F8H,0FFH,0BFH
  998.                 DB  07FH,0BFH,0C0H,0FFH,0FFH,0FFH,0FFH,0FFH;分13
  999. HAN_MIAO:
  1000.                 DB  0DBH,0DBH,05BH,001H,0DCH,0DDH,0FFH,03FH
  1001.                 DB  0C7H,0FFH,000H,0FFH,0F7H,0EFH,09FH,0FFH
  1002.                 DB  0F7H,0F9H,0FEH,000H,0FEH,0F9H,07EH,07FH
  1003.                 DB  0BFH,0BFH,0D8H,0EFH,0F3H,0FCH,0FFH,0FFH;秒14
  1004.                         
  1005. YING_LING:
  1006.             DB  0FFH,01FH,0EFH,0F7H,0F7H,0EFH,01FH,0FFH
  1007.                 DB  0FFH,0F0H,0EFH,0DFH,0DFH,0EFH,0F0H,0FFH;015
  1008. YING_YI:
  1009.                 DB  0FFH,0FFH,0EFH,0EFH,007H,0FFH,0FFH,0FFH
  1010.                 DB  0FFH,0FFH,0DFH,0DFH,0C0H,0DFH,0DFH,0FFH;116
  1011. YING_ER:
  1012.                 DB  0FFH,08FH,0F7H,0F7H,0F7H,0F7H,00FH,0FFH
  1013.                 DB  0FFH,0CFH,0D7H,0DBH,0DDH,0DEH,0CFH,0FFH;217
  1014. YING_SAN:
  1015.                 DB  0FFH,0CFH,0F7H,0F7H,0F7H,077H,08FH,0FFH
  1016.                 DB  0FFH,0E7H,0DFH,0DEH,0DEH,0DDH,0E3H,0FFH;318
  1017. YING_SI:
  1018.                 DB  0FFH,0FFH,07FH,0BFH,0CFH,007H,0FFH,0FFH
  1019.                 DB  0FFH,0F9H,0FAH,0DBH,0DBH,0C0H,0DBH,0DBH;419
  1020. YING_WU:
  1021.                 DB  0FFH,007H,077H,077H,077H,0F7H,0F7H,0FFH
  1022.                 DB  0FFH,0E6H,0DFH,0DFH,0DFH,0EEH,0F1H,0FFH;520
  1023. YING_LIU:
  1024.                 DB  0FFH,01FH,0EFH,077H,077H,06FH,0FFH,0FFH
  1025.                 DB  0FFH,0F0H,0EEH,0DFH,0DFH,0DFH,0E0H,0FFH;621
  1026. YING_QI:
  1027.                 DB  0FFH,0E7H,0F7H,0F7H,077H,097H,0E7H,0FFH
  1028.                 DB  0FFH,0FFH,0FFH,0C1H,0FEH,0FFH,0FFH,0FFH;722
  1029. YING_BA:
  1030.                 DB  0FFH,08FH,077H,0F7H,0F7H,077H,08FH,0FFH
  1031.                 DB  0FFH,0E3H,0DDH,0DEH,0DEH,0DDH,0E3H,0FFH;823
  1032. YING_JIU:
  1033.                 DB  0FFH,00FH,0F7H,0F7H,0F7H,0EFH,01FH,0FFH
  1034.                 DB  0FFH,0FEH,0EDH,0DDH,0DDH,0EEH,0F0H,0FFH;924        

  1035. HAN_GAN:
  1036. DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF
  1037. DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF

  1038. /***************结束*************************/
  1039. END
复制代码
(注:原工程文件见附件)
说明:
目前没有把当前选择的修改闪烁或者加下划线凸显出来,小伙伴们可以进行改进提升一下。
附件:
仿真.zip (21.54 KB, 下载次数: 127)

程序.zip (55.67 KB, 下载次数: 113)


评分

参与人数 1黑币 +70 收起 理由
admin + 70 赞一个!

查看全部评分

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

使用道具 举报

沙发
ID:236933 发表于 2019-11-15 14:45 | 只看该作者
经测试  仿真无法运行  
回复

使用道具 举报

板凳
ID:259017 发表于 2020-1-15 23:03 | 只看该作者
筱豆先生 发表于 2019-11-15 14:45
经测试  仿真无法运行

你你你都没有添加hex文件到单片机里面,当然无法运行啊,呜呜呜~,我又被冤枉了,不然我都仿真是咋成功的。
回复

使用道具 举报

地板
ID:259017 发表于 2020-1-15 23:03 | 只看该作者
筱豆先生 发表于 2019-11-15 14:45
经测试  仿真无法运行

兄弟,没问题的,把hex添加进仿真的51单片机里面就行了
回复

使用道具 举报

5#
ID:283883 发表于 2020-1-16 07:19 | 只看该作者
能不能把仿真和程序放在一个压缩包里,节约一下黑币,谢谢
回复

使用道具 举报

6#
ID:706153 发表于 2020-4-14 15:30 | 只看该作者
这么无法修改时间呢 求操作
回复

使用道具 举报

7#
ID:795314 发表于 2020-7-2 08:47 | 只看该作者
为什么运行时候LCD不亮呢?
回复

使用道具 举报

8#
ID:572963 发表于 2020-7-13 12:15 | 只看该作者
啊,重新编译一次就可以正常运行了
回复

使用道具 举报

9#
ID:572963 发表于 2020-7-18 10:48 | 只看该作者
本帖最后由 Blueanc 于 2020-7-18 16:20 编辑

楼主的代码有点小问题,在51单片机系列没有对减法的bcd调整指令,所以SUBB A,#1 ;DA A这两句指令应该改为ADD A,#99H;DA A
回复

使用道具 举报

10#
ID:572963 发表于 2020-8-26 17:12 | 只看该作者
没有修改时间的时候闪烁
回复

使用道具 举报

11#
ID:849527 发表于 2021-4-19 17:51 来自手机 | 只看该作者
有c语言的吗?
回复

使用道具 举报

12#
ID:978636 发表于 2021-12-26 19:56 来自手机 | 只看该作者
CHEN_KAI 发表于 2021-4-19 17:51
有c语言的吗?

兄弟 找到C语言的了嘛
回复

使用道具 举报

13#
ID:1029834 发表于 2022-12-18 14:12 | 只看该作者
有C语言的吗
回复

使用道具 举报

14#
ID:1108449 发表于 2024-1-8 09:52 | 只看该作者
大佬,能不能发一个C语言的程序?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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