#include <stdio.h>
#include <windows.h>
#include <winbase.h>
int main(int argc, char *argv[])
{
SYSTEMTIME time
SYSTEMTIME clock
GetLocalTime(&time)
printf("当前时间为:%2d:%2d:%2d\n",time.wHour,time.wMinute,time.wSecond)
printf("请设定闹钟时间:\n")
printf("时:")
scanf("%2d",&clock.wHour)
printf("分:")
scanf("%2d",&clock.wMinute)
while(1)
{
Sleep(1000)
GetLocalTime(&time)
if((time.wHour==clock.wHour)&&(time.wMinute==clock.wMinute))
{
printf("\a\a\a时间到!!!")
break
}
}
return 0
}
用C语言实现的闹钟程序#include
#include
#include
#include
#include
void
main()
{
int
gd=DETECT,gm
int
x=320,y=240,r=200,i,h,m,s,thetamin,thetasec
struct
time
t
char
n[12][3]={"3","2","1","12","11","10","9","8","7","6","5","4"}
initgraph(&gd,&gm,"g:\\tc\\bgi")//图形驱动器路径,根据自己的系统更换。
circle(x,y,210)
setcolor(4)
settextstyle(4,0,5)
for(i=0i<12i++)
{
if(i!=3)
outtextxy(x+(r-14)*cos(M_PI/6*i)-10,y-(r-14)*sin(M_PI/6*i)-26,n[i])
else
outtextxy(x+(r-14)*cos(M_PI/6*i)-20,y-(r-14)*sin(M_PI/6*i)-26,n[i])
}
gettime(&t)
printf("The
current
time
is:
%2d:%02d:%02d.%02d\n",t.ti_hour,
t.ti_min,
t.ti_sec,
t.ti_hund)
while(!kbhit())
{
setcolor(5)
setfillstyle(1,5)
circle(x,y,10)
floodfill(x,y,5)
gettime(&t)
if(t.ti_min!=m)
{
setcolor(0)
line(x,y,x+(r-60)*cos(thetamin*(M_PI/180)),y-(r-60)*sin(thetamin*(M_PI/180
)))
circle(x+(r-80)*cos(thetamin*(M_PI/180)),y-(r-80)*sin(thetamin*(M_PI/180))
,10)
line(x,y,x+(r-110)*cos(M_PI/6*h-((m/2)*(M_PI/180))),y-(r-110)*sin(M_PI/6*h
-((m/2)*(M_PI/180))))
circle(x+(r-130)*cos(M_PI/6*h-((m/2)*(M_PI/180))),y-(r-130)*sin(M_PI/6*h-(
(m/2)*(M_PI/180))),10)
}
if(t.ti_hour>12)
t.ti_hour=t.ti_hour-12
if(t.ti_hour<4)
h=abs(t.ti_hour-3)
else&n
bsp
h=15-t.ti_hour
m=t.ti_min
if(t.ti_min<=15)
thetamin=(15-t.ti_min)*6
else
thetamin=450-t.ti_min*6
if(t.ti_sec<=15)
thetasec=(15-t.ti_sec)*6
else
thetasec=450-t.ti_sec*6
setcolor(4)
line(x,y,x+(r-110)*cos(M_PI/6*h-((m/2)*(M_PI/180))),y-(r-110)*sin(M_PI/6*h
-((m/2)*(M_PI/180))))
circle(x+(r-130)*cos(M_PI/6*h-((m/2)*(M_PI/180))),y-(r-130)*sin(M_PI/6*h-(
(m/2)*(M_PI/180))),10)
line(x,y,x+(r-60)*cos(thetamin*(M_PI/180)),y-(r-60)*sin(thetamin*(M_PI/180
)))
circle(x+(r-80)*cos(thetamin*(M_PI/180)),y-(r-80)*sin(thetamin*(M_PI/180))
,10)
setcolor(15)
line(x,y,x+(r-70)*cos(thetasec*(M_PI/180)),y-(r-70)*sin(thetasec*(M_PI/180
)))
delay(1000)
setcolor(0)
line(x,y,x+(r-70)*cos(thetasec*(M_PI/180)),y-(r-70)*sin(thetasec*(M_PI/180
)))
}
}
该程序已在Turbo
C++3.0中通过编译.
//*********************************************************//实现功能:本程序实现在P1口模拟一个流水灯程序
//*********************************************************
#include <reg51.h>
#define p_out P1 //宏定义输出的i/o口为P1
//******************时间延迟函数**********************
//描 述:用指令实现延时一段时间
//入口参数:int i,为时间延迟参数
//****************************************************
void delay_time(int i)
{
while(i)
i--
}
//******************主函数***************************
//描 述:实现在P1口模拟一个流水灯程序
//****************************************************
void main(void)
{unsigned char i=0 //初始化一个局部变量为0
p_out=0xff //初始化将要输出的i/o口,输出高电平,熄灭所有灯
while(1)
{
for(i=0i<8i++)
{
p_out=~(1<<i)//点亮一个灯,
delay_time(50000) //延迟一段时间
p_out=0xff//熄灭所有灯
}
}
}
//**************************************
//****************************************************
//实现功能:把键盘输入的键盘码,用led显示出来
//****************************************************
#include <reg51.h>
#define p_key P1
#define led_date P0
#define choose_p P2
unsigned char change(unsigned char i)
unsigned int display_num=0
//******************时间延迟函数**********************
//描 述:用指令实现延时一段时间
//入口参数:int i,为时间延迟参数
//****************************************************
void delay_time(int i)
{
while(i)
i--
}
//******************按键扫描函数**********************
//描述:对4*4键盘进行扫描,程序只适合4*4键盘使用,
// 键盘占用一组完整的i/o口,在使用这个程序前
// 要宏定义p_key为用户实际连接键盘的i/o口
// #define p_key Pn//(n=0、1、2、3)
//返回参数:若有检测到按键就返回按键的编号,否则返回0xff
//****************************************************
unsigned char read_key(void)
{
unsigned char j,key,key_buf=0
p_key=0xff
//检测是否有建按下//
p_key=0xf0
key=p_key
if(key==0xf0)
{
return(0xff)//没按键按下,返回0xff
}
//有按下,延时去抖//
delay_time(5000)
//确认是否有建按下//
p_key=0xf0
key=p_key
if(key==0xf0)
{
return(0xff)//没按键按下,返回0xff
}
//真的有按键按下,扫描是哪一行有按键按下//
for(j=0j<4j++)
{key=p_key&(0x10<<j)
if (key)
{
key=p_key
}
else
{
key_buf=j*4
p_key=~(0x10<<j)//第j行的按键按下了,第j行输出0,其他的i/o口输出1
//扫描是第j行的哪个按键按下//
for(j=0j<4j++)
{
key=p_key&(1<<j)
if (key)
{
key=p_key
}
else
{
key_buf+=j
return(key_buf)//扫描到按键的确定位置,返回按键的编号
}
}
}
}
//没扫描到按键,//
return(0xff)
}
//***************七段数码管显示函数*******************
//描述:对四位的扫描型七段数码管进行扫描显示,在使用
// 前要定义一个全局变量display_num
// unsigned int display_num
//入口参数:unsigned int num,要显示的数字(0-9999)
//****************************************************
void display(unsigned int num)
{
if(num<10000)
{
display_num=num
}
choose_p|=3//先关显示
led_date=change(display_num/1000)//得到千位的数字,并转换成七段码型
choose_p&=0xfe//选通千位
delay_time(50)//延时一段时间
choose_p|=1//关显示
display_num=display_num%1000
led_date=change(display_num/100)//得到百位的数字,并转换成七段码型
choose_p&=0xfd//选通百位
delay_time(50)//延时一段时间
choose_p|=2//关显示
display_num=display_num%100
led_date=change(display_num/10)//得到十位的数字,并转换成七段码型
choose_p&=0xfb//选通十位
delay_time(50)//延时一段时间
choose_p|=4//关显示
led_date=change(display_num%10)//得到个位的数字,并转换成七段码型
choose_p&=0xf7//选通十位
delay_time(50)//延时一段时间
choose_p|=8//关显示
}
//****************数字-码型转换函数*******************
//描述:把数字转换成七段码型,此程序仅配合共阳的七
// 段数码管使用
//入口参数:unsigned char i,要转换的数字(0-9),
//返回参数:转换后的七段码型,0xff表示转换失败
//****************************************************
unsigned char change(unsigned char i)
{
switch(i)
{
case 0:
return(0xc0)//0的七段码型
case 1:
return(0xf9)//1的七段码型
case 2:
return(0xa4)//2的七段码型
case 3:
return(0xb0)//3的七段码型
case 4:
return(0x99)//4的七段码型
case 5:
return(0x92)//5的七段码型
case 6:
return(0x82)//6的七段码型
case 7:
return(0xf8)//7的七段码型
case 8:
return(0x80)//8的七段码型
case 9:
return(0x90)//9的七段码型
default:
return(0xff)//转换失败
}
}
//*********************主函数*************************
//描述:把键盘输入的键盘码,用led显示出来
//****************************************************
int main(void)
{unsigned char i
while(1)
{
i=read_key()//扫描键盘
if(i<16)
display((unsigned int)i)//有效的键盘值
else
display(0xffff)//数据无效
}
}
//两个程序加起来就可以完成你要求的功能,有说明,你认真看一下吧。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)