找回密码
 立即注册

QQ登录

只需一步,快速开始

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

如何编写59秒计时秒表控制单片机程序,求指导思路

[复制链接]
跳转到指定楼层
楼主
编写59秒计时秒表控制程序。程序功能:采用定时中断控制两位数码管进行秒表的计时显示。

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

使用道具 举报

沙发
ID:332444 发表于 2020-6-16 19:57 | 只看该作者
这个很简单,分秒各送各数码管,中断计时,到我的博客随便抄写相关的函数,组合即可。https://blog.csdn.net/xianfajushi/article/details/89448933
回复

使用道具 举报

板凳
ID:332444 发表于 2020-6-17 10:52 | 只看该作者

回复

使用道具 举报

地板
ID:759796 发表于 2020-6-17 14:15 | 只看该作者

你好,能不能直接放仿真和程序打包?我好下载
回复

使用道具 举报

5#
ID:759796 发表于 2020-6-17 14:17 | 只看该作者

我不知道怎么画,那个绿色的是总线?现在还不会用
回复

使用道具 举报

6#
ID:759796 发表于 2020-6-17 14:21 | 只看该作者

还有你这按钮也太多了把 --=
回复

使用道具 举报

7#
ID:332444 发表于 2020-6-17 17:06 | 只看该作者
分期卖猪肉 发表于 2020-6-17 14:21
还有你这按钮也太多了把 --=

这里有下载的文件,自己去修改:http://www.51hei.com/bbs/forum.p ... mp;page=1#pid873611
回复

使用道具 举报

8#
ID:332444 发表于 2020-6-17 17:09 | 只看该作者
仿真图修改删除不需要的部分,当然不是全部删除和修改,这16个按键比起矩阵16个按键写驱动要容易得多得多,以后写示例就用这16按键,不再写矩阵16按键。
回复

使用道具 举报

9#
ID:332444 发表于 2020-6-17 17:16 | 只看该作者
哦,发错下载东西了,呵呵,我之前有提供蛋骗鸡的下载,这个论坛找以前帖子太难了真麻烦,不够直接。 2IO口2个1位数码管秒表.rar (29.24 KB, 下载次数: 7)

回复

使用道具 举报

10#
ID:332444 发表于 2020-6-17 17:19 | 只看该作者
回复

使用道具 举报

11#
ID:759796 发表于 2020-6-17 21:32 | 只看该作者
xianfajushi 发表于 2020-6-17 17:16
哦,发错下载东西了,呵呵,我之前有提供蛋骗鸡的下载,这个论坛找以前帖子太难了真麻烦,不够直接。

无论怎么样都谢谢你了 --虽然我不能吸收哈哈哈,十分感谢你
回复

使用道具 举报

12#
ID:759796 发表于 2020-6-18 16:40 | 只看该作者
xianfajushi 发表于 2020-6-16 19:57
这个很简单,分秒各送各数码管,中断计时,到我的博客随便抄写相关的函数,组合即可。https://blog.csdn.ne ...

你好,能帮忙做一下我帖子吗?还有十分感谢你的帮忙,怎么分析程序和仿真的,我分享300个程序和仿真给你,都是成功的需要吗
回复

使用道具 举报

13#
ID:430308 发表于 2020-6-18 19:56 | 只看该作者
可以参考普中科技的资料
回复

使用道具 举报

14#
ID:332444 发表于 2020-6-19 09:28 | 只看该作者
分期卖猪肉 发表于 2020-6-18 16:40
你好,能帮忙做一下我帖子吗?还有十分感谢你的帮忙,怎么分析程序和仿真的,我分享300个程序和仿真给你 ...

程序和仿真图就是按你发出来的做的,如果感觉我的仿真图按键太多,把多余删除就是,或直接把所有按键删除即可。
回复

使用道具 举报

15#
ID:213173 发表于 2020-6-19 10:10 | 只看该作者
楼主这个秒表程序很简单,1个按键控制开始/停止/清0。

  1. #include <reg51.H>
  2. #define uint unsigned int                 //宏定义无符号整型数据
  3. #define uchar unsigned char        //宏定义无符号字符型数据

  4. sbit key=P3^7;       

  5. uchar code table[]={//共阴数码管段码"0~f-."
  6.                 0x3f,0x06,0x5b,0x4f,
  7.                 0x66,0x6d,0x7d,0x07,
  8.                 0x7f,0x6f,0x77,0x7c,
  9.                 0x39,0x5e,0x79,0x71,0x40,0x80};
  10. uchar Cnt10ms=0,Cnt1s=0;                //中断计时变量

  11. bit  pause=0;                                        //暂停标志

  12. /***********按键扫描程序****************/
  13. void keyscan()       
  14. {
  15.         static uchar value=0,count=0;//键值/计数变量                       
  16.         if(!key)                                //检测输入如果为0
  17.         {
  18.                 count++;                        //消抖       
  19.                 if(count==2)        //10~20ms       
  20.                 {
  21.                         value++;
  22.                         if(value>=3)
  23.                                 value=0;
  24.                         switch(value)
  25.                         {
  26.                                 case 0: Cnt10ms=0;Cnt1s=0;break;//清0
  27.                                 case 1: pause=1;          break;//计时
  28.                                 case 2: pause=0;                break;//暂停
  29.                         }               
  30.                 }
  31.                 if(count>2)       
  32.                         count=2;                //防止溢出
  33.         }
  34.         else count=0;                //松手清0
  35. }
  36. /***********定时器初始化程序****************/
  37. void Timer0Init(void)                //10毫秒@12.000MHz
  38. {
  39.         TMOD= 0x01;                //设置定时器模式
  40.         TL0 = 0xF0;                //设置定时初值
  41.         TH0 = 0xD8;                //设置定时初值
  42.         TR0 = 1;                //定时器0开始计时
  43.         EA=1;                        //开总中断
  44.         ET0=1;                        //开定时器0中断
  45. }
  46. /***********显示程序****************/
  47. void display()
  48. {
  49.         if(Cnt1s<60)
  50.         {
  51.                 P2=table[Cnt1s/10];//显示十位
  52.                 P3=table[Cnt1s%10]|0x80;//显示个位不影响P3.7按键

  53.         }
  54.         else
  55.         {
  56.                 P2=0x79;//显示'E'
  57.                 P3=0x40|0x80;//'-'显示个位不影响P3.7按键
  58.         }
  59. }
  60. /***************主程序****************/
  61. void main()
  62. {
  63.         Timer0Init();        //定时器初始化
  64.         while(1)
  65.         {
  66.                 display();        //显示程序
  67.         }
  68. }
  69. /**************中断服务程序*****************/
  70. void timer0() interrupt        1 //10毫秒@12.000MHz
  71. {
  72.         TL0 = 0xF0;                  //设置定时初值
  73.         TH0 = 0xD8;                  //设置定时初值
  74.         if(pause==1)                 //暂停/启动
  75.         {
  76.                 Cnt10ms++;                 //中断变量Cntus自+1
  77.                 if(Cnt10ms>=100) //1s
  78.                 {
  79.                         Cnt10ms=0;        //清0
  80.                         if(Cnt1s<60)
  81.                                 Cnt1s++;//秒计数
  82.                 }
  83.         }
  84.         keyscan();        //按键扫描
  85. }
复制代码




回复

使用道具 举报

16#
ID:783844 发表于 2020-6-19 13:23 | 只看该作者
根据晶振计算一下时间和周期
回复

使用道具 举报

17#
ID:761989 发表于 2020-6-19 21:13 | 只看该作者
我们课本的源程序,你可以看看
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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