找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机倒计时程序 求指导

[复制链接]
跳转到指定楼层
楼主
1. 倒计时秒表
    系统接1个按键用于启动,1个蜂鸣器用于提示计时时间到,两个数码管用于显示时间。
    功能:系统上电数码管显示60;当按键按下时,系统开始倒计时,同时数码管显示当前时间;当计时为0时,蜂鸣器响。
如果用中断函数具体该怎么弄呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:789121 发表于 2023-6-13 16:30 | 只看该作者
画电路图了么?主要使用定时器中断计时和外中断相应按键
回复

使用道具 举报

板凳
ID:161164 发表于 2023-6-13 22:21 | 只看该作者
本帖最后由 lkc8210 于 2023-6-14 09:46 编辑
  1. #include "reg51.h"

  2. typedef unsigned char u8;
  3. typedef unsigned int u16;

  4. //-----------------------------------------------

  5. /* define constants */
  6. #define FOSC 11059200L

  7. #define T1MS (65536-FOSC/12/1000)   //1ms timer calculation method in 12T mode

  8. /* define SFR */
  9. sbit TEST_LED = P1^0;               //work LED, flash once per second

  10. /* define variables */
  11. u16 count;                         //1000 times counter

  12. //-----------------------------------------------

  13. /* Timer0 interrupt routine */
  14. void tm0_isr() interrupt 1
  15. {
  16.     TL0 = T1MS;                     //reload timer0 low u8
  17.     TH0 = T1MS >> 8;                //reload timer0 high u8
  18.     if (count-- == 0)               //1ms * 1000 -> 1s
  19.     {
  20.         count = 1000;               //reset counter
  21.         TEST_LED = ! TEST_LED;      //work LED flash
  22.     }
  23. }

  24. //-----------------------------------------------

  25. /* main program */
  26. void main()
  27. {
  28.     TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
  29.     TL0 = T1MS;                     //initial timer0 low u8
  30.     TH0 = T1MS >> 8;                //initial timer0 high u8
  31.     TR0 = 1;                        //timer0 start running
  32.     ET0 = 1;                        //enable timer0 interrupt
  33.     EA = 1;                         //open global interrupt switch
  34.     count = 0;                      //initial counter

  35.     while (1);                      //loop
  36. }

复制代码

回复

使用道具 举报

地板
ID:116103 发表于 2023-6-14 05:43 | 只看该作者
按键后,TR0=1,启动定时器,在中断中每一秒送减初值,到0时,在中断中TR0=0, 蜂鸣=1.
回复

使用道具 举报

5#
ID:332444 发表于 2023-6-14 14:31 | 只看该作者
首先写好数码管驱动,设置定时器时间,其他都好办,无论是正计时还是倒计时都一样一个算法而已

1.jpg (3.84 KB, 下载次数: 23)

1.jpg
回复

使用道具 举报

6#
ID:332444 发表于 2023-6-14 22:59 | 只看该作者
学习单片机首先就要学好写显示驱动:数码管/LCD/点阵的驱动,这是人机交互的窗口,显示写好后其它都借助显示都容易了。
回复

使用道具 举报

7#
ID:332444 发表于 2023-6-15 09:06 | 只看该作者
像这种没有电路图的提问只能讲个大概而已,须知道硬件和软件结合的单片机必须是硬件和代码严格对应的,否则都是空谈。
回复

使用道具 举报

8#
ID:77589 发表于 2023-6-16 15:55 | 只看该作者
这个应该不难,看看资料就会了!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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