我好激动,自从自己完成手电项目以后.又做了个东西
自己按照自己的理解,独立完成了这个时钟代码.除了数码管.
其他的代码还有设置,全部自己一个一个代码敲出来
虽然代码乱乱的,但是功能完全实现了.超级开心.
#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);
}
{:4_174:} 1637使用数码管的 大大的赞一下,继续努力 soma 发表于 2024-10-11 19:15
1637使用数码管的
是啊,用的1637数码管,,i2c蛮好用的
我看论坛好多都用的 74ch595 我见有5脚,我就选了这个4脚的 xxxevery 发表于 2024-10-11 20:08
大大的赞一下,继续努力
单片机这玩意真好玩.
玩了好多年的弹弓和游戏都不玩了 vb2002 发表于 2024-10-11 20:26
单片机这玩意真好玩.
玩了好多年的弹弓和游戏都不玩了
好呀,把你的弹弓寄给我吧 晓飛飛 发表于 2024-10-11 20:53
好呀,把你的弹弓寄给我吧
没有问题,我好多弹弓,寄几把给你,地址发给我 这是上道了{:4_165:} STC8H的片子,可以试试用片内的RTC做
页:
[1]
2