找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 227|回复: 4
收起左侧

关于单片机数码管倒计时无法进行的问题

[复制链接]
回帖奖励 1 黑币 回复本帖可获得 1 黑币奖励! 每人限 1 次
ID:1110437 发表于 2024-3-10 12:43 | 显示全部楼层 |阅读模式
//头文件声明区
#include <REGX52.H>
#include  "key.h"
#include  "seg.h"
//变量声明区
unsigned char key_slow_down;//按键减速变量
unsigned char key_val,key_down,key_old,key_up;//按键扫描变量
unsigned int seg_slow_down;//数码管减速变量
unsigned int time_1000ms;// 定时器时间计数
unsigned char seg_mode;//数码管显示模式
unsigned char seg_pose;//数码管显示变量
unsigned char seg_buff[6]={10,10,10,10,10,10};//数码管显示变量组
unsigned char count=30;//倒计时


//按键处理函数
void key_pro()
{
        if(key_slow_down)return;
        key_slow_down=1;
        key_val=key_read();
        key_down=key_val&(key_val^key_old);
        key_up=key_val&(key_val^key_old);
        key_old=key_val;
        
        
        switch(key_down)
        {
               
        
               
        }
        
        
}
//数码管函数
void seg_pro()
{
if(seg_slow_down)return;
        seg_slow_down=1;
        
        seg_buff[0]=seg_mode+1;
        if(seg_mode==0)
        {
                seg_buff[4]=count /10%10;//数码管第五个灯显示倒计时十位数
                seg_buff[5]=count %10;//数码管第6个灯显示倒计时个位数
               
               
        }
}

//led函数
void led_proc()
{
        
        
        
}
//定时器0初始化函数
void Timer0_Init(void)                //1毫秒@12.000MHz
{

        TMOD &= 0xF0;                        //设置定时器模式
        TMOD |= 0x01;                        //设置定时器模式
        TL0 = 0x20;                                //设置定时初始值
        TH0 = 0xD1;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
        ET0=1;
        EA=1;
}


//定时器服务函数
void time0server() interrupt 1
{
        
                TL0 = 0x20;                                
          TH0 = 0xD1;                        
if(++key_slow_down==10)key_slow_down=0;
if(++seg_slow_down==500)seg_slow_down=0;
if(++seg_pose==6)seg_pose=0;
        seg_disp(seg_pose,seg_buff[seg_pose]);
if(++time_1000ms==1000)
{
        time_1000ms=0;
        count--;//每秒倒计时减少一秒
        
}
        
}
//主
void main()
{
        Timer0_Init();
        while(1)
        {
               
               
           seg_pro();
     led_proc();
                key_pro();
               
               
               
               
               
        }
               
               
        }
有大哥知道,为啥数码管倒计时显示只停留在30吗,不进行倒计时
        

8c79860ea17956f1b051e711b466b220.png
回复

使用道具 举报

ID:1110437 发表于 2024-3-10 13:21 | 显示全部楼层
发现可以倒计时,就是速度极慢,不是设定的1s一次
回复

使用道具 举报

ID:195496 发表于 2024-3-11 08:56 | 显示全部楼层
定时时间有问题
回复

使用道具 举报

ID:161164 发表于 2024-3-11 15:20 | 显示全部楼层
用错了1T单片机的算式
2024-03-11_151834.png

2024-03-11_151909.png

回复

使用道具 举报

ID:195496 发表于 2024-3-12 08:42 | 显示全部楼层
你的定时器初值不正确

定时器初值

定时器初值
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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