找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3126|回复: 13
收起左侧

哪位大佬帮做一下倒计时器的程序

[复制链接]
ID:202435 发表于 2017-5-19 10:16 | 显示全部楼层 |阅读模式
最近要求做一个51单片机的倒计时器程序,可是做了好久也做不出来,看了很多都不太符合要求,就请大家帮个忙。
要求用C语言做。
倒计时计时器
1、LCD1602显示倒计时时间
2、时间到蜂鸣提醒
3、独立按键设定时长(分钟为单位)

回复

使用道具 举报

ID:202435 发表于 2017-5-19 10:45 | 显示全部楼层
像这个好像是数码管显示的,怎么改成LCD1602显示啊,有人帮改一下代码吗?
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int

sbit Key_up=P3^4;        //分钟调节按键+
sbit Key_down=P3^5;        //分钟调节按键-
sbit Key_enter=P3^6;//开始、暂停按键
sbit Key_esc=P3^7;        //清除按键
sbit beep=P2^3;                //蜂鸣器
sbit wela=P2^7;                //位锁存器
sbit dula=P2^6;                //段锁存器

uint cnt,min,sec; //中断计数、分、秒
bit flag;                //开始位
uchar dsp[6];  //数码管内容
uchar dsp_du[17]={0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d ,
                                  0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c ,
                                  0x39 , 0x5e , 0x79 , 0x71 , 0x00};//段编码
uchar dsp_we[6]={0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf};//位编号

//延时
void delay(uint z)
{
        uint t1,y;
        for(t1=z;t1>0;t1--)
                for(y=110;y>0;y--);
}

//键盘控制
void key()
{
        if(!Key_up) //向上
        {
                delay(200);
                if(!Key_up)        min++;
                min=min%100;
        }

        if(!Key_down) //向下
        {
                delay(200);
                if(!Key_down) min--;
                min=min%100;
        }

        if(!Key_enter) //开始位
        {
                delay(50);
                if(!Key_enter) flag=~flag;
                while(!Key_enter);
        }

        if(!Key_esc) //停止位
        {
                flag=0;
                min=0;
                sec=0;
        }

}

void run()
{
        if(cnt>199)        //秒计数
        {
                cnt=0;
                if(sec==0)  //分钟计数
                {
                        sec=60;
                        if(min==0)        //分钟复位
                        {
                                min=100;
                                flag=0; //停止运行
                                beep=0;//响声提示
                                delay(2000);
                                beep=1;
                        }
                        min--;
                 }
                sec--;
        }
}

//定时器初始化
void init()
{
        TMOD=0x11;
        TR0=1;        //启动定时器0
        ET0=1;        //打开定时器0中断
        TR1=1;        //启动定时器1
        ET1=1;        //打开定时器1中断
        TH1=0xfd; //写入定时器1初始值
        TL1=0x77;                 
        TH0=0xee;
        TL0=0;                 
        EA=1;        //打开总中断
        min=20;  //预置时间
}

//主函数
void main()
{
        init();
        while(1)
        {
                if(flag)
                        {run();}
                key();
                //数字拆分成个位和十位
                dsp[0]=min/10;
                dsp[1]=min%10;
                dsp[2]=sec/10;
                dsp[3]=sec%10;

        }
}

//定时器0,用于计时
timer0() interrupt 1  // 定时器0中断是1号
{
        TH0=0xee;        //5ms
        TL0=0;
        cnt++;                 
}

//定时器1,用于LED动态扫描
timer1() interrupt 3  // 定时器1中断是3号
{
        uchar wei; //数码管显示位计数

        TH1=0xf0; //定时器初始值
        TL1=0x00;
        wela=1;
        P0=dsp_we[wei];
        wela=0;

        dula=1;
        P0=dsp_du[dsp[wei]];
        if(wei==1) P0=P0|0x80;        //第二位加点
        dula=0;

        wei++;
        wei=wei%4;
}
回复

使用道具 举报

ID:202435 发表于 2017-5-19 13:54 | 显示全部楼层
有哪位会的大神帮忙吗?
回复

使用道具 举报

ID:202435 发表于 2017-6-3 15:16 | 显示全部楼层
看起来没人了
回复

使用道具 举报

ID:208017 发表于 2017-6-5 15:56 | 显示全部楼层
这些都是最基本的网上找找例程就好了
回复

使用道具 举报

ID:47286 发表于 2017-6-5 16:50 | 显示全部楼层
本帖最后由 dzbj 于 2017-6-5 20:42 编辑

你做个定时器 比如每1s产生一次中断 然后用一个变量做计数 在冲断外的程序里 用一个变量纪录倒计时的最大数 不断用倒计时最大数-变量就是剩余时间 就相当于每s减一下
回复

使用道具 举报

ID:208172 发表于 2017-6-5 21:00 | 显示全部楼层
有没有这个的仿真图分享一下  刚好也是做这个
回复

使用道具 举报

ID:111634 发表于 2017-6-5 21:20 | 显示全部楼层
本帖最后由 zl2168 于 2017-6-5 21:21 编辑

介绍你一个案例,显示方式有些不同,供你参考。
实例96  能预置初值的倒计时秒表
Proteus仿真一下,确认有效。
实例96 能设置初值的倒计时秒表.rar (40 KB, 下载次数: 12)
回复

使用道具 举报

ID:202435 发表于 2017-6-6 18:12 | 显示全部楼层
a11123 发表于 2017-6-5 21:00
有没有这个的仿真图分享一下  刚好也是做这个

你有这个的代码吗?可以分享一下吗?
回复

使用道具 举报

ID:202435 发表于 2017-6-6 18:15 | 显示全部楼层
zl2168 发表于 2017-6-5 21:20
介绍你一个案例,显示方式有些不同,供你参考。
实例96  能预置初值的倒计时秒表
先Proteus仿真一下,确 ...

谢谢了
回复

使用道具 举报

ID:105206 发表于 2017-6-7 20:23 | 显示全部楼层
我这里刚给别人做的,经过了仿真,做了实物。现成的
回复

使用道具 举报

ID:105206 发表于 2017-6-7 20:24 | 显示全部楼层
加QQ:2279196123
回复

使用道具 举报

ID:151834 发表于 2017-6-8 20:14 | 显示全部楼层
采用了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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