机友帮忙看看这个程序 8位数码管显示时分秒 51的片子

2019-07-15 15:41发布

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint h=0,m=0,s=0,t0=0,i=0,t1=0;
uchar d[8];                                                                                                                                  //段显示
uchar code n[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};  //数码管码段
uchar code w[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};                                          //位扫描
/*************************端口初始化*************************/
void init()
{
        TMOD=0X11;                           //选择定时器1和0,工作方式1,内部控制定时器开关
        TH0=47104/256;                   //定时器0初值高8位   定时10ms
        TL0=47104%256;             //       初值低8位
        TH1=65036/256;                 //定时器1初值
        TL1=65036%256;                 //
        EA=1;                                   //打开总中断
        ET0=1;                              //允许定时器0中断
        ET1=1;
        TR1=1;
        TR0=1;                                     //打开定时器
}
/*************************处理显示数据*************************/
void led_display()
{
        d[0]=n[s%10];                  //显示秒
        d[1]=n[s/10];
        d[2]=n[10];                          //显示"-"
        d[3]=n[m%10];                  //显示分钟
        d[4]=n[m/10];
        d[5]=n[10];                          //显示"-"
        d[6]=n[h%10];                  //显示小时
        d[7]=n[h/10];
}
/*************************数码管扫描*************************/
void scan()
{
        if(t1>10)                                         //数码管扫描 1ms多一次
            {
                        t1=0;
                        for (i=0;i<8;i++)         
                        {
                                P2=w[i];
                                P0=d[i];
                        }
                }
}
/*************************定时器0中断*************************/

void time0() interrupt 1
{
        TH0=47104/256;                   //初值高8位   定时10ms
        TL0=47104%256;             //初值低8位
        t0++;               
}
/*************************定时器1中断*************************/
void time1() interrupt 3
{
        TH1=65036/256;                 
        TL1=65036%256;
        t1++;                        
}
/*************************时间处理*************************/
void time()
{
        if(t0==100)                         //时间进制处理
        {
                t0=0;
                s++;
                if(s==60)
                {
                        s=0;
                        if(m<60)
                        m++;
                        else
                        {
                                m=0;
                                if(h==24)
                                h=0;
                                else
                                h++;
                        }
                }
        }
}
/*************************主程序*************************/
void main()
{
        init();
        while(1)
        {
                time();
                led_display();
                scan();
        }
}
/********************************************************/

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
zhoukai16702969
1楼-- · 2019-07-15 17:41
 精彩回答 2  元偷偷看……
荖鬼
2楼-- · 2019-07-15 22:18
晶振22.1184的,定时整数的话最少应该是5ms吧?
zhoukai16702969
3楼-- · 2019-07-16 02:31
我不知道你现在是什么情况呢 也没说  光说看看
荖鬼
4楼-- · 2019-07-16 03:15
zhoukai16702969 发表于 2015-11-7 16:40
我不知道你现在是什么情况呢 也没说  光说看看

程序有问题 ,调试时 t0 t1 从数值上没问题 ,至于时间 准不准除了下载到片子上 不知道还有什么方法能看。i的值是有问题的  持续是8 偶尔会变化 ,到了片子上估计就是 第8位常亮  其他位微亮了吧
荖鬼
5楼-- · 2019-07-16 07:23
本帖最后由 荖鬼 于 2015-11-7 20:09 编辑
zhoukai16702969 发表于 2015-11-7 16:40
我不知道你现在是什么情况呢 也没说  光说看看

下载到单片机,结果确实是我说的那样 ,为什么呢
荖鬼
6楼-- · 2019-07-16 09:00
 精彩回答 2  元偷偷看……

一周热门 更多>