一个基于windows计划任务的小闹钟

最近工作忙,难免对女友疏于照料。于是写了一个小程序,提醒她睡觉。

我用bat编写了最初的功能,代码如下:

@echo off 
title %date% %time:~,8% 
mshta vbscript:msgbox("杨华秋!睡觉了!",36,"碎师傅说:")(window.close) 
mshta vbscript:msgbox("杨华秋!吃药了!",36,"碎师傅说:")(window.close) 

mshta 用来在批处理中调用其他语言的代码。这里我用它调用了vbs中的msgbox函数来生成一个弹出对话框。

这个bat运行的时候会弹出cmd的对话框,很不友好。我用一个vbs程序来调用它:

set ws=wscript.createobject("wscript.shell") 
ws.run "D:贴心小闹钟1.0\小闹钟1.0.bat /start",0

将它保存为vbs文件。这里的0表示隐藏窗口。

我需要有更多的功能,比如,我和女友是在今年的7月13号相恋。我希望可以做一个简单的统计。

我发现bat很难实现这个功能,vbs却可以轻松做到:

dim a 
a=datevalue("2014-7-13") 
msgbox "亲爱的换鱼,现在是"&now&+vbCrLf++vbCrLf+"碎师傅已经陪伴你"&datediff("d",a,now)&"天啦~,继续努力哦!",,"碎师傅说:"

datediff函数用来返回两个日期之间的时间间隔。

我希望小闹钟可以在每天的23:00运行,统计程序在每次开机的时候运行。于是我写了这样一个批处理:

mkdir D:\贴心小闹钟1.0 
copy "小闹钟1.0.bat" "D:贴心小闹钟1.0\小闹钟1.0.bat" 
copy "VBS调用.vbs" "D:贴心小闹钟1.0\VBS调用.vbs" 
copy "可爱的碎师傅.vbs" "D:贴心小闹钟1.0\可爱的碎师傅.vbs"

schtasks /create /tn "可爱的碎师傅" /tr d:\贴心小闹钟1.0\可爱的碎师傅.vbs /sc onlogon 
schtasks /create /tn "贴心小闹钟" /tr d:\贴心小闹钟1.0\VBS调用.vbs /sc daily /st 23:00:00 /ed 2014/12/31

pause

这个bat的作用显而易见。在执行一次之后,它会在D盘新建一个文件夹,并且将三个子程序拷贝进去。然后利用shctasks新建一个计划任务,约定启动时间。

onlogon是每次登陆的时候启动。我尝试使用onstart,效果不如意。

sc daily /st 23:00:00 /ed 2014/12/31表示每天的23:00启动,计划一直持续到2014/12/31。

这样一个温馨的小闹钟就做好了。

好的,下面是一个基于51单片机的电子钟闹钟的程序,使用Keil C编写: ```c #include <reg51.h> // 51单片机头文件 #define uchar unsigned char // 宏定义unsigned char为uchar uchar sec=0,min=0,hour=0,s=0,m=0,h=0; // 定义秒、分、时的变量 sbit beep=P2^3; // 蜂鸣器控制引脚 // 延时函数 void delay(unsigned int i) { while(i--); } // 闹钟函数 void alarm() { if(h==hour && m==min && s==sec) // 若当前时间等于闹钟时间,则开启蜂鸣器 { beep=0; // 蜂鸣器控制引脚输出低电平 delay(50000); // 延时 beep=1; // 蜂鸣器控制引脚输出高电平 } } // 主函数 void main() { TMOD=0x01; // 定时器0工作在模式1下 TH0=(65536-45872)/256; // 定时器0初值高位 TL0=(65536-45872)%256; // 定时器0初值低位 TR0=1; // 开启定时器0 ET0=1; // 允许定时器0中断 EA=1; // 开启总中断 while(1) // 循环读取时间 { alarm(); // 检测闹钟 P0=sec; // 显示秒 P1=0x7f; // 第一个数码管显示小时的十位 P2=0xfe; // 第二个数码管显示小时的个位 P1=0xbf; // 第三个数码管显示分钟的十位 P2=0xfd; // 第四个数码管显示分钟的个位 } } // 定时器0中断函数 void timer0() interrupt 1 { TH0=(65536-45872)/256; // 定时器0初值高位 TL0=(65536-45872)%256; // 定时器0初值低位 sec++; // 秒数加1 if(sec==60) // 当秒数达到60时,重置为0,分数加1 { sec=0; min++; } if(min==60) // 当分钟数达到60时,重置为0,小时数加1 { min=0; hour++; } if(hour==24) // 当小时数达到24时,重置为0 { hour=0; } } ``` 该程序使用定时器0来实现1秒钟的精确计时,并且通过数码管显示当前时间,同时检测闹钟是否需要响起。其中,闹钟的时间可以通过修改变量`h`、`m`、`s`来设置。另外,蜂鸣器的控制引脚连接在P2.3上,通过控制其输出电平来开启或关闭蜂鸣器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值