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

Python026

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

这个是简单的数码管时钟显示如果有需要,我写过比较完善的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\x0a0x7f,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=zx>0x--)\x0d\x0a for(y=110y>0y--)\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=0i=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}

#include<graphics.h>/* 引入graphic.h */

#include<math.h> /* 引入math.h */

#include<dos.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=0i<60i++) /*循环(算时间)*/

{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()

}

具体的。。就是套用用几个函数算时间。。

不要对这种很长的东西害怕,其实大部分都是在画这个钟~

加油哦~

#include <graphics.h>

#include <conio.h>

#include <math.h>

void Draw(int hour, int minute, int second)

{

     double a_hour, a_min, a_sec       // 时、分、秒针的弧度值

     int x_hour, y_hour, x_min, y_min, x_sec, y_sec // 时、分、秒针的末端位置

     int x_hour1,y_hour1,x_min1,y_min1,x_sec1,y_sec1

     // 计算时、分、秒针的弧度值

     a_sec = second * 2 * PI / 60

     a_min = minute * 2 * PI / 60 

     a_hour= hour * 2 * PI / 12 + a_min / 12

     // 计算时、分、秒针的首末端位置

     x_sec = 320 + (int)(120 * sin(a_sec))

     y_sec = 240 - (int)(120 * cos(a_sec))

     x_min = 320 + (int)(100 * sin(a_min))

     y_min = 240 - (int)(100 * cos(a_min))

     x_hour= 320 + (int)(70 * sin(a_hour))

     y_hour= 240 - (int)(70 * cos(a_hour))

     x_sec1= 320 - (int)(15   * sin(a_sec))

     y_sec1= 240 + (int)(15   * cos(a_sec))

     x_min1= 320 - (int)(10   * sin(a_min))

     y_min1= 240 + (int)(10   * cos(a_min))

     x_hour1= 320 - (int)(5 * sin(a_hour))

     y_hour1= 240 + (int)(5 * cos(a_hour))

     // 画时针

     setlinestyle(PS_SOLID, NULL, 7)

     setcolor(WHITE)

     line(x_hour1, y_hour1, x_hour, y_hour)

     // 画分针

     setlinestyle(PS_SOLID, NULL, 4)

     setcolor(LIGHTGRAY)

     line(x_min1, y_min1, x_min, y_min)

     // 画秒针

     setlinestyle(PS_SOLID, NULL, 2)

     setcolor(RED)

     line(x_sec1, y_sec1, x_sec, y_sec)

}

void main()

{

     initgraph(640, 480)    // 初始化 640 x 480 的绘图窗口

     // 绘制一个简单的表盘

     circle(320, 240, 2)

     circle(320, 240, 60)

     circle(320, 240, 160)

     outtextxy(296, 330, "   竹斌")

     int x,y

     for(int i=0i<12i++)

     {

         x=320+(int)(140*sin(30*i*2*PI/360))

         y=240-(int)(140*cos(30*i*2*PI/360))

switch(i)

         {

         case 0:outtextxy(x-5,y-5,"12")break

         case 1:outtextxy(x-5,y-5,"1")break

         case 2:outtextxy(x-5,y-5,"2")break

         case 3:outtextxy(x-5,y-5,"3")break

         case 4:outtextxy(x-5,y-5,"4")break

         case 5:outtextxy(x-5,y-5,"5")break

         case 6:outtextxy(x-5,y-5,"6")break

         case 7:outtextxy(x-5,y-5,"7")break

         case 8:outtextxy(x-5,y-5,"8")break

         case 9:outtextxy(x-5,y-5,"9")break

         case 10:outtextxy(x-5,y-5,"10")break

         case 11:outtextxy(x-5,y-5,"11")break

         }

     }

     // 设置 XOR 绘图模式

     setwritemode(R2_XORPEN) // 设置 XOR 绘图模式

     //画刻度

     int a,b,a1,b1,n=0

     for(n=0n<60n++)

     {

     a=320+(int)(160 * sin(n*2*PI/60))

     b=240-(int)(160 * cos(n*2*PI/60))

     a1=320+(int)(150 * sin(n*2*PI/60))

     b1=240-(int)(150 * cos(n*2*PI/60))

     if(n%5==0)

         setlinestyle(PS_SOLID,NULL,5)

     else

         setlinestyle(PS_SOLID,NULL,1)

     line(a1,b1,a,b)

     }

     // 绘制表针

     SYSTEMTIME ti      // 定义变量保存当前时间

     while(!kbhit())      // 按任意键退出钟表程序

     {

          GetLocalTime(&ti)         // 获取当前时间

          Draw(ti.wHour, ti.wMinute, ti.wSecond)    // 画表针

          Sleep(1000)          // 延时 1 秒

          Draw(ti.wHour, ti.wMinute, ti.wSecond)    // 擦表针(擦表针和画表针的过程是一样的)

     }

     closegraph()      // 关闭绘图窗口

}