实时时钟时分秒c语言程序,求一基于61板的实时时钟C语言程序

#include"graphics.h"

#define PI 3.1416

#include"math.h"

#include"dos.h"

main()

{

int x0=320,y0=240,r0=150;

void init_sceen();

void sec();

init_sceen(x0,y0,r0);

sec();

closegraph();

}

void init_sceen(int x0,int y0,int r0)/********************************************/

{

int i,x,y,graphdriver,graphmode;

char s[10];

float alpha,a0=90;

graphdriver=DETECT;

initgraph(&graphdriver,&graphmode,"");

setbkcolor(3);

setcolor(2);

circle(x0,y0,r0);

circle(x0,y0,r0+30);

setfillstyle(SOLID_FILL,10);

floodfill(x0-r0-10,y0,2);

/*please input the time*/

for(i=12;i>=1;i--)

{

alpha=(a0+30*(11-i)*PI/180);

x=x0+cos(alpha)*r0-16;

y=y0-sin(alpha)*r0;

sprintf(s,"%2d",i);

setcolor(4);

settextstyle(0,0,2);

outtextxy(x,y,s);

}

/*input second*/

for(i=60;i>=1;i--)

{

alpha=(a0+6*(60-i)*PI/180);

x=x0+cos(alpha)*(r0-20);

y=y0-sin(alpha)*(r0-20);

setcolor(14);

if(i%5==0)

circle(x,y,5);

else circle(x,y,2);

floodfill(x,y,14);

}

setlinestyle(0,0,3);

}

void sec(void) /******************************************************************/

{

int x,y,i,j,k,xj,yj,xk,yk,xi,yi,x0=320,y0=240,r0=150;

union REGS r;

unsigned char *shijie="";

unsigned char *daa="";

struct time tim;

struct date dat;

float alphai,alphak,alphaj,a0=90;

xi=x0;yi=y0;xj=x0;yj=y0;xk=x0;yk=y0;

do

{

/*intput the time*/

x=38;y=12;

gettime(&tim);

sprintf(shijie,"%02d:%02d:%02d",tim.ti_hour,tim.ti_min,tim.ti_sec);

setfillstyle(SOLID_FILL,0);

bar(245,190,375,210);

setcolor(15);

outtextxy(245,190,shijie);

/*input the date*/ /*****************************************************/

getdate(&dat);

sprintf(daa,"%02d--%02d--%02d",dat.da_year,dat.da_mon,dat.da_day);

/*setfillstyle(SOLID_FILL,3);*/

bar(225,290,395,310);

setcolor(RED);

outtextxy(225,290,daa);

setlinestyle(0,0,3);

k=tim.ti_hour;

j=tim.ti_min;

i=tim.ti_sec;

alphak=(a0+30*(12-k)-j*5/60.*6)*PI/180;

alphaj=(a0-6*j)*PI/180;

/*write second hand*/

alphai=(a0+6*(60-i))*PI/180;

x=x0+cos(alphai)*(r0-32);

y=y0-sin(alphai)*(r0-32);

setcolor(BLACK);

line(x0,y0,xi,yi);

setcolor(YELLOW);

line(x0,y0,x,y);

xi=x;

yi=y;

/*write minute hand*/

x=x0+cos(alphaj)*(r0-60);

y=y0-sin(alphaj)*(r0-60);

setcolor(BLACK);

line(x0,y0,xj,yj);

setcolor(BLUE);

line(x0,y0,x,y);

xj=x;

yj=y;

/*write hour hand*/

x=x0+cos(alphak)*(r0-99);

y=y0-sin(alphak)*(r0-99);

setcolor(BLACK);

line(x0,y0,xk,yk);

setcolor(RED);

line(x0,y0,x,y);

xk=x;

yk=y;

delay(10000);

}

while(!kbhit());

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STC89C516单片机中的实时时钟(RTC,Real-Time Clock)功能通常通过RTC模块来实现,这是一种独立于系统时钟的低功耗定时器,用于提供精确的时间信息。使用C语言编写RTC的程序,你需要了解以下几个步骤: 1. **初始化RTC模块**: 首先,你需要配置RTC的工作模式和时基。这通常涉及写入RTC的寄存器,例如TCON或TMOD来设置定时器的工作方式。 ```c // 初始化RTC TR0 = 0; // 关闭定时器0,因为RTC使用内部时钟 SFRPAGE = 0x3F; // 设置特殊功能寄存器页 TMR0H = 0; TMR0L = 0; // 清零计数器 TH1 = 0x3F; // 设置分频系数 TL1 = 0x00; SETB TR1; // 启动定时器1,作为RTC时钟源 ``` 2. **配置中断**: 如果你想利用RTC中断来更新时间,需要配置INT0或INT1,并连接到对应的中断服务子程序(ISRs)。 ```c // 配置RTC中断 IE0 = 1; // 开启INT0中断 EOI(); // 使能中断请求 ``` 3. **读取和设置时间**: 使用寄存器如TMOD、TH1、TL1以及寄存器组如RTC相关的寄存器来获取和设置日期和时间。 ```c // 读取RTC时间 unsigned char hour = TMOD & 0x0F; unsigned char minute = (TH1 << 4) | TL1; // 设置RTC时间 RTC_DATE = (unsigned char)year; // 年份 RTC_TIME = (unsigned char)(hour << 4) | minute; ``` 4. **启用RTC并进入低功耗模式**: 为了节省电能,可能需要在不需要时停止CPU,这时RTC将继续运行。 ```c // 在进入休眠前暂停CPU并启用RTC // 休眠代码... while(1); // 进入低功耗模式 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值