我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: 电子时钟创新实验 隐藏签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

nirui



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
家族: 飞跃重洋
发贴: 842
威望: 0
浮云: 1559
在线等级:
注册时间: 2006-09-28
最后登陆: 2010-01-20

5come5帮你背单词 [ usually /'ju:3əuəli/ a. 通常的,平常的,惯例的 ]


电子时钟创新实验

我们的电子时钟的程序:
/********************************************

#define uchar unsigned char
#define uint  unsigned int

#define L4  P1_7
#define L3  P1_6
#define L2  P1_5
#define L1  P1_4
#define R4  P1_3
#define R3  P1_2
#define R2  P1_1
#define R1  P1_0

uchar led[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//
uchar t1_S=0,t1_M=0,t1_H=0;//
uint  t1_ms=0;//uchar t1_move=0;//
void
IOinit(void)//input /output initial
{
    ET1=1;//open the T1 interrupt
    T1_M1_ =1;//auto-reload module
    TMOD=0x20;//00100000,    TL1=6;//125uS
    TH1=6;//

    TR1=1;//计数器1工作
    EA=1;//中断打开CPU中断
}
void timer1() interrupt 3//计时器工作,先计时125*80=10000us=0.01s,然后计100个0.1秒为1s,60s为循环周期.
{
    TH1=6;
        t1_ms++;
    TL1=6;//65536-15536=50000
    if (t1_ms == 80)
    {
        t1_ms=0;
        t1_S++;
        if (t1_S > 99)
        {
            t1_S=0;
            t1_M++;
            if (t1_M > 59 )
            {
                t1_M=0;
                t1_H++;
                if (t1_H>59)
                {
                    t1_H=0;
                }
            }
        }
    }
}
uchar
check_key(void)//
{
    uchar key=0;
    uchar Rt1_move;
    L1=0;
    L2=0;
    L3=0;
    L4=0;
    Rt1_move=P1&0x0f;
    if (Rt1_move != 0x0f)//have key
    {
        L1=0;
        L2=1;
        L3=1;
        L4=1;//
        if (R1 == 0)key=1;
        while (R1==0) ;
        if (R2 == 0)key=2;
        while (R2 == 0) ;
        if (R3 == 0)key=3;
        while (R3 == 0) ;
        if (R4 == 0)key=4;
        while (R4==0) ;

        L1=1;
        L2=0;
        L3=1;
        L4=1;
        if (R1==0)key=5;
        while (R1==0) ;
        if (R2==0)key=6;
        while (R2==0) ;
        if (R3==0)key=7;
        while (R3==0) ;
        if (R4==0)key=8;
        while (R4==0) ;

        L1=1;
        L2=1;
        L3=0;
        L4=1;
        if (R1==0)key=9;
        while (R1==0) ;
        if (R2==0)key=10;
        while (R2==0) ;
        if (R3==0)key=11;
        while (R3==0) ;
        if (R4==0)key=12;
        while (R4==0) ;
        L1=1;
        L2=1;
        L3=1;
        L4=0;//
        if (R1==0)key=13;
        while (R1==0) ;
        if (R2==0)key=14;
        while (R2==0) ;
        if (R3==0)key=15;
        while (R3==0) ;
        if (R4==0)key=16;
        while (R4==0) ;

    }
    return key;
    /*P0=led[key/10];
    P2=2;
    delay(10);
    P0=led[key%10];
    P2=1;
    delay(10);*/
}
void
time_setup(uchar tmp)
{
    if (tmp !=0 )
    {
            switch (tmp)
            {
                case 14://清零
                      t1_ms=0,t1_S=0,t1_M=0,t1_H=0;
                                        break;
                                case 15://暂停
                    TR1=0;
                    EA=0;
                    t1_move=0;
                    break;
                                case 16://开始
                    TR1=1;
                    EA=1;
                    t1_move=0;
                    break;
                default:
                    break;

            }
        }

}
void delay(uchar i)
{
    uchar j;
    for(;i>0;i--)
        for(j=255;j>0;j--)
            ;
    //return 0;

}
void
display(void)
{
    uchar m=5;
    if (t1_move == 1) m=40;
    P0=led[t1_H/10];
    P2=0x20;
    delay(m);
    P0=led[t1_H%10];
    P2=0x10;
    delay(m);

    m=5;
    if (t1_move == 2)m=40;
    P0=led[t1_M/10];
    P2=0x8;
    delay(m);
    P0=led[t1_M%10];
    P2=0x4;
    delay(m);

    m=5;
    if(t1_move == 3)m=40;
    P0=led[t1_S/10];
    P2=0x2;
    delay(m);
    P0=led[t1_S%10];
    P2=0x1;
    delay(m);
}
int main(void)
{
    uchar tmp;
    IOinit();

    do
    {
        tmp=check_key();
        time_setup(tmp);
        display();

    }while (1);

}

我不懂的问题:1.time_setup函数里面,为什么switch语句里面,每个case后面的语句里面,都有t1_move=0?
2.display函数里面,为什么每位显示后,都有delay语句啊?
3.display里面,多次给m赋值为5,是不是多余的啊?
4.t1_move 这个变量,程序里面每次给它赋值都只赋值为零,为什么程序还能显示除了0.01秒位以外的几位?
生我天才必有用
顶端 Posted: 2007-12-08 23:09 | [楼 主]
ljpdxj



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 687
威望: 0
浮云: 1108
在线等级:
注册时间: 2006-02-28
最后登陆: 2008-06-29

5come5帮你背单词 [ relevant /'relivənt/ a. 相关的,切题的,中肯的,恰当的 ]


这个是单片机C语言程序设计?
顶端 Posted: 2007-12-08 23:56 | [1 楼]
nirui



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
家族: 飞跃重洋
发贴: 842
威望: 0
浮云: 1559
在线等级:
注册时间: 2006-09-28
最后登陆: 2010-01-20

5come5帮你背单词 [ locomotive /'ləukəməutiv/ n. 机车,火车头 ]


Quote:
引用第1楼ljpdxj于2007-12-08 23:56发表的  :
这个是单片机C语言程序设计?

是的,控制51单片机的,51单片机又可以控制6位的数字显示器
生我天才必有用
顶端 Posted: 2007-12-09 08:45 | [2 楼]
我来我网·5come5 Forum » 程序员之家

Total 0.009066(s) query 5, Time now is:11-22 22:03, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号