试试下列程序:
;
ORG 0000H
SJMP BEGIN
ORG 000BH
MOV TH0, #3CH ;定时100ms
MOV TL0, #0B0H
DJNZ R7, E_T0
MOV R7, #5
SETB F0 ;每500ms置一
E_T0:RETI
;------------------------------------
BEGIN:
MOV TMOD, #01H ;T0定时方式1
MOV TH0, #3CH ;50ms@12MHz
MOV TL0, #0B0H ;100ms@6MHz
MOV R7, #5
SETB TR0
SETB ET0
SETB EA
;------------------------
M_LOOP:
MOV A, #255
L1:
MOV P1, A
JNB F0, $
CLR F0
CLR C
RLC A
JC L1
;------------------------
L2:
MOV P1, A
JNB F0, $
CLR F0
SETB C
RRC A
JNC L2
;------------------------
MOV R2, #8 ;全亮全灭8次
L3:
MOV P1, #0 ;全亮
JNB F0, $
CLR F0
MOV P1, #255;全灭
JNB F0, $
CLR F0
DJNZ R2, L3
;------------------------
JMP M_LOOP
;------------------------------------
END
本程序可实现:
L1-L8依次点亮----L1-L8依次熄灭----8个灯全亮全灭8次~循环 各时序间隔05s。
用处不大,打个比方你设计一个定时程序,在某某时间段停机,问题是PLC程序并不复杂,并且容易读出,终究能看懂并且修改你的程序。我就碰到过这样的一段程序,几个小时就读懂并且改掉了。
你设计了PLC程序加密,意义也不大,现在破解软件满天飞,挡是挡不住的。要说还是计算机程序或者单片机程序比较难破解。
我有个简单想法,从plc硬件入手,PLC在掉电以后,如果拔掉电池超过5分钟程序就丢失了。依据这个原理,找两只继电器,把电池的接线引出,接一只继电器的常闭触点,PLC的电源也引出接另外一只继电器的常闭触点,再找一个以天为单位的定时器来控制继电器,比方说你设置在365天启动继电器,电池继电器和PLC继电器同时动作,PLC和电池同时掉电了,你的线路如果设计的隐蔽,等设备维护人员查到问题,肯定就超过5分钟了,程序丢失,就达到目的了。
这种办法毕竟对设备有危险,突然停机可能造成不可预料的情况,不是很可取。所以最佳途径是签好合同每一个细节,如果对方抵赖,就通过法律手段解决。
最近在网上搜索了一些关于实现关机 重启 注销的文章 发现大多介绍的是VB NET 用API实现这些功能 且在XPsp 环境下无法正常的关机与注销 而对于VB NET 的介绍几乎没有 本文章所涉及的知识点有
用实现关机 重启 注销功能 通过使用textbox与timer控件的结合编写定时器功能 为你的程序加上超链接
本篇文章具有一定的基础性和广泛的实用性 相信能够给 初学者带来一定的帮助
本文所使用的编程环境是Microsoft Visual Studio 首先打开 Visual Studio 在文件 (File) 菜单上 单击新建项目 (New Project) 在新建项目 (New Project) 对话框的模板 (Templates) 窗格中 单击 Windows 应用程序 (Windows Application) 单击确定 (OK)
具体步骤如下
首先在Form 窗体上添加一个Label 控件属性text设置为:今天: 然后分别添加 个button控件name分别为button button button 它们的text属性分别为 关闭计算机(启动定时器) 注销 重新启动
图现在我们就需要为程序加上一个定时器了 这个定时器需要与textbox 控件相关联 输入正确时间格式后就可以启动定时功能了 然后我们需要在窗体上添加一个timer 一个textbox 控件 和一个RadioButton 控件 让它们保留默认值不变 其中 TextBox 控件的text属性设置为 : : RadioButton 控件text设置为 指定时间关机|时间格式 小时: 分钟: 秒如图 所示
图以上界面工作基本完成现在需要输入代码了
双击窗体进入常规 声明Public Class Form 事件中
CODE
Imports System Runtime InteropServicesImports Microsoft VisualBasicPublic Class Form _ 调用系统参数Friend Shared Function GetCurrentProcess() As IntPtrEnd Function
_Friend Shared Function OpenProcessToken(ByVal h As IntPtr
ByVal acc As Integer ByRef phtok As IntPtr) As BooleanEnd Function
_Friend Shared Function LookupPrivilegeValue(ByVal host As String
ByVal name As String ByRef pluid As Long) As BooleanEnd Function
_Friend Shared Function AdjustTokenPrivileges(ByVal htok As IntPtr
ByVal disall As Boolean ByRef newst As TokPriv Luid
ByVal len As Integer ByVal prev As IntPtr
ByVal relen As IntPtr) As BooleanEnd Function
_Friend Shared Function ExitWindowsEx(ByVal flg As Integer
ByVal rea As Integer) As BooleanEnd Function
Friend Const SE_PRIVILEGE_ENABLED As Integer = &H Friend Const TOKEN_QUERY As Integer = &H Friend Const TOKEN_ADJUST_PRIVILEGES As Integer = &H Friend Const SE_SHUTDOWN_NAME As String = SeShutdownPrivilege Friend Const EWX_LOGOFF As Integer = &H 注销计算机Friend Const EWX_SHUTDOWN As Integer = &H 关闭计算机Friend Const EWX_REBOOT As Integer = &H 重新启动计算机Friend Const EWX_FORCE As Integer = &H 关闭所有进程 注销计算机Friend Const EWX_POWEROFF As Integer = &H Friend Const EWX_FORCEIFHUNG As Integer = &H
_ 引用参数 Friend Structure TokPriv Luid Public Count As Integer Public Luid As Long Public Attr As IntegerEnd Structure
Private Shared Sub DoExitWin(ByVal flg As Integer) Dim xc As Boolean 判断语句 Dim tp As TokPriv Luid Dim hproc As IntPtr = GetCurrentProcess() 调用进程值 Dim htok As IntPtr = IntPtr Zero xc = OpenProcessToken(hproc TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY htok) tp Count =tp Luid =tp Attr = SE_PRIVILEGE_ENABLED xc = LookupPrivilegeValue(Nothing SE_SHUTDOWN_NAME tp Luid) xc = AdjustTokenPrivileges(htok False tp IntPtr Zero IntPtr Zero) xc = ExitWindowsEx(flg )End Sub
Public Shared Sub Reboot() DoExitWin((EWX_FORCE Or EWX_REBOOT)) 重新启动计算机End Sub
Public Shared Sub PowerOff() DoExitWin((EWX_FORCE Or EWX_POWEROFF)) 关闭计算机End Sub
Public Shared Sub LogoOff() DoExitWin((EWX_FORCE Or EWX_LOGOFF)) 注销计算机End Sub
Dim entTime As Object 保存输入时间Dim xianzaiTime As Object 保存实时时间Dim startTime As Object 保存开始定时时间
注销button 按钮输入code
Private Sub Button _Click(ByVal sender As System Object
ByVal e As System EventArgs) Handles Button ClickLogoOff() 注销计算机End Sub
双击重新启动按钮button 输入code
Private Sub Button _Click(ByVal sender As System Object
ByVal e As System EventArgs) Handles Button Click
Reboot()
End Sub
双击关闭计算机按钮button 输入code
Private Sub Button _Click(ByVal sender As System Object
ByVal e As System EventArgs) Handles Button Click startTime = TimeOfDay If Not IsDate(TextBox Text) Then 用IsData函数判断输入的时间格式MsgBox( 你所输入的不是时间格式 ! 错误 ) ElseentTime = TimeValue(TextBox Text) End If Timer Enabled = True 启动定时器 Me WindowState = System Windows Forms FormWindowState Minimized 最小化窗体
End Sub
如图
图
双击timer 控件如图
图
输入代码
Private Sub Timer _Tick(ByVal sender As System Object
ByVal e As System EventArgs) Handles Timer Tick xianzaiTime = TimeOfDay If RadioButton Checked Then
If DateDiff(Microsoft VisualBasic DateInterval Second
xianzaiTime entTime) < Then 用DateDiff函数判断是否到时间了
End IfEnd If
PowerOff() 关闭计算机End Sub
好了 基本上一个定时关机程序就完成了 接下来加一个超级链接吧!当然对于高手来说可能是废话 但是对于新手来说这也是必备的 这个超级链接当然是我们最喜欢的天极网开发频道了
先创建一个Label控件吧 把它托到窗体上 将text属性设置为天极网开发频道如图
图
接下来需要输入代码了 双击窗体Form
进入Public Class Form 事件
代码
Private Declare Function ShellExecute Lib shell dll
Alias ShellExecuteA (ByVal hwngnd As Integer
ByVal lpOperation As String ByVal lpFile As String
ByVal lpParameters As String ByVal lpDirectory As String
ByVal nShowCmd As Integer) As Integer
如图
图
双击刚才添加的label属性text:(天极网开发频道)中输入以下代码
Private Sub Label _Click(ByVal sender As System Object
ByVal e As System EventArgs) Handles Label ClickShellExecute( open CStr( ) CStr( ) )
End SubEnd Class
OK!全部搞定 按F 键运行如图 所示 选择相应选项后点击(关闭计算机启动定时器按钮)就可以了 现在程序将按照你所设定的时间而启动关闭计算机选项
lishixinzhi/Article/program/net/201311/12366
微信可以利用蜗牛传书小程序给好友定时发信息;方法是;以苹果手机 *** 作为例:
第一步:点击“小程序”,如下图所示。
第二步:键入“蜗牛传书”并点击“搜索”,如下图所示。
第三步:点击“蜗牛传书”小程序,如下图所示。
第四步:点击“创建”,如下图所示。
第五步:键入要发的信息标题、发送的日期和信息内容并点击保存,如下图所示。
第六步:点击“发送”,如下图所示。
第七步:最后选择发送的好友并点击发送,如下图所示。这样就可以在特定时间给好友发微信信息了。
给你改了个,有空到我空间转转:
/
C51顺序控制程序:
注意:由预处理生成的定时初值有一定的局限性,调试过程中请参考计算工具得出的结果
请到我空间下载“51定时器计算器”
2009-10-02 by yingang2009
/
#include<reg51h>
//
#define Byte unsigned char
#define Word unsigned int
#define DWord unsigned long
//
#define Speed 12 //12 MHz(注意更高就不能一次得到50ms定时了)
#define TTTT 50000 //50ms
#define TH1_Init_Val (65536-Speed TTTT / 12)/256
#define TL1_Init_Val (65536-Speed TTTT / 12)%256
sbit L1 = P1^0 ;
sbit L2 = P1^1 ;
sbit L3 = P1^2 ;
sbit L4 = P1^3 ;
sbit L5 = P1^4 ;
sbit L6 = P1^5 ;
sbit L7 = P1^6 ;
sbit L8 = P1^7 ;
//模块变量
bit flag1s ;
//T1初始化
void T1_Init()
{
TMOD= 0x11;
TH1=TH1_Init_Val ;
TL1=TL1_Init_Val ;
ET1 =1;
EA =1;
TR1 =1;
}
/LED主进程
第一秒钟L1,L3亮,
第二秒钟L2,L4亮,
第三秒钟L5,L7亮,
第四秒钟L6,L8亮,
第六秒钟L2,L4,L6,L8亮,
第七秒钟八个二极管全亮,
第八秒钟全灭
[可以将P0口各时刻的状态做个表格,这里就不做了]
/
void Led_Run()
{
static Byte step;
if (!flag1s)return; //接收定时器“flag1s”消息,没到1s返回
flag1s = 0; //1s到则开始工作
step++;
switch(step) //以1s为间隔进行顺序控制
{
case 1:
P1 =0xff; //先熄灭
L1 = 0;
L3 = 0;
break;
case 2:
P1 =0xff; //先熄灭
L2 = 0;
L4 = 0;
break;
case 3:
P1 =0xff; //先熄灭
L5 = 0;
L7 = 0;
break;
case 4:
P1 =0xff; //先熄灭
L6 = 0;
L8 = 0;
break;
case 5:
//do nothing 维持第4秒内容
break;
case 6:
P1 =0xff; //先熄灭
L2 = 0;
L4 = 0;
L6 = 0;
L8 = 0;
break;
case 7:
P1 = 0x00; //全亮
break;
case 8:
P1 =0xff; //全灭
step = 0; //步骤复位
break;
default:
step = 0; //具有一定的抗干扰意义
break;
}
}
//主程序
void main()
{
T1_Init();
while(1)
{
Led_Run();
}
}
void ISR_T1() interrupt 3 using 2 //定时器1中断服务程序50ms
{
static Byte cnt1s;
TH1=TH1_Init_Val ;
TL1=TL1_Init_Val ; //reload val
if (++cnt1s >= 20)
{
cnt1s = 0;
flag1s = 1;
}
}
多简单的事啊,我贴一个AVR采用定时器0计时的,你参考一下吧。
#pragma interrupt_handler timer0_ovf_isr:10 //TIMER0 定时2ms中断
void timer0_ovf_isr(void)
{
TCNT0 = 0xD9; //reload counter value
timer2ms++;
if(timer2ms >= 5)
{
timer2ms = 0;
timer10ms ++;
systimer10ms ++;
if(systimer10ms >= 22) //内部1M晶振
{
systimer10ms = 0;
timer1s ++;
}
}
也就是说。你另外起一个变量。与响应时间对照。你别说9999分钟。你就是9999年都可以做到。不理解时加我QQ问我吧。
以上就是关于51单片机定时器汇编程序全部的内容,包括:51单片机定时器汇编程序、如何让自己写的程序每天定时运行、VB.NET 2005编写定时关机程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)