找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2539|回复: 3
收起左侧

如何实现51单片机定时器1分秒表倒计时?

[复制链接]
ID:881875 发表于 2021-1-31 16:10 | 显示全部楼层 |阅读模式
1黑币
普中科技的板子,74CH138

回复

使用道具 举报

ID:332444 发表于 2021-1-31 17:57 | 显示全部楼层
回复

使用道具 举报

ID:155507 发表于 2021-1-31 19:27 | 显示全部楼层
我给你来个程序试试

  1. /*
  2. 普中51 按键 正反 60秒计时

  3. */
  4. #include "reg52.h"  //此文件中定义了单片机的一些特殊功能寄存器
  5. #define uchar unsigned char   //对数据类型进行声明定义
  6. #define uint unsigned int
  7. sbit a=P2^2; //位选
  8. sbit b=P2^3;
  9. sbit c=P2^4;
  10. sbit k1=P3^1;
  11. sbit k2=P3^0;
  12. sbit k3=P3^2;

  13. uchar temp,aa,shi,ge,zan;
  14. uchar flag1=0,flag2=0,flag3=0;
  15. uchar num=60;
  16. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
  17.         0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //显示0~F的值
  18. void delay(uint t);
  19. void display(uchar shi,uchar ge);
  20. void init();
  21. void key_scan();

  22. void delay(uint t) //延时
  23. {
  24.         uint j,k;
  25.         for(j=t;j>0;j--)
  26.             for(k=110;k>0;k--);
  27. }
  28. void display(uchar shi,uchar ge) //数码管动态扫描函数,循环扫描8个数码管显示
  29. {
  30.         a=1,b=1,c=1; //位选
  31.         P0=table[shi]; //发送段码
  32.         delay(1); //间隔一段时间扫描       
  33.         P0=0x00;//消隐
  34.         a=0,b=1,c=1; //位选
  35.         P0=table[ge]; //发送段码
  36.         delay(1); //间隔一段时间扫描       
  37.         P0=0x00;//消隐
  38. }
  39. void init()
  40. {
  41.         num=60;
  42.         temp=0;
  43.         zanting=0;
  44.         TMOD=0x01;
  45.         TH0=(65536-50000)/256;
  46.         TL0=(65536-50000)%256;
  47.         EA=1;
  48.         ET0=1;
  49.         TR0=1;
  50. }
  51. void key_scan()//键盘扫描
  52. {

  53.         if(!k1)
  54.         {
  55.                 delay(10);
  56.                 if(!k1)
  57.                 flag1=1;
  58.         }
  59.         if(!k2)
  60.         {
  61.                 delay(10);
  62.                 if(!k2)
  63.                 flag2=1;
  64.         }
  65.         if(!k3)
  66.         {
  67.                 delay(10);
  68.                 if(!k3)
  69.                 flag3=1;
  70.         }
  71. }
  72. void main() //主函数
  73. {
  74.         init();//初始化子程序
  75.         while(1)
  76.         {
  77.                 key_scan();
  78.                 if(flag1)
  79.                 {
  80.                         if(aa==20)
  81.                         {
  82.                                 shi=temp/10;
  83.                                 ge=temp%10;
  84.                                 aa=0;
  85.                                 temp++;
  86.                                 if(temp==60)
  87.                                 {
  88.                                         temp=0;
  89.                                 }
  90.                         }
  91.                         key_scan();
  92.                         if(flag2||flag3){flag1=0;break;}
  93.                 }
  94.                 if(flag2)
  95.                 {
  96.                         if(aa==20)
  97.                         {
  98.                                 shi=num/10;
  99.                                 ge=num%10;

  100.                                 aa=0;
  101.                                 num--;
  102.                                 if(num==0)
  103.                                 {
  104.                                         num=60;
  105.                                 }
  106.                         }   
  107.                         key_scan();
  108.                         if(flag1||flag3){flag2=0;break;}   
  109.                 }
  110.                 display(shi,ge);  //数码管显示函数
  111.         }
  112. }

  113. void timer0() interrupt 1
  114. {
  115.         TH0=(65536-50000)/256;
  116.         TL0=(65536-50000)%256;
  117.         aa++;
  118.         zanting=1;
  119. }




复制代码
回复

使用道具 举报

ID:584814 发表于 2021-1-31 20:02 | 显示全部楼层
实现倒计时不需要74CH138
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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