查看完整版本: 用新买的51单片机试验板做的秒表

honami520 2008-4-15 23:32

用新买的51单片机试验板做的秒表

图片当然是没有的!我只能发个电路图,和相关代码。其中P0输出是共阳极8个LED。其他的电路图上都有!
4个数码管是通过74HC595来驱动的。
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
unsigned char code tab[]=
{ 0x3F,0x06,0x5B,0x4F,    //"0","1","2","3"
  0x66,0x6D,0x7D,0x07,    //"4","5","6","7"
  0x7F,0x6F,0x77,0x7c,    //"8","9","A","B"
  0x39,0x5e,0x79,0x71,    //"C","D","E","F"
} ;
sbit dat=P1^0;
sbit clk=P1^1;
sbit lat=P1^2;
sbit gw=P1^3;
sbit sw=P1^4;
sbit bw=P3^3;
sbit qw=P3^4;

uchar  a=0,g=0,s=0,b=0,q=0,temp=0xfe;
void delay(uchar z)
{
        uint i,j;
        for(z;z>0;z--)
        for(i=20;i>0;i--)
                for(j=25;j>0;j--);
}

roll(uchar j)                //移位寄存
{
        uchar i;
        for(i=0;i<8;i++)        //8位数,移动8次
        {
                dat=j&0x80;                //接受1位
                clk=1;                        //来个时钟沿数据传送过去
                clk=0;
                j<<=1;                        //数据左移
        }       
        lat=1;                                //锁存
        lat=0;
}

void display()
{
        while(q<17)
        {  
                roll(tab[g]);
                gw=0;
                delay(1);
                gw=1;
               
                roll(tab[s]);
                sw=0;
                delay(1);
                sw=1;
               
                roll(tab[b]);
                bw=0;
                delay(1);
                bw=1;
       
                roll(tab[q]);
                qw=0;
                delay(1);
                qw=1;

       
        }
}
void ext0() interrupt 1                //T0定时中断
{               
                a++;
                TH0=(65536-50000)/256;        //定时50ms
                TL0=(65536-50000)%256;
               

        if(a==20)                //20次中断合计1秒后
        {        a=0;
                g++;
                P0=temp;
           temp=_crol_(temp,1);
               



                if(g==10)
                {        g=0;
                        s++;
                }
                if(s==10)
                {        s=0;
                        b++;
                  
                }
                if(b==10)
                {
                        b=0;
                        q++;                       
                }
                if(q==10)
                {
                        q=0;
                }
        }       
}

void main()
{        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;
        while(1)
        {       
       
                display();
        }
       
}

89_G 2008-4-22 17:26

__a15 牛人。。崇拜下~~

大智若瑜 2008-6-15 22:29

不顶不行..........

girlyal 2008-8-20 21:43

办公家具

*** 作者被禁止或删除 内容自动屏蔽 ***
页: [1]
查看完整版本: 用新买的51单片机试验板做的秒表