请选择 进入手机版 | 继续访问电脑版

普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 2022|回复: 2

时钟怎么把这个程序改为时分秒啊?

[复制链接]

1

主题

1

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2021-7-6 17:59:09 | 显示全部楼层 |阅读模式
#include "reg51.h"                       

typedef unsigned int u16;       
typedef unsigned char u8;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

u8 ssec,sec,min;
u8 DisplayData[8];

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<8;i++)
        {
                switch(i)       
                {
                        case(0):
                                LSA=1;LSB=1;LSC=1; break;
                        case(1):
                                LSA=0;LSB=1;LSC=1; break;
                        case(2):
                                LSA=1;LSB=0;LSC=1; break;
                        case(3):
                                LSA=0;LSB=0;LSC=1; break;
                        case(4):
                                LSA=1;LSB=1;LSC=0; break;
                        case(5):
                                LSA=0;LSB=1;LSC=0; break;
                        case(6):
                                LSA=1;LSB=0;LSC=0; break;
                        case(7):
                                LSA=0;LSB=0;LSC=0; break;
                }
                P0=DisplayData[i];
                delay(100);       
                P0=0x00;
        }
}

void datapros()
{
        DisplayData[0]=smgduan[min/10];
        DisplayData[1]=smgduan[min%10];
        DisplayData[2]=0x40;       
        DisplayData[3]=smgduan[sec/10];
        DisplayData[4]=smgduan[sec%10];
        DisplayData[5]=0x40;
        DisplayData[6]=smgduan[ssec/10];
        DisplayData[7]=smgduan[ssec%10];
}

void main()
{       
        Timer0Init();
        while(1)
        {
                datapros();
                DigDisplay();       
        }               
}



void Timer0() interrupt 1
{
        TH0=0Xd8;       
        TL0=0Xf0;
        ssec++;
        if(ssec>=100)  
        {
                ssec=0;
                sec++;
                if(sec>=60)
                {
                        sec=0;
                        min++;
                        if(min>=60)
                        {
                                min=0;
                        }
                }       
        }       
}

回复

使用道具 举报

3

主题

12

帖子

67

积分

注册会员

Rank: 2

积分
67
发表于 2021-7-20 15:57:16 | 显示全部楼层
#include "reg51.h"                         typedef unsigned int u16;        typedef unsigned char u8;  sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4;  u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};  u8 ssec,sec,min,shi; u8 DisplayData[8];  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<8;i++)         {                 switch(i)                        {                         case(0):                                 LSA=1;LSB=1;LSC=1; break;                         case(1):                                 LSA=0;LSB=1;LSC=1; break;                         case(2):                                 LSA=1;LSB=0;LSC=1; break;                         case(3):                                 LSA=0;LSB=0;LSC=1; break;                         case(4):                                 LSA=1;LSB=1;LSC=0; break;                         case(5):                                 LSA=0;LSB=1;LSC=0; break;                         case(6):                                 LSA=1;LSB=0;LSC=0; break;                         case(7):                                 LSA=0;LSB=0;LSC=0; break;                 }                 P0=DisplayData[i];                 delay(100);                        P0=0x00;         } }  void datapros() {         DisplayData[0]=smgduan[shi/10];         DisplayData[1]=smgduan[shi%10];         DisplayData[2]=0x40;                DisplayData[3]=smgduan[min/10];         DisplayData[4]=smgduan[min%10];         DisplayData[5]=0x40;         DisplayData[6]=smgduan[sec/10];         DisplayData[7]=smgduan[sec%10]; }  void main() {                Timer0Init();         while(1)         {                 datapros();                 DigDisplay();                }                }    void Timer0() interrupt 1 {         TH0=0Xd8;                TL0=0Xf0;         ssec++;         if(ssec>=100)           {                 ssec=0;                 sec++;                 if(sec>=60)                 {                         sec=0;                         min++;                         if(min>=60)                         {                shi++;                                 min=0;                         }                                                 {                                                  if(shi>=60)                                                  {                                                   shi=0;                                                  }                                                 }                 }                }        }
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-3-29 19:43 , Processed in 0.084247 second(s), 33 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表