用C语言怎么编辑一个闹钟?

用C语言怎么编辑一个闹钟?,第1张

呵呵,写了一个玩玩:

#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)//数据无效

}

}

//两个程序加起来就可以完成你要求的功能,有说明,你认真看一下吧。


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

原文地址: http://outofmemory.cn/yw/7871999.html

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

发表评论

登录后才能评论

评论列表(0条)

保存