找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2896|回复: 8
收起左侧

单片机 数码管计时的显示问题

[复制链接]
ID:80895 发表于 2015-5-23 16:28 | 显示全部楼层 |阅读模式
我刚学定时器,想让数码管 自动计时,但是。。数码管的个位能正常显示,但十位不显示,求助!!!!!!!!

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
code char tab[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint i ,j ,count;
sbit tr1 = P0^5;                //个位
sbit tr2 = P0^4;                //十位

void delay()          //延时
{
        int a,b;
        for(a=0;a<20;a++)
                for(b=0;b<30;b++);;
}

void init()                //定时初始化
{
        TMOD=0x01;
        TH0= (65536 - 50000) / 255;
        TL0= (65536 - 50000) % 255;
        EA=1;
        ET0=1;
        TR0=1;
}

void func()               //执行
{
                tr1 = 0;
                tr2 = 1;
                P1 = tab[i];
                delay();
                 tr1 = 1;
                tr2 = 0;
                P1 = tab[j];
                 delay();
}
timer0()interrupt 1 using 1                   //定时器中断
{
        TH0= (65536 - 50000) / 255;
            TL0= (65536 - 50000) % 255;
        if(count == 20)
        {
           count = 0;
                i++;
           if(i==10)       
                {
                        i = 0; j++;
                        if(j == 6) j = 0;
                       
                }

}
        else
                count++;

}
main()
{
    P1 = 0x00;
        init();  //计时初始化
        while(1)
        {
                func();
        }
         
}
回复

使用道具 举报

ID:79908 发表于 2015-5-24 08:45 | 显示全部楼层
你的延时函数延时时间是多少?TH0和TL0的计算用的是256,不是255 (2^8=256)

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:79908 发表于 2015-5-24 08:50 | 显示全部楼层
  1. void timer0()interrupt 1
  2. {
  3.    TH0= (65536-50000)/256;
  4.    TL0 = (65536-50000)%256;
  5.    count++;
  6.    if(count ==20)
  7.    {
  8.         count = 0;
  9.         num ++;
  10.         shi = num/10;
  11.         ge = num%10;
  12.         if(num==60)
  13.              num = 0;
  14.    }
  15. }

  16. 你直接把个位和十位数送去显示就可以了
复制代码

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:79908 发表于 2015-5-24 08:53 | 显示全部楼层
你的延时函数时间不要太长,也不能太短,用proteus仿真的延时比硬件仿真时间长点就行,一般硬件仿真就几个ms

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:79908 发表于 2015-5-24 08:56 | 显示全部楼层
TH0 和TL0的计算用256(2^8 = 256),而不是8位二进制数的最大值255

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:136426 发表于 2016-8-10 16:04 | 显示全部楼层
你这程序问题太大
回复

使用道具 举报

ID:136426 发表于 2016-8-10 16:06 | 显示全部楼层
你这程序问题太大 你定时中断到底想要表达什么 呢 count都没赋值 怎么可能加到20
回复

使用道具 举报

ID:136426 发表于 2016-8-10 16:08 | 显示全部楼层
好好看看数码管显示函数
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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