unsigned char rMinuteCount//分计时数
sbit IsOneSecondReach
sbit Pulse_Sec=P1^0
sbit Pulse_Min=P1^1
main()
{
rSecondCount=0
rMinuteCount=0
TH1=0x3C
TL1=0xAF//定时器50ms产生一次中断 (FFFF-3CAF)us
MOD = 0x10//定时器1工作于模式1,(用工作于模式2也可以,而且更 简便)
TR1=1//使能定时器1
ET1=1//开中断
EA=1//开全局中断
while(1)
{
if (IsOneSecondReach)
{
IsOneSecondReach = 0
//do something,如果一秒延时标志为1,则清除此标志,等待下次1秒,在此处
//执行需要执行的程序
}
}
}
/* 定时器50ms产生一次中断 */
void Timer(void) interrupt 3
{
/* 重新载入T1参数 */
TH1=0x3C
TL1=0xAF
/* 一秒累加 */
rSecondCount++//秒计时+1
if (rSecondCount==20) //1sec到,50ms*20
{
IsOneSecondReach = 1
}
}
//
脉冲宽度为50ms,如果有其他要求的话,修改T1参数和“秒分”的参数凑下就行了.
1、用sleep延时刷新并获取系统时间来显示。
2、例程:
#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
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)