标题: STC89C52RC单片机实现秒表实物的电路图检查 [打印本页]

作者: Irvingzong    时间: 2020-7-12 17:51
标题: STC89C52RC单片机实现秒表实物的电路图检查
  大佬们好,我是一位新手,目前我需要实现: 采用两个按键和一位数码显示的单片机秒表设计的实物制作,其功能是:上电时显示提示符。按 A 键再按 B 键后,显示两键按下之间的时间 t(t <60s),单位为 ms。时间 t 用五位十进制整数显示,由一位数码管从最高位开始逐位显示一遍。要求:测量时间 t 采用对定时器中断的次数计数的方式实现。将定时器 T 设置为 1ms 中断的定时器,A 键按下后启动定时器 T 每隔 1ms 中断一次,在中断服务程序中对中断的次数进行计数,B 键按下后定时器 T 停止工作。规定数码管段各段LED的正向导通电流为1.8mA。    我想请问我按照我画的电路图进行焊接能满足要求吗?P0口的限流电阻和其他各个元件的参数选取得对吗?用万能板焊接有什么注意事项?谢谢大佬们





电路图.PNG (102.2 KB, 下载次数: 101)

电路图.PNG

作者: xianfajushi    时间: 2020-7-12 18:22
按仿真电路来论R1-10统统多余,按实际电路论,复位电路参数按手册要求。
作者: Irvingzong    时间: 2020-7-12 18:56
xianfajushi 发表于 2020-7-12 18:22
按仿真电路来论R1-10统统多余,按实际电路论,复位电路参数按手册要求。

那在焊接的时候需要加上这些电阻吗,其他的元件参数仿真正常那焊接的时候也没问题吗?
作者: odfggf    时间: 2020-7-12 21:10
R1,R2,RP1可以不需要。
作者: xianfajushi    时间: 2020-7-13 06:31
按实际电路也一样不需要1-10电阻,数码管选用共阴,这样焊接电路元件少,花钱也少,电路显得精简得当。
作者: wc86110    时间: 2020-7-13 08:15
哈哈,紧盯单个数码管变换的时间数字眼睛会觉得很累
作者: Irvingzong    时间: 2020-7-13 20:05
xianfajushi 发表于 2020-7-13 06:31
按实际电路也一样不需要1-10电阻,数码管选用共阴,这样焊接电路元件少,花钱也少,电路显得精简得当。

可是师傅要求加限流电阻R4-10而且数码管工作电流是1.8毫安,那计算得到限流电阻是1.6K,可是仿真的时候不亮了,要降低阻值才能亮,实物也是这样吗
作者: odfggf    时间: 2020-7-13 20:14
Irvingzong 发表于 2020-7-13 20:05
可是师傅要求加限流电阻R4-10而且数码管工作电流是1.8毫安,那计算得到限流电阻是1.6K,可是仿真的时候不 ...

接共阴的话,1-10电阻可以不用,但是RP1是一定要的,而且Rp1上拉阻值要在680欧左右,否则亮度会非常低。
相比之下,还是用共阳数码管,这样可以省去RP1上拉电阻,R4---R10限流电阻还是接一个的好
作者: Irvingzong    时间: 2020-7-13 20:20
odfggf 发表于 2020-7-13 20:14
接共阴的话,1-10电阻可以不用,但是RP1是一定要的,而且Rp1上拉阻值要在680欧左右,否则亮度会非常低。
...

噢噢,要求是共阳数码管,那可以接1.6K的限流电阻和10K上拉电阻吗
作者: Irvingzong    时间: 2020-7-13 20:31
另外我这程序不知道哪里不对,显示的时间好像是乱的
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uint m=0;
sbit A1=P3^4;
sbit A2=P3^5;
uint count,t;
uchar d,e,f;
uchar code table[]={0x14,0xde,0x38,0x1a,0xd2,0x13,0x11,0x9e,0x10,0x12};
uchar code cnt[]={10000,1000,100,10,1};
void delay(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=67;c>0;c--)
        for(b=124;b>0;b--)
            for(a=167;a>0;a--);
}

void start()
{
        TMOD=0x01; //T0 使用工作方式 1
        TH0=(65536-1000)/256; //1ms 定时
        TL0=(65536-1000)%256;
        EA=1;
        ET0=1;
        TR0=0;
}
void time0(void) interrupt 1 //T0 中断服务子程序
{
        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;
        count++;
        if(count>=1)
        {count=0;
         t++;
         if(t>=60000)
         {t=0;}
        }
}


void display(uint t)  //显示子程序,从第一位开始逐位显示
{
         uint k=0,v;
         for(;k<5;k++)
         {
                 v=t/cnt[k]%10 ;
                 P0=table[v];
                delay();
            {for(f=23;f>0;f--)
                for(e=152;e>0;e--)
                    for(d=70;d>0;d--)
                                P0=0xFF;
                }
         }

}
void main(void)
{        start();
while(1)
{
        P0=0xb7;
        P3=0x30;
        if(P3!=0x30)
        {if(A1==0)                          //按键扫描
                {TR0=1;}
         if(A2==0)
                 {
                        TR0=0;
                        while(!A2);
                        while(P3==0x30)
                        {
                                display(t);
                        }
                }
       
        }               
}
}




作者: 乐儿翅    时间: 2020-7-28 10:03
用AD就可以了




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