标题: 单片机新手,本想走一个60秒时钟,烧进去之后只闪个零,求大神解答,在线等谢谢 [打印本页]

作者: 小唐    时间: 2015-3-20 21:08
标题: 单片机新手,本想走一个60秒时钟,烧进去之后只闪个零,求大神解答,在线等谢谢
#include <reg52.h>
#define Uchar unsigned char
#define Uint unsigned int
Uchar code duan_tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};                        //共阳管编码0-7        取反就相当于共阴管
Uchar code wei_tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};                         //位选吗低电平点亮共阳管
Uchar miao,fen,shi;
void delay1s()
{         unsigned char q;
        for(q=0;q<0x14;q++)
        {{
        TMOD=0x10;               
        TH1=(65536-50000)/256;               
        TL1=(65536-50000)%256;               
        TR1=1;
        while(!TF1);
        TF1=0; }}
}
void delay_t(unsigned char t)
{                                                                                                                                                                                                                   
        unsigned char g;
        for(g=0;g<t;g++)delay1s();
}
void display_miao()
{
        Uint tmp;       
        tmp=miao%10;
        P2=0xfe;
        P0=duan_tab[tmp];       
        delay_t(1);
        tmp=miao/10;
        P2=0xfd;
        P0=duan_tab[tmp];
        delay_t(1);       
}       
void main()
{
        while(1)
        {
         display_miao();   
        }
}


作者: dingmingzhou    时间: 2015-3-20 23:17
兄弟,你这是搞的啥子嘛,逮一个定义来的、值为0的数tmp就开始分解、显示了?再就是你那些似乎是定时延时之类的也让人看不懂呀是定时延时
作者: dingmingzhou    时间: 2015-3-20 23:21
明天给你搞一个
作者: liaolinhui    时间: 2015-3-22 00:40
void delay1s()函数不是这么写的
作者: 野强强    时间: 2015-3-24 09:15
需要的话可以给你整个更简单的!
作者: 小唐    时间: 2015-3-24 22:12
野强强 发表于 2015-3-24 09:15
需要的话可以给你整个更简单的!

我要我要
作者: 野强强    时间: 2015-3-25 09:10
小唐 发表于 2015-3-24 22:12
我要我要

ORG 00H;你好,这个延时60秒的程序,我用汇编写的.你要是有电路图,我直接给你写一个完整的。。。
START:
    MOV R0,#5
LOOP2:
        MOV R1,#200
LOOP1:
    MOV TMOD,#01H
        MOV TL0,#0A0H
        MOV TH0,#15H
        SETB TR0
CHECK:
        JB TF0,FINI
        JMP CHECK
FINI:
     CLR TR0
         CLR TF0
     DJNZ R1, LOOP1
         DJNZ R0,LOOP2
       
END
作者: 小唐    时间: 2015-3-25 10:01
野强强 发表于 2015-3-25 09:10
ORG 00H;你好,这个延时60秒的程序,我用汇编写的.你要是有电路图,我直接给你写一个完整的。。。
START ...

伙计我没有学汇编啊
有没有c的?
作者: 酸葡萄爱好者2    时间: 2015-3-29 14:02
哈哈   我前两天也在做这个  你可以到这里参考下    http://www.51hei.com/bbs/dpj-32217-1.html


我也把这个程序给你参考下   用的定时器   C语言的    加油!

附件是图片  还有我的源程序

2015-03-29_14-00-47.jpg (44.41 KB, 下载次数: 178)

2015-03-29_14-00-47.jpg

03.zip

1.84 KB, 下载次数: 6


作者: 酸葡萄爱好者2    时间: 2015-3-29 14:04
我回复怎么不见了   你可以到我的帖子里面看下    就是毫秒定时器    用的是中断定时器    你把时间改一下就好了   思路最重要    相信你   我用的是C语言
作者: 小唐    时间: 2015-4-3 10:00
酸葡萄爱好者2 发表于 2015-3-29 14:04
我回复怎么不见了   你可以到我的帖子里面看下    就是毫秒定时器    用的是中断定时器    你把时间改一下 ...

伙计谢谢你,但是还是搞不懂啊
作者: wqearth    时间: 2015-4-3 10:02
先学定时器怎么用吧,延时程序写的不对
作者: 888zhjzhj    时间: 2015-4-3 21:25
这是我编写走60秒的带小数点闪烁的时钟,如果加上按键程序,可以做成时钟。写得不太好,你可以参考一下。

#include<reg52.h>
unsigned char code LedChar[]={
        0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80,0x00,
        };
unsigned char LedBuff[8]={

        0x3f, 0x3f, 0x40, 0x3f, 0x5b, 0x80, 0x5b,  0x5b        ,
        };                                                                          
unsigned int cnt = 0;
void main()

{
        unsigned char miao = 0;
        unsigned char feng = 0;
    unsigned char shi = 0;

        TMOD = 0x01;
        TH0 = 0xFC;
        TL0 = 0x67;
        TR0 = 1;
        EA = 1;
        ET0 = 1;

        while(1)
        {
               
                       
                        if(cnt >= 1000)   
                        {
                                cnt = 0;
                                miao++;
                                if (miao%2==0)  {LedBuff[2]=LedChar[10];}
                                else            {LedBuff[2]=LedChar[11];}                              
                                          
                                if (     miao>=60)        { miao=0;feng++;                                           }
                                if (     feng>=60)        {feng=0; shi++ ;   }
                                if (    shi>=12)        {shi=0;    }  

                                LedBuff[0] = LedChar[miao%10];
                                LedBuff[1] = LedChar[miao/10%10];                       
                                LedBuff[3] = LedChar[feng%10];
                                LedBuff[4] = LedChar[feng/10%10];
                                LedBuff[6] = LedChar[shi%10];
                                LedBuff[7] = LedChar[shi/10];
                        }
                  
        }
}
unsigned char i = 0; //i 这个变量写到中断函数里面,只能显示个位的数码管,不知为什么的
void InterruptTimer0()  interrupt 1                 
{
       
        TH0 = 0xFC;
        TL0 = 0x67;//定时器一毫秒中断一次
        cnt++;
        P0 = 0x00;
                        if(i == 0)                                          
                        {P2=7; i++; P0=LedBuff[0];}
                        else if(i == 1)
                        {P2=6; i++; P0=LedBuff[1];}
                    else if(i == 2)
                        {P2=5; i++; P0=LedBuff[2];}
                        else if(i == 3)
                        {P2=4; i++; P0=LedBuff[3];}
                        else if(i == 4)
                        {P2=3; i++; P0=LedBuff[4];}
                        else if(i == 5)
                        {P2=2; i++; P0=LedBuff[5];}
                        else if(i == 6)
                        {P2=1; i++; P0=LedBuff[6];}
                        else if(i == 7)
                        {P2=0; i=0; P0=LedBuff[7];}

}




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1