OpenEdv-开源电子网

标题: 求指点,带小数点的秒表 [打印本页]

作者: 15116493876    时间: 2017-5-6 11:47
标题: 求指点,带小数点的秒表
怎么给秒表第二位加上小数点?我只会数码管一加就全都有小数点


作者: BMN李    时间: 2017-5-6 11:47
15116493876 发表于 2017-5-6 17:52
#include "reg52.h"       
typedef unsigned int u16;
typedef unsigned char u8;

void datapros()
{
        MBXS[0]=duanxuan[s1/10];        
        MBXS[1]=duanxuan[s2%10]|0x80;
        MBXS[2]=duanxuan[s2/10];
        MBXS[3]=duanxuan[s3%10];
}
作者: BMN李    时间: 2017-5-6 15:52
贴个代码吧
作者: 18811707971    时间: 2017-5-6 16:47
可以用或运算实现,比如:P0=table[shi2]|0x80;//共阴极数码管加上小数点
作者: 15116493876    时间: 2017-5-6 17:48
18811707971 发表于 2017-5-6 16:47
可以用或运算实现,比如:P0=table[shi2]|0x80;//共阴极数码管加上小数点

这个代码会让所有数码管都加上小数点,而我只想一位数码管有小数点
作者: 15116493876    时间: 2017-5-6 17:52
BMN李 发表于 2017-5-6 15:52
贴个代码吧

#include "reg52.h"       
typedef unsigned int u16;
typedef unsigned char u8;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;
u8 code duanxuan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

u8 s1,s2,s3,sum;
u8 MBXS[4];
void delay(u16 i)
{
        while(i--);       
}
void Timer0Init()
{
        TMOD|=0X01;
        TH0=0Xd8;
        TL0=0Xf0;       
        ET0=1;
        EA=1;
        TR0=1;
}

void DigDisplay()
{
        u8 i;
        for(i=0;i<4;i++)
        {
                switch(i)
                {
                        case(0)SA=0;LSB=0;LSC=0; break;
                        case(1)SA=1;LSB=0;LSC=0; break;
                        case(2)SA=0;LSB=1;LSC=0; break;
                        case(3)SA=1;LSB=1;LSC=0; break;       
                }
                P0=MBXS;
                delay(100);
                P0=0x00;
        }
}

void datapros()
{
        MBXS[0]=duanxuan[s1/10];       
        MBXS[1]=duanxuan[s2%10];
        MBXS[2]=duanxuan[s2/10];
        MBXS[3]=duanxuan[s3%10];
}       
void main()
{       
        Timer0Init();
        while(1)
        {
                datapros();
                DigDisplay();       
        }               
}

void Timer0() interrupt 1
{
        TH0=0Xd8;
        TL0=0Xf0;
        s1++;
        if(s1>=100)
        {
                s1=0;
                s2++;
                if(s2>=100)
                {
                        s2=0;
                        s3++;
                        if(s3>=10)
                        {
                                s3=0;
                        }
                }       
        }       
}
帮忙看看,谢谢
作者: 18811707971    时间: 2017-5-6 19:05
15116493876 发表于 2017-5-6 17:48
这个代码会让所有数码管都加上小数点,而我只想一位数码管有小数点

这个就是单独加啊,楼下已经回答你了
作者: 15116493876    时间: 2017-5-6 19:08
BMN李 发表于 2017-5-6 11:47
void datapros()
{
        MBXS[0]=duanxuan[s1/10];        

谢谢

作者: 15116493876    时间: 2017-5-6 19:11
18811707971 发表于 2017-5-6 19:05
这个就是单独加啊,楼下已经回答你了

能帮我看看这个程序吗,为什么实现不了单键暂停,清零,只能实现开启
#include "reg52.h"       
typedef unsigned int u16;
typedef unsigned char u8;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;
u8 code duanxuan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

u8 s1,s2,s3,sum;
u8 MBXS[4];
void delay(u16 i)
{
        while(i--);       
}
void Timer0Init()
{
        TMOD|=0X01;
        TH0=0Xd8;
        TL0=0Xf0;       
        ET0=1;
        EA=1;
        TR0=1;
}

void DigDisplay()
{
        u8 i;
        for(i=0;i<4;i++)
        {
                switch(i)
                {
                        case(0): LSA=0;LSB=0;LSC=0; break;
                        case(1): LSA=1;LSB=0;LSC=0; break;
                        case(2): LSA=0;LSB=1;LSC=0; break;
                        case(3): LSA=1;LSB=1;LSC=0; break;       
                }
                P0=MBXS;
                delay(100);
                P0=0x00;
        }
}

void datapros()
{
        MBXS[0]=duanxuan[s1/10];       
        MBXS[1]=duanxuan[s2%10]|0X80;
        MBXS[2]=duanxuan[s2/10];
        MBXS[3]=duanxuan[s3%10];
}

void key2()
{
        if(k2==0)
        {
                delay(1000);
                if(k2==0)
                {
                        Timer0Init();
      sum++;
                        switch(sum)
                        {
                                case(2):TR0=0;
                                case(3):s1=0;s2=0;s3=0;
                                default:sum=0;
                        }
                }
                while(!k2);
        }       
}
void main()
{       
        while(1)
        {
                key2();
                datapros();
                DigDisplay();       
        }               
}

void Timer0() interrupt 1
{
        TH0=0Xd8;
        TL0=0Xf0;
        s1++;
        if(s1>=100)
        {
                s1=0;
                s2++;
                if(s2>=100)
                {
                        s2=0;
                        s3++;
                        if(s3>=10)
                        {
                                s3=0;
                        }
                }       
        }       
}




欢迎光临 OpenEdv-开源电子网 (http://47.111.11.73/) Powered by Discuz! X3.4