问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求用单片机设计一个秒表AT89C5156

发布网友 发布时间:2023-11-08 20:34

我来回答

2个回答

热心网友 时间:2024-11-03 19:33

;汇编程序如下。

;使用T0定时方式1,每隔50ms中断一次,用于修改时间及显示

;使用外部中断0、1,用于控制启动和清零

;========================================================

        ORG  0000H

        AJMP MAIN

        ORG  0003H

        AJMP X0_INT

        ORG  000BH

        AJMP T0_INT

        ORG  0013H

        AJMP X1_INT

MAIN:

        MOV  TMOD,#01H            ;T0定时方式1

        MOV  TH0, #(65536-50000) / 256    ;50ms@12MHz

        MOV  TL0, #(65536-50000) MOD 256;

        SETB TR0

        SETB ET0                 ;开启定时中断

        SETB EX0

        SETB EX1

        SETB EA                  ;定时器初始化结束,下面循环显示即可

        MOV  R1, #99H            ;0~99计数.

        MOV  R7, #1              ;50ms计数.

        MOV  P0, #0C0H

        MOV  P2, #0C0H

LOOP:

        SJMP LOOP

;-----------------------------------------------------------

DELAY:                           ;延时子程序.

AA4:    MOV  R4,  #0

        DJNZ R4,  $

        DJNZ R4,  $

        RET

;-----------------------------------------------------------

X0_INT:                          ;启动/停止

        CPL  F0

        RETI

;-----------------------------------------------------------

X1_INT:                          ;清零

        MOV  R1, #0

        MOV  P0, #0C0H

        MOV  P2, #0C0H

        RETI

;-----------------------------------------------------------

T0_INT:                          ;50ms中断执行一次.

        MOV TL0, #(65536-50000) MOD 256;

        MOV TH0, #(65536-50000) / 256    ;50ms@12MHz

        DJNZ R7, T0_END          ;中断不到20次.

        MOV  R7, #20

        JNB  F0, T0_END

        MOV  A,  R1

        ADD  A,  #1

        DA   A

        MOV  R1, A

        ANL  A,  #0FH

        MOV  DPTR, #TAB

        MOVC A, @A+DPTR          ;查出段码

        MOV  P2, A

        MOV  A,  R1

        SWAP A

        ANL  A,  #0FH

        MOVC A, @A+DPTR          ;查出段码

        MOV  P0, A               ;显示十位数.

T0_END:

        RETI

;-----------------------------------------------------------

TAB:

        DB   0c0H,0f9H,0a4H,0b0H,99H,92H,82H,0f8H,80H, 90H

        END

;===========================================================

;仿真截图如下:

热心网友 时间:2024-11-03 19:33

对不起,我不会用汇编做,所以用c语言编了一个,希望对你有帮助

#include <reg51.h>

#define uchar unsigned char

sbit start=P3^6;

sbit stop=P3^5;

uchar code latab[]={0x3f,0x06,0x5b,0x4f,0x66,

       0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //数字编码0-9

uchar code welatab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位控制字

uchar msec,sec,min; 

void delay(uchar time)  //延时

{

 uchar i,j;

 for(i=0;i<time;i++)

 {

  for(j=0;j<110;j++)

  ;

 }

}

void writeled(uchar num,uchar addr)

{  

 //关显示

 P2=0xff;

 //送数据

 P0=latab[num];

 //开显示

 P2=welatab[addr];   

 delay(4);  

}

void display(uchar msec,uchar sec,uchar min)

{

 uchar msech,msecl,sech,secl,minh,minl;

 msech=msec/10;

 msecl=msec%10;

 sech=sec/10;

 secl=sec%10;

 minh=min/10;

 minl=min%10;

 writeled(minh,0);

 writeled(minl,1);

 writeled(10,2);

 writeled(sech,3);

 writeled(secl,4);

 writeled(10,5);

 writeled(msech,6);

 writeled(msecl,7);

}

void init()

{

 TMOD=0x10;

 TH1=0xd8;

 TL1=0xf0;

// TR1=1;

 EA=1;

 ET1=1;

}

void keyscan()

{

 if(start==0)

 {

  delay(2);

  if(start==0)

  {

   TR1=~TR1;

   while(start==0)

   {

    display(msec,sec,min); 

   }

  }

 }

 if(stop==0&&TR1==0)

 {

  delay(2);

  if(stop==0)

  {

   msec=0;

   sec=0;

   min=0;

   while(stop==0)

   {

    display(msec,sec,min); 

   }

  }

 }

}

void main()

{

 init();

 while(1)

 {

  display(msec,sec,min);

  keyscan(); 

 }  

}

void timer1() interrupt 3

{

 TH1=0xd8;

 TL1=0xf0;

 msec++;

 if(msec==100)

 {

  msec=0;

  sec++;

  if(sec==60)

  {

   sec=0;

   min++;

   if(min==60)

   {

    min=0;

   } 

  }

 }

 

}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
宜宾陪产假有多少天 ...19宽屏显示器。调色彩时有个选项magicColor是什么意思? eternuer是什么意思 《法语助手》法汉 癌症老人能吃山竹吗 癌症病人能吃抗氧化剂吗 乳腺癌骨转移病人吃什么水果好 肝癌老人吃山竹有害处吗 癌症病人能不能吃山竹 如何在excel中批量加入数据 在Excel中怎样批量加上一? 设备台帐的管理a.b.c怎么区分 西红柿炒鸡蛋作文怎么写200字340 设备管理的具体内容3 被封,里面的钱怎么取出115 什么是性生活?58 手机号重新注册了一个,原来的咋找回来?? 我被盗了,怎么找不回来密码了,有什么方法可以找回密码19 被封,怎么把钱拿出来?278 ...调节反光镜时,光线强时用平面镜,光线弱时用凹面镜.___.(判断对错... 管理学入门的书籍有哪些值得推荐?盘点一下权威的管理学大师有哪些? 《泊船瓜洲》这首诗最能体现诗人思想感情的句子是什么 性生活的好处35 项羽和虞姬与刘邦和吕雉假如生活在现代,他们哪个混得好 一个手机可以注册两个吗? 广州巨冠电子有限公司怎么样? 原有被重新注册怎么找回原有微信? 求大量攻受图4 换oppofinex外屏大概多少钱?1 五菱宏光封闭货车拉蔬菜走高速收费吗 脸怎么变红了?用英语怎么说 同一个手机号,申请了两个,后一个把前一个覆盖了,怎么找回前? 牙神经痛怎么办 蛀牙 我一个手机号注册了两个,另外一个登不上了,怎么办? 请问“她的脸很红火”用英语怎么说? 听了这些话,他的脸变红了。用英语怎么说。 微信被骗知道对方电话和怎么整他 超市会计应该怎么做账呢200 川岛芳子最后死了没有?1 超市里的会计怎么做帐150 如何将微信好友转移到另一个上? 暗黑4亡者低语任务怎么做 上海哪家大型超市(如沃尔玛 家乐福 乐购等等)人气量比较多?最好能把... What is global warming ?What should we do to keep it slow... 假如项羽得天下后,中国会怎么样? 一个手机号能注册两个吗? 如果项羽和虞姬是一对平凡夫妻,会终老一生么16 性生活的20大好处1208 性生活怎么做24 吃红薯可否喝白酒? word中要使用“字体”对话框进行字符编排,可选择“工具”菜单中的...