vb2002 发表于 2024-10-11 17:04:59

我好激动,自从自己完成手电项目以后.又做了个东西

自己按照自己的理解,
独立完成了这个时钟代码.除了数码管.
其他的代码还有设置,全部自己一个一个代码敲出来
虽然代码乱乱的,但是功能完全实现了.超级开心.

#include "stc8h.h"
#include "intrins.h"
#include "stdio.h"
#include "tm1637.h"

#define MAIN_Fosc 11059200L // 定义主时钟
#define BRT (65536 - MAIN_Fosc / 115200 / 4)
#define TIME 20

unsigned char a;
unsigned char b;
unsigned char c;
unsigned char d;
bit h=0;

unsigned char s1=1,s2=6,f1=4,f2=8;
unsigned char m=0;

void UartInit();
void Timer0_Init(void);
void delayms(unsigned int ms);

void shan()
{
    P11 = 0; delayms(5); P11 = 1; delayms(250);
}

void INT0_Isr() interrupt 0
{

         
//      printf("out=%bd \r",t);
//      printf("out=%bd \r",ld);

}


void main()
{
    P_SW2 |= 0x80;
    P1M0 = 0x00; P1M1 = 0x00;
    P3M0 = 0x00; P3M1 = 0x00;         
    EA = 1; // 全局中断使能
    IT0 = 1;                                    //使能INT0上升沿和下降沿中断
    EX0 = 1;                                    //使能INT0中断

    Timer0_Init();
    UartInit();
   

      
    while(1)
    {
      TM1637_Display(a,b,c,d,h );
      a=s1;b=s2;c=f1;d=f2;

      
         
    }
}

// 定时器0中断服务程序
void Timer0_Isr(void) interrupt 1
{
    static unsigned char n = 0;

    n++;
    if (n == TIME)
    {
      m++;
          h=!h;
      n = 0;
    }
    if (m == 60)
    {
      f2++;
      m = 0;
    }
    if(f2==10)
    {
            f1++;
            f2=0;
    }
    if(f1==6)
    {
   s2++;
      f1=0;   
    }
    if(s2==10)
    {
    s1++;
            s2=0;
    }
    if(s1==2&&s2==4)
    {
    s1=0;s2=0;
    }
   
            if(P36==0)
      {
      f2++;
      }
      if(P37==0)
      {
      f1++;
      }
}

void Timer0_Init(void)                //50毫秒@11.0592MHz
{
      AUXR &= 0x7F;                        //定时器时钟12T模式
      TMOD &= 0xF0;                        //设置定时器模式
      TL0 = 0x00;                              //设置定时初始值
      TH0 = 0x4C;                              //设置定时初始值
      TF0 = 0;                              //清除TF0标志
      TR0 = 1;                              //定时器0开始计时
      ET0 = 1;                              //使能定时器0中断
}



void UartInit()
{
    SCON = 0x5a;
    T2L = BRT;
    T2H = BRT >> 8;
    AUXR = 0x15;
}

void delayms(unsigned int ms)
{
    unsigned int i;
    do
    {
      i = MAIN_Fosc / 10000;
      while (--i);
    } while (--ms);
}


邮箱 发表于 2024-10-11 19:13:58

{:4_174:}

soma 发表于 2024-10-11 19:15:21

1637使用数码管的

xxxevery 发表于 2024-10-11 20:08:30

大大的赞一下,继续努力

vb2002 发表于 2024-10-11 20:25:53

soma 发表于 2024-10-11 19:15
1637使用数码管的

是啊,用的1637数码管,,i2c蛮好用的
我看论坛好多都用的 74ch595   我见有5脚,我就选了这个4脚的

vb2002 发表于 2024-10-11 20:26:25

xxxevery 发表于 2024-10-11 20:08
大大的赞一下,继续努力

单片机这玩意真好玩.
玩了好多年的弹弓和游戏都不玩了

晓飛飛 发表于 2024-10-11 20:53:14

vb2002 发表于 2024-10-11 20:26
单片机这玩意真好玩.
玩了好多年的弹弓和游戏都不玩了

好呀,把你的弹弓寄给我吧

vb2002 发表于 2024-10-12 00:23:54

晓飛飛 发表于 2024-10-11 20:53
好呀,把你的弹弓寄给我吧

没有问题,我好多弹弓,寄几把给你,地址发给我

wangxiangtan 发表于 2024-10-12 08:04:22

这是上道了{:4_165:}

小坤 发表于 2024-10-12 08:19:30

STC8H的片子,可以试试用片内的RTC做
页: [1] 2
查看完整版本: 我好激动,自从自己完成手电项目以后.又做了个东西