单片机C语言该怎么编写时钟程序?

单片机C语言该怎么编写时钟程序?,第1张

这个是简单的数码管时钟显示如果有需要,我写过比较完善的1602显示时钟.显示控制年月日等等.#include<reg51.h>

sbit Begin=P2^0

sbit Hour=P2^1

sbit Mus=P2^2

sbit End=P2^3

unsigned char code Tab[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40}

unsigned char code num[]={ 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}

unsigned char Time[]={0,0,16,0,0,16,0,0}

unsigned char a

unsigned int x,m,th

void init()

{

TMOD=0x01

TH0=(65535/50000)/256

TL0=(65535/50000)%256

EA=1

ET0=1

TR0=1

}

void delay(unsigned int z)

{

unsigned int x,y

for(x=zx>0x--)

for(y=110y>0y--)

}

unsigned char keyboard()

{

if(Begin==0){

delay(5)

if(Begin==0)

return 1

}

if(Hour==0){

delay(30)

if(Hour==0)

return 2

}

if(Mus==0)

return 3

if(End==0)

return 4

}

void display()

{

unsigned char i for(i=0i<8i++)

{

P3=num[i]

P0=Tab[Time[i]]

delay(5)

}

}

void main()

{

unsigned char Key

init()

Key=keyboard()

if(Key==1)

{

while(1){

Key=keyboard()

display()

if(Key==2)

x+=3600

if(Key==3)

x+=1

if(Key==4)

return

}

}}

void holes() interrupt 1 using 2

{

TH0=(65535/50000)/256

TL0=(65535/50000)%256

a++

if(a>=20)

{

x++

m=x

th=m/3600//设置小时

Time[0]=th/10

Time[1]=th%10

m=m%3600 Time[2]=16 th=m/60//设置分钟

Time[3]=th/10

Time[4]=th%10

m=m%60 Time[5]=16 th=m//设置秒

Time[6]=th/10

Time[7]=th%10 a=0

}

}

具体代码如下:

#include<graphics.h>

#include<math.h>

#include<dos.h>

#define PI 3.1415926

//屏幕中心的坐标(640X480模式下)

#define mid_x 320

#define mid_y 240

int main()

{ int graphdriver=DETECT,graphmode

int end_x,end_y

struct time curtime

float th_hour,th_min,th_sec

initgraph(&graphdriver,&graphmode,"C:\\TC2")//初始化VGA屏幕模式

setbkcolor(BLACK)//使用黑色的背景色

while(!kbhit(0)) //若有键盘输入,则跳出,即是结束程序

{ setcolor(GREEN)//把画笔设为绿色

circle(mid_x,mid_y,180)//钟的外圆

circle(mid_x,mid_y,150)//钟的内圆

circle(mid_x,mid_y,1)//画出钟的圆心

gettime(&curtime)//取得系统当前时间

th_sec=(float)curtime.ti_sec*0.1047197551//把秒针的角度化为弧度,为以后绘制时方便,下同

th_min=(float)curtime.ti_min*0.1047197551+th_sec/60.0//分针的弧度

th_hour=(float)curtime.ti_hour*0.5235987755+th_min/12.0//时度的弧度,注意整时是12等分的,所时乘的是3.14/180*5

//计算出时针的尾的坐标(时针长70)

end_x=mid_x+70*sin(th_hour)

end_y=mid_y-70*cos(th_hour)

setcolor(RED)

line(mid_x,mid_y,end_x,end_y)//用红色线画出时针

//计算出分针坐标(分针长110)

end_x=mid_x+110*sin(th_min)

end_y=mid_y-110*cos(th_min)

setcolor(RED)

line(mid_x,mid_y,end_x,end_y)//用红色画出分针

end_x=mid_x+140*sin(th_sec)

end_y=mid_y-140*cos(th_sec)

setcolor(RED)

line(mid_x,mid_y,end_x,end_y)//同上,画出秒针,长为140

//画出钟盘上的刻度,刻度长20

line(140,240,160,240)//9点对应的大刻度

line(320,60,320,80)//12点对应的大刻度

line(500,240,480,240)//3点的刻度

line(320,420,320,400)//6点的刻度

line(410,395.7,400,378.4)//5点

line(475.7,330,458.4,320)//4点

line(475.7,150,458.4,160)//2点

line(410,84.3,400,101.6)//1点

line(230,84.3,240,101.6)//11点

line(164.3,150,181.6,160)//10点

line(164.3,330,181.6,320)//8点

line(230,395.7,240,378.4)//7点

sleep(BLUE)//这里应该是打错,停止一秒,应为sleep(1000)

cleardevice()//清除屏幕上的显示

}

closegraph()//关闭VGA屏幕,即返回文本方式

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11645360.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存