时钟程序(C语言)怎么写
具体代码如下:
#includegraphics.h
#includemath.h
#includedos.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;
}
c语言时钟代码
#includegraphics.h /* 引入graphic.h */
#includemath.h /* 引入math.h */
#includedos.h /* 引入dos.h */
#define pi 3.1415926 /*定义pi=3.14159*/
#define X(a,b,c) x=a*cos(b*c*pi/180-pi/2)+300;
#define Y(a,b,c) y=a*sin(b*c*pi/180-pi/2)+240;
#define d(a,b,c) X(a,b,c);Y(a,b,c);line(300,240,x,y) /*定义……*/
void init() /*初始化程序*/
{int i,l,x1,x2,y1,y2; /*定义……*/
setbkcolor(1); /*设置颜色*/
circle(300,240,200); /*作园*/
circle(300,240,205);
circle(300,240,5);
for(i=0;i60;i++) /*循环(算时间)*/
{if(i%5==0) l=15;
else l=5;
x1=200*cos(i*6*pi/180)+300;
y1=200*sin(i*6*pi/180)+240;
x2=(200-l)*cos(i*6*pi/180)+300;
y2=(200-l)*sin(i*6*pi/180)+240;
line(x1,y1,x2,y2);
}
}
main()
{
int x,y;
int gd=VGA,gm=2;
unsigned char h,m,s; /*定义*/
struct time t[1];
initgraph(gd,gm,”d:\\tc”);
init();
setwritemode(1);
gettime(t);
h=t[0].ti_hour;
m=t[0].ti_min;
s=t[0].ti_sec; /*定义时分秒*/
setcolor(7); /*设置颜色*/
d(150,h,30);
setcolor(14);
d(170,m,6);
setcolor(4);
d(190,s,6);
while(!kbhit()) /*获取键盘相应*/
{while(t[0].ti_sec==s)
gettime(t); /*C语言中得到时间的函数*/
sound(400); /*计算时间……*/
delay(70);
sound(200);
delay(30);
nosound();
setcolor(4);
d(190,s,6);
s=t[0].ti_sec;
d(190,s,6);
if (t[0].ti_min!=m)
{
setcolor(14);
d(170,m,6);
m=t[0].ti_min;
d(170,m,6);
}
if (t[0].ti_hour!=h)
{ setcolor(7);
d(150,h,30);
h=t[0].ti_hour;
d(150,h,30);
sound(1000);
delay(240);
nosound();
delay(140);
sound(2000);
delay(240);
nosound();
}
}
getch(); /*设置空格后退出*/
closegraph();
}
具体的。。就是套用用几个函数算时间。。
不要对这种很长的东西害怕,其实大部分都是在画这个钟~
加油哦~
单片机C语言该怎么编写时钟程序?
这个是简单的数码管时钟显示如果有需要,我写过比较完善的1602显示时钟.显示控制年月日等等.#include\x0d\x0asbit Begin=P2^0;\x0d\x0asbit Hour=P2^1;\x0d\x0asbit Mus=P2^2;\x0d\x0asbit End=P2^3;\x0d\x0aunsigned char code Tab[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,\x0d\x0a 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};\x0d\x0aunsigned char code num[]={ 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};\x0d\x0aunsigned char Time[]={0,0,16,0,0,16,0,0};\x0d\x0aunsigned char a;\x0d\x0aunsigned int x,m,th;\x0d\x0avoid init()\x0d\x0a{\x0d\x0a TMOD=0x01;\x0d\x0a TH0=(65535/50000)/256;\x0d\x0a TL0=(65535/50000)%256;\x0d\x0a EA=1;\x0d\x0a ET0=1;\x0d\x0a TR0=1;\x0d\x0a}\x0d\x0avoid delay(unsigned int z) \x0d\x0a{ \x0d\x0a unsigned int x,y;\x0d\x0a for(x=z;x0;x–)\x0d\x0a for(y=110;y0;y–); \x0d\x0a}\x0d\x0aunsigned char keyboard()\x0d\x0a{\x0d\x0a if(Begin==0){\x0d\x0a delay(5);\x0d\x0a if(Begin==0)\x0d\x0a return 1;\x0d\x0a }\x0d\x0a if(Hour==0){\x0d\x0a delay(30);\x0d\x0a if(Hour==0)\x0d\x0a return 2;\x0d\x0a }\x0d\x0a if(Mus==0)\x0d\x0a return 3;\x0d\x0a if(End==0)\x0d\x0a return 4;\x0d\x0a}\x0d\x0avoid display()\x0d\x0a{\x0d\x0a unsigned char i; for(i=0;i=20)\x0d\x0a {\x0d\x0a x++;\x0d\x0a m=x;\x0d\x0a th=m/3600; //设置小时\x0d\x0a Time[0]=th/10;\x0d\x0a Time[1]=th%10;\x0d\x0a m=m%3600; Time[2]=16; th=m/60; //设置分钟\x0d\x0a Time[3]=th/10;\x0d\x0a Time[4]=th%10;\x0d\x0a m=m%60; Time[5]=16; th=m; //设置秒\x0d\x0a Time[6]=th/10;\x0d\x0a Time[7]=th%10; a=0;\x0d\x0a }\x0d\x0a}
求单片机C语言时钟程序~~~
#include AT89X52.H unsigned char dispbitcnt; //数码管位码扫描变量
unsigned char second; //秒变量
unsigned char minite; //分变量
unsigned char hour; //时变量
unsigned char tcnt; //秒信号产生变量
unsigned char mstcnt; //扫描时间变量 const unsigned char dispcode[10]={0xc0,0xf9,0xa4,0xb0,0x99,br 0x92,0x82,0xf8,0x80,0x90};
//0123456789段码
const unsigned char dispbitcode[6]={0xfe,0xfd,0xfb,0xf7,br 0xef,0xdf};
//123456位码
unsigned char dispbuf[6]={0,0,0,0,0,0};
//缓冲数组
//**************TMR0中断数码管扫描程序*********************
void Timer0() interrupt 1
{ P2=dispcode[dispbuf[dispbitcnt]];//段码
P1=dispbitcode[dispbitcnt];//位码
dispbitcnt++;
if(dispbitcnt==6)
{dispbitcnt=0;br }
tcnt++; //中断产生秒信号
if(tcnt==244)
{tcnt=0;br second++;br if(second==60)br {second=0;br minite++;br if(minite==60)br {minite=0;br hour++;br if(hour==24)br {hour=0;br }
}
}
dispbuf[4]=second%10; //得秒钟的低位,送缓冲数组
dispbuf[5]=second/10; //得秒钟的高位,送缓冲数组
dispbuf[2]=minite%10; //得分钟的低位,送缓冲数组
dispbuf[3]=minite/10; //得分钟的高位,送缓冲数组
dispbuf[0]=hour%10; //得时钟的低位,送缓冲数组
dispbuf[1]=hour/10; //得时钟的高位,送缓冲数组
}
TMOD=0x01;
TL0=0x10;
TH0=0xf0; }
///****************1ms延时程序******************
void delay_1ms(unsigned char i)
{
unsigned char j;
for(i=0;i144;i++)
for(j=0;j144;j++);
} ///****************按键检测*********************
void key_scan(void)
{
while(1)
{
if(P3_0==0)
{
delay_1ms(20);
if(P3_0==0)
{second++;br if(second==60)br {second=0;br }
dispbuf[4]=second%10;
dispbuf[5]=second/10;
while(P3_0==0);
}
}
if(P3_1==0)
{
delay_1ms(20);
if(P3_1==0)
{
minite++;
if(minite==60)
{minite=0;br }
dispbuf[2]=minite%10;
dispbuf[3]=minite/10;
while(P3_1==0);
}
}
if(P3_2==0)
{
delay_1ms(20);
if(P3_2==0)
{
hour++;
if(hour==24)
{
hour=0;
}
}
dispbuf[0]=hour%10;
dispbuf[1]=hour/10;
while(P3_2==0);
}
}
}
//*************主程序********************
void main(void)
{
TMOD=0x01;TL0=0x10;
TH0=0xf0;
while(1)
{
dispbitcnt=0;P1=0x00; //开段码
P2=0x00; //开位码
delay_1ms(200); //延时
delay_1ms(200); //延时
delay_1ms(200); //延时
delay_1ms(200); //延时
P2=0xff; //关位码EA=1;
ET0=1;
TR0=1;
key_scan();
}
}