数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 3015|回复: 13

[C51] 小白自学C51单片机编程,4位数码管时钟分钟,增加按键

[复制链接]
发表于 2023-12-22 09:57:40 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
谢谢大家的指导,在昨天的基础上增加了按键,但实践中发现按一下KEY4 本意是要时钟加1,实际加了好几个1

以下为代码
  1. /*程序说明:4位数码管显示小时分钟,4个LED灯亮一秒停一秒,按KEY1加5分,按KEY4加1小时*/

  2. #include <reg52.h>
  3. typedef unsigned char uchar;    //类型定义
  4. typedef unsigned int uint;

  5. sbit led_a=P1^0;    //数码管个位
  6. sbit led_b=P1^1;    //十位
  7. sbit led_c=P1^2;    //百位
  8. sbit led_d=P1^3;    //千位        
  9. sbit led5=P1^4;        //4个LED灯
  10. sbit led6=P1^5;
  11. sbit led7=P1^6;
  12. sbit led8=P1^7;
  13. sbit key4=P3^7;        //用于调时

  14. uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};

  15. uint time=0;  // 秒钟
  16. uint fen=0;      // 分钟
  17. uint shi=0;   // 时钟
  18. uint xms;       //延时ms
  19. uchar dingshi=0; //定时次数

  20. void display(time);          //声明显示子函数
  21. void delay(xms);          //声明延时子函数
  22. void key_scan();          //声明按键子函数

  23. void main ()
  24. {
  25.      EA=1;        //开总中断
  26.     ET0=1;        //开定时器0        
  27.     TR0=1;        //定时器0开始
  28.     TMOD=0X01;    // 定时器模式1
  29.     TH0=(65536-50000)/256;      //50ms初值高8位
  30.     TL0=(65536-50000)%256;      //50ms初值低8位
  31.     EX1=1;        //开外部中断1
  32.     IT1=0;        //低电平有效
  33.     while(1)
  34.     {
  35.         key_scan();    //检测是否有按键
  36.         display(time);     //显示
  37.     }
  38. }

  39. void display(time)
  40. {
  41.       P0=table[fen%10];      //送出段选信号
  42.      led_a=0;                 //打开个位位选
  43.      delay(5);
  44.      led_a=1;

  45.      P0=table[fen/10%10];      //送出段选信号
  46.      led_b=0;                   //打开十位位选
  47.      delay(5);
  48.      led_b=1;

  49.       P0=table[shi%10];      
  50.      led_c=0;
  51.      delay(5);
  52.      led_c=1;

  53.      P0=table[shi/10%10];     
  54.      led_d=0;
  55.      delay(5);
  56.      led_d=1;
  57.      
  58.      P0=table[10];        //显示中间的点
  59.      led_c=0;
  60.      delay(5);
  61.      led_c=1;
  62. }
  63. void delay(xms)        //延时函数
  64. {
  65.      uchar i;
  66.     while(xms--)
  67.     {
  68.          for(i=0;i<113;i++);
  69.     }
  70. }

  71. void key_scan()
  72. {
  73.      if(key4==0)
  74.     {
  75.          delay(5);
  76.         if(key4==0)
  77.         {
  78.              shi+=1;      //实际情况是按一下key4时钟加了好几个1
  79.             if(shi>=24)
  80.             {
  81.              shi=shi-24;
  82.             }
  83.         }
  84.     }
  85. }

  86. void jishu ()interrupt 1    //定时器中断函数
  87. {   
  88.     TH0=(65536-45872)/256;
  89.     TL0=(65536-45872)%256;
  90.    
  91.      if(dingshi==20)      //如果定时满了20次
  92.     {
  93.          dingshi=0;     //次数清零,循环
  94.         time++;        //秒加一次
  95.         if(time==60)
  96.         {
  97.              time=0;
  98.             fen++;      //到了60秒,分加一次
  99.             if(fen==60)
  100.             {
  101.                  fen=0;
  102.                 shi++;     ////到了60分,时加一次
  103.                 if(shi==24)
  104.                 {
  105.                      shi=0;
  106.                 }

  107.             }
  108.         }      
  109.         led5=~led5;      //亮一秒灭一秒
  110.         led6=~led6;
  111.         led7=~led7;
  112.         led8=~led8;
  113.     }            
  114.     dingshi++;         //如果定时没满20次,就加一次
  115. }

  116. void key_int()interrupt 2  //外部中断1
  117. {
  118.     delay(300);     //如果不延时,按一下按钮可能加了好几个5
  119.     fen+=5;    //加5分,可以理解为fen=fen+5
  120.     if(fen>=60)      
  121.     {
  122.     fen=fen-60;
  123.     }
  124. }
复制代码




打赏

参与人数 1家元 +50 收起 理由
家睦 + 50

查看全部打赏

 楼主| 发表于 2023-12-22 09:58:59 | 显示全部楼层
游客请登录后查看回复内容

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

发表于 2023-12-22 10:45:05 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-12-22 10:51:19 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-22 10:56:25 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-12-22 10:58:49 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-12-22 11:13:18 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-12-22 11:21:59 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-12-22 11:22:44 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-12-22 12:40:31 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-12-22 15:03:56 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-12-23 12:22:36 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-12-23 19:01:24 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-12-12 07:23 , Processed in 0.265201 second(s), 12 queries , Gzip On, Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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