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

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

发布网友 发布时间:2023-04-09 05:43

我来回答

2个回答

热心网友 时间:2024-10-22 15:40

;汇编程序如下。

;使用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-10-22 15:40

对不起,我不会用汇编做,所以用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
远得要命的爱情丁菲是谁演的 远的要命的爱情里的乔佳影是谁演的 远得要命的爱情乔佳影是什么角色 问。。我在厦门办的银行卡回江西可以用吗? 远得要命的爱情中的乔佳影是个怎样的人 厦门农信社的公告出来了,想问一下银行合同制和劳务派遣和正式工的区别... 厦门的信用社银联卡到南宁能不能用?要不要手续费? 泉州农信社年前新办的卡,存了钱,银行说三个工作日后才能动这个钱,为什 ... ...女鞋的话 是不是必须直通车 我们鞋子都是20---50鞋子利润低 直通车... 拼多多直通车200红包(拼多多直通车每天烧1000) 怎么聊天增进感情。 手机导航支架实体店哪里有卖 中国稀土后市如何会涨十倍吗 王者的个性天幕可以设置全部英雄吗 王者荣耀个性天幕怎么不显示 描写人们团结一致的词语 呼和浩特回民区在哪办护照 。我是呼仑贝尔市具民在呼和浩特哪里办护照 蒙古签证办理流程? 呼和浩特市办理护照的地方和时间 呼和浩特市如何办理护照 带洁字独一无二唯美名字 抖音取名字好听的昵称女带洁字 _峰的拼音狐_峰的拼音是什么 山_的拼音狐山_的拼音是什么 散户的造句散户的造句是什么 我有山姆卓越卡,帮朋友买东西,我该把积分返现给他吗 山姆买多少可以打折啊 山姆刷卡返利是什么意思 我想写神话言情,可否提供点素材,跪拜 当年网红徐洋徒弟仙儿是谁 仙儿很nice拍的段子叫什么 描写森林公园词语 防弹玻璃能被钻石割开吗? 爱财如命的人简介 杭州汽车西站下车后去吴山广场坐什么车? 从杭州西站怎样坐车到上城区吴山广场清河坊街?最方便的哦~ 杭州汽车西站到吴山广场的夜班车,有人知道吗,急求! 杭州长途汽车西站往吴山广场的胡庆余堂怎么走??急 杭州吴山广场交通路线,怎么去吴山广场 杭州长途汽车站到吴山广场乘什么车可以到? 从西湖文化广场怎么到吴山广场地汽车站 到杭州万承志堂国药馆门诊部怎么走?我在汽车西站下车,坐几路车?什么站... 老桑塔纳示廓灯怎么开 桑塔纳示宽灯前后只有一边亮怎么回事? 用沮丧、若无其事、兴高采烈、激动、强忍、三心二意、坚韧中选四... 苹果耳机a3000是什么版本 如何3秒内哭出来 望舒的拼音狐望舒的拼音是什么 合肥汽车站24小时咨询电话