找回密码
 立即注册

QQ登录

只需一步,快速开始

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

电子秒表课程设计 带ppt 仿真 单片机c51和汇编程序

  [复制链接]
跳转到指定楼层
楼主
电子秒表课程设计

1. 设计要求
   用AT89C52设计一个用液晶显示作为“秒表”:显示时间为时,分,秒,每秒自动加1,另设计四个按键,按下按键1后,可发现led停止闪烁,即时钟停止走时,时钟停在当前时刻,按下按键2和按键3后,可改变时间,按下按键4后,时钟复位到修改后的时间,时钟重新开始运转。
2. 实验原理
   题目难点在于通过对键盘的扫描对时钟的走时/停止进行控制,项目采用定时器T0作为计时器,每10ms发生一次中断,每100次中断加1s。在此期间,如“开始”按键按下,程序方将TR0置为1,从而开启中断,时钟开始走时。
  系统总体方案
   本系统采用AT89C52单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合硬件电路如电源电路,复位电路,显示电路,以及一些按键电路等来设计计时器,将软、硬件有机地结合起来。其中软件系统采用汇编语言编写程序,包括显示程序,计数程序,中断,硬件系统利用PROTEUS强大的功能来实现,简单切易于观察,在仿真中就可以观察到实际的工作状态。
  仿真图


      设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程,在此次的设计中我学会很多,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对单片机汇编语言掌握得不好……通过这次课程设计之后,一定把以前所学过的知识重新温故。
     在做设计的日子里老师和同学给了我们很大的帮助,再次对你们表示衷心的感谢!





秒表汇编程序:
  1.             LCDRS  BIT   P2.0
  2.                 lCDEN  BIT   P2.2
  3.         LCD    EQU   P3
  4.                
  5.                 LED    BIT   P2.4       
  6.    
  7.             NUM    EQU   20H
  8.                 MIAO   EQU   21H
  9.                 FEN    EQU   22H
  10.                 SHI    EQU   23H   
  11.         SITE   EQU   24H
  12.             MIAO_L EQU   25H
  13.                 FEN_L  EQU   26H
  14.                 SHI_L  EQU   26H
  15.                 KNUM   EQU   27H


  16.              ORG    0000H
  17.                 LJMP   MAIN
  18.                 ORG    000BH
  19.                 LJMP   IT0P
  20.                

  21. MAIN:   LCALL  INITL
  22.         LCALL  INITT
  23.         MOV    SP,   #60H
  24.                 MOV    MIAO, #00H   
  25.                 MOV    FEN,  #00H
  26.                 MOV    SHI,  #00H
  27.                 MOV    KNUM, #00H
  28.                 SETB   LED
  29.                
  30. HERE:   LCALL   SM
  31.                 LCALL   SF
  32.                 LCALL   SS
  33.                 LCALL   KEY4
  34.                 LCALL   KEY1
  35.                 LCALL   JIA
  36.                 LCALL   JIAN
  37.         LJMP   HERE

  38.                
  39. INITL:  CLR    LCDEN
  40.         MOV    R1,   #38H  
  41.         LCALL  LCDWC
  42.         MOV    R1,   #0CH
  43.         LCALL  LCDWC
  44.         MOV    R1,   #06H
  45.         LCALL  LCDWC
  46.         MOV    R1,   #01H
  47.         LCALL  LCDWC
  48.                 MOV    R1,   #80H
  49.         LCALL  LCDWC
  50.                 LCALL  LCDT1
  51.                 LCALL  LCDT3
  52.                 MOV    R1,   #0C9H
  53.                 LCALL  LCDWC
  54.                 MOV    R1,   #3AH
  55.                 LCALL  LCDWD
  56.                 MOV    R1,   #0CCH
  57.                 LCALL  LCDWC
  58.                 MOV    R1,   #3AH
  59.                 LCALL  LCDWD
  60.                 RET

  61. INITT:  CLR    A
  62.                 MOV    B,     #10
  63.         MOV    R4,    #0FH
  64.             MOV    NUM,   #0AH
  65.         MOV    TMOD,  #01H
  66.             MOV    TH0,   #4CH
  67.             MOV    TL0,   #0D0H
  68.                 SETB   EA
  69.                 SETB   ET0
  70.             SETB   TR0
  71.                 RET         

  72. LCDWC:  CLR    LCDRS
  73.         MOV    LCD,  R1
  74.         LCALL  DELYMS       
  75.         SETB   LCDEN
  76.                 LCALL  DELYMS
  77.                 CLR    LCDEN
  78.         RET   

  79. LCDWD:  SETB   LCDRS
  80.         MOV    LCD,  R1
  81.         LCALL  DELYMS       
  82.         SETB   LCDEN
  83.                 LCALL  DELYMS
  84.                 CLR    LCDEN
  85.         RET

  86. DELYMS: MOV    R7,  #5
  87.         MOV    R6,  #110                                
  88. DEL:    DJNZ   R7,  DEL1
  89. DEL1:   DJNZ   R6,  DEL
  90.                 RET

  91. DELY:   MOV    R7,  #40
  92. DEL12:  MOV    R6,  #123                                
  93. DEL11:  DJNZ   R6,  DEL11
  94.         NOP
  95.         DJNZ   R7,  DEL12
  96.                 RET

  97. LCDT1:  MOV    DPTR, #0000H
  98.         MOV    R2,  #12
  99.         MOV           B,   #80H
  100.         MOV    DPTR,#TAB1
  101.                 MOVC   A,   @A + DPTR
  102.                 MOV    R1,  B
  103.                 LCALL  LCDWC
  104.                 MOV    R1,  A
  105.                 LCALL  LCDWD
  106. LCDT2:  CLR    A
  107.                 INC    DPTR
  108.                 INC    B
  109.                 MOVC   A,   @A + DPTR
  110.                 MOV    R1,  B
  111.                 LCALL  LCDWC
  112.                 MOV    R1,  A
  113.                 LCALL  LCDWD
  114.                 DJNZ   R2,  LCDT2
  115.                 RET

  116. LCDT3:  MOV   R2, #4
  117.         MOV          B, #0BFH
  118. LCDT4:  CLR    A
  119.                 INC    DPTR
  120.                 INC    B
  121.                 MOVC   A,   @A + DPTR
  122.                 MOV    R1,  B
  123.                 LCALL  LCDWC
  124.                 MOV    R1,  A
  125.                 LCALL  LCDWD
  126.                 DJNZ   R2,  LCDT4
  127.                 RET         

  128. IT0P:   PUSH   PSW
  129.         PUSH   Acc
  130.         MOV    TH0,   #4CH
  131.             MOV    TL0,   #0D0H
  132.             DJNZ   NUM,   LOOPT
  133.                 MOV    NUM,   #14H
  134.         INC    MIAO
  135.                 MOV    A,     MIAO
  136.             CJNE   A,     #60,   LOOPT
  137.             MOV    MIAO,  #00
  138.                 INC    FEN
  139.                 MOV    A,     FEN
  140.                 CJNE   A,     #60,   LOOPT
  141.             MOV    FEN,   #00      
  142.                 MOV    A,     SHI
  143.                 CJNE   A,     #24,   LOOPT
  144.             MOV    SHI,   #00
  145.                
  146. LOOPT:  POP    Acc
  147.                 POP    PSW
  148.         RETI            

  149. SM:     MOV    A,     MIAO
  150.         DIV    AB
  151.                 MOV    MIAO_L,B
  152.                 MOV           SITE,  #0CDH
  153.                 LCALL  SHOW
  154.                 MOV    SITE,  #0CEH
  155.                 MOV    A,     MIAO_L
  156.                 LCALL  SHOW
  157.                 MOV    B,     #10
  158.                 RET


  159.                
  160. SF:            MOV    A,     FEN
  161.         DIV    AB
  162.                 MOV    FEN_L, B
  163.                 MOV           SITE,  #0CAH
  164.                 LCALL  SHOW
  165.                 MOV    SITE,  #0CBH
  166.                 MOV    A,     FEN_L
  167.                 LCALL  SHOW
  168.                 MOV    B,     #10
  169.                 RET

  170. SS:     MOV    A,    SHI
  171.         DIV    AB
  172.                 MOV    SHI_L, B
  173.                 MOV           SITE,  #0C7H
  174.                 LCALL  SHOW
  175.                 MOV    SITE,  #0C8H
  176.                 MOV    A,     SHI_L
  177.                 LCALL  SHOW
  178.                 MOV    B,     #10
  179.                 RET

  180. SHOW:   MOV    DPTR,  #0000H
  181.         MOV    DPTR,  #TAB2
  182.             MOVC   A,     @A + DPTR
  183.                 MOV    R1,    SITE
  184.                 LCALL  LCDWC
  185.                 MOV    R1,    A
  186.                 LCALL  LCDWD
  187.                 RET
  188.                
  189. KEY1:   MOV    A,     P1
  190.                 CJNE   A,     #0FEH,  LOOPK2
  191.             LCALL  DELY
  192.                 CJNE   A,     #0FEH,  LOOPK2
  193. WAIT1:  JNB    P1.0,  WAIT1
  194.         CPL    TR0
  195.                 CPL    LED
  196.                 RET

  197. LOOPK2: RET                                                           

  198. KEY4:   MOV    A,     P1
  199.                 CJNE   A,     #0F7H,  LOOPK2  
  200.             LCALL  DELY
  201.                 CJNE   A,     #0F7H,  LOOPK       
  202. WAIT4:  JNB    P1.3,  WAIT4
  203.         INC    KNUM
  204.                 MOV    R4,    KNUM
  205. K1:                  CJNE   R4,    #01,    k2       
  206.                 CPL           TR0
  207.                    MOV    DPTR, #TABM
  208.                 LCALL  TISHI
  209. K2:            CJNE   R4,    #02,    K3       
  210.                 MOV    DPTR, #TABF
  211.                 LCALL  TISHI
  212. K3:                CJNE   R4,    #03,    K4       
  213.                 MOV    DPTR, #TABS
  214.                 LCALL  TISHI
  215. k4:                CJNE   R4,    #04,    LOOPK       
  216.                 MOV    KNUM,  #00H
  217.             MOV    R4,    #00H
  218.             SETB   TR0
  219.                 MOV    DPTR, #TABI
  220.                 LCALL  TISHI
  221.                 RET

  222. TISHI:
  223.         MOV    R2,  #7
  224.         MOV           B,   #86H
  225.                 MOVC   A,   @A + DPTR
  226.                 MOV    R1,  B
  227.                 LCALL  LCDWC
  228.                 MOV    R1,  A
  229.                 LCALL  LCDWD
  230. LCDT5:  CLR    A
  231.                 INC    DPTR
  232.                 INC    B
  233.                 MOVC   A,   @A + DPTR
  234.                 MOV    R1,  B
  235.                 LCALL  LCDWC
  236.                 MOV    R1,  A
  237.                 LCALL  LCDWD
  238.                 DJNZ   R2,  LCDT5
  239.           RET
  240. TABM:      DB "  SECOND  "
  241. TABF:      DB "  MINUTE  "
  242. TABS:      DB "  HOUR   "
  243. TABI:      DB "  CHINA  "
  244.         

  245. LOOPK:  RET

  246. JIA:    MOV    A,     KNUM
  247.                 CJNE   A,     #00H,  KEY2       
  248.                 RET
  249. KEY2:   MOV    A,     P1
  250.         CJNE   A,     #0FDH,  LOOPK
  251.                 LCALL  DELY
  252.                 CJNE   A,     #0FDH,  LOOPK
  253. WAIT2:  JNB    P1.1,  WAIT2
  254.                 MOV    A,     KNUM
  255. MJIA:        CJNE   A,     #01,    FJIA
  256.                 INC    MIAO
  257.                 LCALL  LOOPKM
  258.                 MOV    A,     MIAO
  259.                 CJNE   A,     #60,  LOOPK
  260.             MOV    MIAO,  #00H
  261.                 LCALL  LOOPKM
  262. FJIA:        CJNE   A,     #02,  SJIA
  263.         INC    FEN
  264.                 LCALL  LOOPKF
  265.                 MOV    A,     FEN
  266.                 CJNE   A,     #60,  LOOPK
  267.             MOV    FEN,   #00H
  268.                 LCALL  LOOPKF
  269. SJIA:        CJNE   A,     #03,  LOOPK
  270.         INC    SHI
  271.                 LCALL  LOOPKS
  272.                 MOV    A,     SHI
  273.                 CJNE   A,     #24,  LOOPK
  274.                 MOV    SHI,   #00H
  275.                 LCALL  LOOPKS
  276.                 RET

  277. JIAN:   MOV    A,     KNUM
  278.                 CJNE   A,     #00H,  KEY3       
  279.                 RET
  280. KEY3:   MOV    A,     P1
  281.         CJNE   A,     #0FBH, LOOPK
  282.                 LCALL  DELY
  283.                 CJNE   A,     #0FBH, LOOPK
  284. WAIT3:  JNB    P1.2,  WAIT3
  285.                 MOV    A,     KNUM
  286. MJIAN:        CJNE   A,     #01,   FJIAN
  287.                 MOV    A,     MIAO
  288.                 CJNE   A,     #00,   MJIAN0
  289.             MOV    MIAO,  #59
  290.                 LCALL  LOOPKM
  291.                 RET
  292. MJIAN0: DEC    MIAO
  293.                 LCALL  LOOPKM
  294. FJIAN:        CJNE   A,     #02,  SJIAN
  295.         MOV    A,     FEN
  296.                 CJNE   A,     #00,  FJIAN0
  297.             MOV    FEN,   #59
  298.                 LCALL  LOOPKF
  299.                 RET
  300. FJIAN0: DEC    FEN
  301.                 LCALL  LOOPKF
  302. SJIAN:        CJNE   A,     #03,  LOOPK1
  303.         MOV    A,     SHI
  304.                 CJNE   A,     #00,  SJIAN0
  305.                 MOV    SHI,   #23
  306.                 LCALL  LOOPKS
  307.                 RET
  308. SJIAN0:        DEC    SHI
  309.         LCALL  LOOPKS
  310.                 RET

  311. LOOPK1: RET
  312. LOOPKM: LCALL   SM
  313.         RET

  314. LOOPKF: LCALL   SF
  315.         RET

  316. LOOPKS: LCALL   SS
  317.         RET
  318.        


  319.                
  320. TAB1:   DB "H.I.T.  CHINA", "TIME"
  321. TAB2:   DB 30H, 31H, 32H, 33H, 34H, 35H, 36H, 37H, 38H,39H
  322.                 END                     
复制代码


单片机秒表c语言程序
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. uchar code china[] = " H.I.T  CHINA";
  5. uchar code time[] = " TIME  ";
  6. void delayms(uchar xms);
  7. void key_scan();
  8. void write_sfm(uchar add, uchar date);
  9. sbit lcdrs = P2^0;
  10. sbit write = P2^1;
  11. sbit lcden = P2^2;
  12. sbit led = P2^4;
  13. sbit key1 = P1^0;
  14. sbit key2 = P1^1;
  15. sbit key3 = P1^2;
  16. sbit key4 = P1^3;
  17. uchar num, miao, shi, fen, knum;

  18. void delayms(uchar xms){
  19.   uchar i,j;
  20.   for(i = xms; i > 0; i --)
  21.     for(j = 110;j>0;j--);   
  22. }

  23. void write_com(uchar com){
  24.      lcdrs = 0;
  25.          P3 = com;
  26.          delayms(5);
  27.          lcden = 1;
  28.          delayms(5);
  29.          lcden = 0;
  30. }

  31. void write_date(uchar date){
  32.      lcdrs = 1;
  33.          P3 = date;
  34.          delayms(5);
  35.          lcden = 1;
  36.          delayms(5);
  37.          lcden = 0;
  38. }

  39. void write_sfm(uchar add, uchar date){
  40.      uchar shi,ge;
  41.          shi = date/10;
  42.          ge = date%10;
  43.          write_com(0x80 + 0x40 + add);
  44.          write_date(0x30 + shi);
  45.          write_date(0x30 + ge);

  46. }
  47. void init(){
  48.      lcden = 0;
  49.          write_com(0x38);
  50.          write_com(0x0c);
  51.          write_com(0x06);
  52.          write_com(0x01);
  53.          write_com(0x80);
  54.          write = 0;
  55.          for(num = 0;num < 13;num++){
  56.              write_date(china[num]);
  57.                  delayms(5);
  58.          }
  59.          write_com(0x80 + 0x40);
  60.          for(num = 0;num < 6;num++){
  61.              write_date(time[num]);
  62.                  delayms(5);
  63.          }
  64.          write_com(0x80 + 0x40 + 8);
  65.          write_date(':');
  66.          write_com(0x80 + 0x40 + 11);
  67.          write_date(':');
  68.          write_sfm(6, 0);
  69.          write_sfm(9, 0);
  70.          write_sfm(12, 0);
  71.          TMOD = 0x01;
  72.          TH0 = (65536 - 45872)/256;
  73.          TL0 = (65536 - 45872)%256;
  74.      EA = 1;
  75.          ET0 = 1;
  76.          TR0 = 1;
  77. }

  78. void key_scan(){
  79.        if(key1 == 0) {
  80.              delayms(5);
  81.                  if(key1 == 0) {
  82.                     while(!key1);
  83.                         TR0 = ~TR0;
  84.                         led = ~led;
  85.                   }
  86.             }
  87.                        
  88.           if(key4 == 0) {
  89.              delayms(5);
  90.                  if(key4 == 0) {
  91.                     knum++;
  92.                     while(!key4);
  93.                         if(knum == 1){
  94.                        TR0 = ~TR0;
  95.                            write_com(0x80 + 0x40 + 12);
  96.                            write_com(0x0f);
  97.                          }
  98.                          if(knum == 2){
  99.                            write_com(0x80 + 0x40 + 9);
  100.                          }
  101.                          if(knum == 3){
  102.                            write_com(0x80 + 0x40 + 6);
  103.                          }
  104.                          if(knum == 4){
  105.                            knum = 0;
  106.                            write_com(0x0c);
  107.                            TR0 = 1;
  108.                          }
  109.                    }
  110.                 }
  111.                 if(knum != 0){
  112.                    if(key2 == 0){
  113.                       delayms(5);
  114.                           if(key2 == 0){
  115.                              while(!key2);
  116.                                  if(knum == 1){
  117.                                     miao++;
  118.                                         if(miao == 60)
  119.                                            miao = 0;
  120.                                         write_sfm(12, miao);
  121.                                         write_com(0x80 + 0x40 + 12);
  122.                                  }
  123.                                  if(knum == 2){
  124.                                     fen++;
  125.                                         if(fen == 60)
  126.                                            fen = 0;
  127.                                         write_sfm(9, fen);
  128.                                         write_com(0x80 + 0x40 + 9);
  129.                                  }
  130.                                  if(knum == 3){
  131.                                     shi++;
  132.                                         if(shi == 24)
  133.                                            shi = 0;
  134.                                         write_sfm(6, shi);
  135.                                         write_com(0x80 + 0x40 + 6);
  136.                                  }
  137.                           }
  138.                    }
  139.                    if(key3 == 0){
  140.                       delayms(5);
  141.                           if(key3 == 0){
  142.                              while(!key3);
  143.                                  if(knum == 1){
  144.                                     miao--;
  145.                                         if(miao == -1)
  146.                                            miao = 59;
  147.                                         write_sfm(12, miao);
  148.                                         write_com(0x80 + 0x40 + 12);
  149.                                  }
  150.                                  if(knum == 2){
  151.                                     fen--;
  152.                                         if(fen == -1)
  153.                                            fen = 59;
  154.                                         write_sfm(9, fen);
  155.                                         write_com(0x80 + 0x40 + 9);
  156.                                  }
  157.                                  if(knum == 3){
  158.                                     shi--;
  159.                                         if(shi == -1)
  160.                                            shi = 23;
  161.                                         write_sfm(6, shi);
  162.                                         write_com(0x80 + 0x40 + 6);
  163.                                  }
  164.                           }
  165.                    }
  166.                 }


  167. }

  168. void T0_time() interrupt 1{
  169.     TH1 = (65536 - 45872)/256;
  170.         TL1 = (65536 - 45872)%256;
  171.     num++;
  172.         if(num == 20){         
  173.            num = 0;
  174.            miao++;
  175.            if(miao== 60){
  176.               miao = 0;
  177.               fen++;
  178.                   if(fen == 60){
  179.                      fen = 0;
  180.                          shi++;
  181.                          if(shi == 24){
  182.                             shi = 0;
  183.                          }
  184.                          write_sfm(6, shi);
  185.                   }
  186.                   write_sfm(9, fen);
  187.            }
  188.           write_sfm(12, miao);
  189.          }
  190. }



  191. void main(){
  192.      init();
  193.          
  194.          while(1){
  195.              //write_sfm(10, 10);
  196.              key_scan();
  197.          }
  198. }


复制代码


单片机课程设计.rar

413.14 KB, 下载次数: 160, 下载积分: 黑币 -5

评分

参与人数 3黑币 +60 收起 理由
通信工程 + 5 赞一个!
鑫人 + 5 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:128153 发表于 2016-6-26 10:57 | 只看该作者
感谢楼主,程序可以使用
回复

使用道具 举报

板凳
ID:265075 发表于 2017-12-22 13:50 | 只看该作者
谢谢分享
回复

使用道具 举报

地板
ID:134542 发表于 2018-6-23 19:50 | 只看该作者
感谢楼主,感谢您分享的资料
回复

使用道具 举报

5#
ID:726372 发表于 2020-5-11 16:30 | 只看该作者
感谢楼主,感谢您分享的资料
回复

使用道具 举报

6#
ID:776788 发表于 2020-6-12 12:48 | 只看该作者
非常感谢!
回复

使用道具 举报

7#
ID:776379 发表于 2020-6-14 17:34 | 只看该作者
为什么解压不了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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