关于单片机程序限制使用时间

时间:2021-10-29 19:47:52
单片机程序能否可以设置程序的使用时间?各位高手帮忙解答!谢谢

比如说  某个程序只能运行200个小时   而后就不再运行了

是否可以实现?

20 个解决方案

#1


简单的情况下,你把运行的时间累积,加密后存到E2PROM中,定时检查(适当做点迷魂阵,以免发现),这样就成了。需要警告的是,如果销售这种产品是违法的,可能被合法用户控告,如果造成损失,后果比较严重。

#2


同意LS,不要做违法的事。实现可以的,有定时器。

#3


最好有一个不可以让用户更改的时钟服务器

然后强制更新后,比对即可

#4


让定时器工作在方式1 设置一个全局变量(定时器溢出次数) 计算好溢出次数与时间的关系 当为200小时的时候 用if做判断 if成立时可以调用字函数 这个子函数就写成while(1);  让程序死循环等待就OK 

#5


楼主切莫作孽啊

#6


引用 1 楼 bjtea 的回复:
简单的情况下,你把运行的时间累积,加密后存到E2PROM中,定时检查(适当做点迷魂阵,以免发现),这样就成了。需要警告的是,如果销售这种产品是违法的,可能被合法用户控告,如果造成损失,后果比较严重。


技术上不难,后果可能很严重 

#7


引用 4 楼 skylinehyk 的回复:
让定时器工作在方式1 设置一个全局变量(定时器溢出次数) 计算好溢出次数与时间的关系 当为200小时的时候 用if做判断 if成立时可以调用字函数 这个子函数就写成while(1); 让程序死循环等待就OK


大家都误会了   只是做的东西需要这样的功能   

#8


比如下面一段程序,,,,怎么控制使用200小时使用时间:

#include<reg52.h>
//#define uint unsigned int 
//#define uchar unsigned char 
sbit key1=P1^1;   //停止指令输入点
sbit key2=P1^2;
sbit key3=P1^3;
sbit key4=P1^4;
sbit key5=P1^5;
sbit key6=P1^6;

sbit ssr1=P2^0;
sbit ssr2=P2^1;
sbit ssr3=P2^2;
sbit ssr4=P2^3;
//void delay(uint z);
void main ()
{
P1=0xff;
P2=0xff;
while(1)
{
if(P1==0xfd)
   P2=0xff; //所有继电器断开
else
P2=0xff;

if(P1==0xf9)
   P2=0xfe;
else
P2=0xff;

if(P1==0xfb)
  P2=0x7d;
else
P2=0xff;

if(P1==0xf3)
   P2=0xfc;
else
P2=0xff;

if(P1==0xf7)
   P2=0xfb;
else
P2=0xff;

if(P1==0xe7)
   P2=0xfa;
else
P2=0xff;

if(P1==0xef)
   P2=0xf9;
else
P2=0xff;

if(P1==0xcf)
   P2=0xf8;
else
P2=0xff;

if(P1==0xdf)
   P2=0xf8;    //重复上一步动作
else
P2=0xff;

if(P1==0x9f)
   P2=0xf7   ,  P0=0xef;    //JAM 电线报警启动
else
P2=0xff   ,  P0=0xff;
/* {
LED=0;
delay(40);
LED=1;
delay(6000);
} */
}
}
/*void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}*/

#9


设置定时器T0(或T1)工作在方式1下,允许定时中断;定时时间可以是50毫秒。设置秒,分,小时计数器;每20次中断为1秒,每60秒分钟计数器加1,每60分小时计数器加1。等小时计数器达到200,退出相关程序即可。

#10


引用 9 楼 bjtea 的回复:
设置定时器T0(或T1)工作在方式1下,允许定时中断;定时时间可以是50毫秒。设置秒,分,小时计数器;每20次中断为1秒,每60秒分钟计数器加1,每60分小时计数器加1。等小时计数器达到200,退出相关程序即可。


能具体一些吗?热泪感谢! 程序在上面

#11


引用 10 楼 wheatyilong 的回复:
引用 9 楼 bjtea 的回复:
设置定时器T0(或T1)工作在方式1下,允许定时中断;定时时间可以是50毫秒。设置秒,分,小时计数器;每20次中断为1秒,每60秒分钟计数器加1,每60分小时计数器加1。等小时计数器达到200,退出相关程序即可。

能具体一些吗?热泪感谢! 程序在上面

加起来也没有几行,你先写个初步,调试一下,有问题大家替你改。

#12


引用 11 楼 bjtea 的回复:
引用 10 楼 wheatyilong 的回复:
引用 9 楼 bjtea 的回复:
设置定时器T0(或T1)工作在方式1下,允许定时中断;定时时间可以是50毫秒。设置秒,分,小时计数器;每20次中断为1秒,每60秒分钟计数器加1,每60分小时计数器加1。等小时计数器达到200,退出相关程序即可。

能具体一些吗?热泪感谢! 程序在上面

加起来也没有几行,你先写个初步,调试一下,有问……


能帮我写一下吗?拜托了   这方面我有点小白   。。。万分感激

#13


51机的程序保密性最差了

如果没有外部可读写ROM,是无法实现的。

#14


这个就是最简单的逻辑炸弹。。。。。。。

#15


使用带内部flash的单片机可以实现,但是一定要小心使用。

#16


内部带EEPROM的单片机都可以。要是定时器都玩不转。建议改行吧!这不是什么前途光明的职业!

#17


……看来这里的很多人不知道这世界上有一批专门拖欠工程款的无良公司啊……
程序可正常运行半年/一年,工程款结清后解除时间限制。
对付无赖就得用无赖招数。

#18


哪位达人可以帮助写一下呢?谢谢了

#19


原理都讲清楚了,程序还是自己写吧。我这里再简单的说一下,首先要设置一个定时器,利用这个定时器计时,无非是定义毫秒、秒、分、时、日、月、年等,你要多长时间都可以,时间到了按要求处理就行了。如果是功能性的,直接用RAM定义这些变量就行了,只不过是断电重启后,时间重新计算。如果不是,只是记录运行时间,则把时间记录到E2PROM中或者FLASH存储器中,掉电也不影响。

#20


引用 19 楼 iamlaosong 的回复:
原理都讲清楚了,程序还是自己写吧。我这里再简单的说一下,首先要设置一个定时器,利用这个定时器计时,无非是定义毫秒、秒、分、时、日、月、年等,你要多长时间都可以,时间到了按要求处理就行了。如果是功能性的,直接用RAM定义这些变量就行了,只不过是断电重启后,时间重新计算。如果不是,只是记录运行时间,则把时间记录到E2PROM中或者FLASH存储器中,掉电也不影响。


谢谢楼上的  !

#1


简单的情况下,你把运行的时间累积,加密后存到E2PROM中,定时检查(适当做点迷魂阵,以免发现),这样就成了。需要警告的是,如果销售这种产品是违法的,可能被合法用户控告,如果造成损失,后果比较严重。

#2


同意LS,不要做违法的事。实现可以的,有定时器。

#3


最好有一个不可以让用户更改的时钟服务器

然后强制更新后,比对即可

#4


让定时器工作在方式1 设置一个全局变量(定时器溢出次数) 计算好溢出次数与时间的关系 当为200小时的时候 用if做判断 if成立时可以调用字函数 这个子函数就写成while(1);  让程序死循环等待就OK 

#5


楼主切莫作孽啊

#6


引用 1 楼 bjtea 的回复:
简单的情况下,你把运行的时间累积,加密后存到E2PROM中,定时检查(适当做点迷魂阵,以免发现),这样就成了。需要警告的是,如果销售这种产品是违法的,可能被合法用户控告,如果造成损失,后果比较严重。


技术上不难,后果可能很严重 

#7


引用 4 楼 skylinehyk 的回复:
让定时器工作在方式1 设置一个全局变量(定时器溢出次数) 计算好溢出次数与时间的关系 当为200小时的时候 用if做判断 if成立时可以调用字函数 这个子函数就写成while(1); 让程序死循环等待就OK


大家都误会了   只是做的东西需要这样的功能   

#8


比如下面一段程序,,,,怎么控制使用200小时使用时间:

#include<reg52.h>
//#define uint unsigned int 
//#define uchar unsigned char 
sbit key1=P1^1;   //停止指令输入点
sbit key2=P1^2;
sbit key3=P1^3;
sbit key4=P1^4;
sbit key5=P1^5;
sbit key6=P1^6;

sbit ssr1=P2^0;
sbit ssr2=P2^1;
sbit ssr3=P2^2;
sbit ssr4=P2^3;
//void delay(uint z);
void main ()
{
P1=0xff;
P2=0xff;
while(1)
{
if(P1==0xfd)
   P2=0xff; //所有继电器断开
else
P2=0xff;

if(P1==0xf9)
   P2=0xfe;
else
P2=0xff;

if(P1==0xfb)
  P2=0x7d;
else
P2=0xff;

if(P1==0xf3)
   P2=0xfc;
else
P2=0xff;

if(P1==0xf7)
   P2=0xfb;
else
P2=0xff;

if(P1==0xe7)
   P2=0xfa;
else
P2=0xff;

if(P1==0xef)
   P2=0xf9;
else
P2=0xff;

if(P1==0xcf)
   P2=0xf8;
else
P2=0xff;

if(P1==0xdf)
   P2=0xf8;    //重复上一步动作
else
P2=0xff;

if(P1==0x9f)
   P2=0xf7   ,  P0=0xef;    //JAM 电线报警启动
else
P2=0xff   ,  P0=0xff;
/* {
LED=0;
delay(40);
LED=1;
delay(6000);
} */
}
}
/*void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}*/

#9


设置定时器T0(或T1)工作在方式1下,允许定时中断;定时时间可以是50毫秒。设置秒,分,小时计数器;每20次中断为1秒,每60秒分钟计数器加1,每60分小时计数器加1。等小时计数器达到200,退出相关程序即可。

#10


引用 9 楼 bjtea 的回复:
设置定时器T0(或T1)工作在方式1下,允许定时中断;定时时间可以是50毫秒。设置秒,分,小时计数器;每20次中断为1秒,每60秒分钟计数器加1,每60分小时计数器加1。等小时计数器达到200,退出相关程序即可。


能具体一些吗?热泪感谢! 程序在上面

#11


引用 10 楼 wheatyilong 的回复:
引用 9 楼 bjtea 的回复:
设置定时器T0(或T1)工作在方式1下,允许定时中断;定时时间可以是50毫秒。设置秒,分,小时计数器;每20次中断为1秒,每60秒分钟计数器加1,每60分小时计数器加1。等小时计数器达到200,退出相关程序即可。

能具体一些吗?热泪感谢! 程序在上面

加起来也没有几行,你先写个初步,调试一下,有问题大家替你改。

#12


引用 11 楼 bjtea 的回复:
引用 10 楼 wheatyilong 的回复:
引用 9 楼 bjtea 的回复:
设置定时器T0(或T1)工作在方式1下,允许定时中断;定时时间可以是50毫秒。设置秒,分,小时计数器;每20次中断为1秒,每60秒分钟计数器加1,每60分小时计数器加1。等小时计数器达到200,退出相关程序即可。

能具体一些吗?热泪感谢! 程序在上面

加起来也没有几行,你先写个初步,调试一下,有问……


能帮我写一下吗?拜托了   这方面我有点小白   。。。万分感激

#13


51机的程序保密性最差了

如果没有外部可读写ROM,是无法实现的。

#14


这个就是最简单的逻辑炸弹。。。。。。。

#15


使用带内部flash的单片机可以实现,但是一定要小心使用。

#16


内部带EEPROM的单片机都可以。要是定时器都玩不转。建议改行吧!这不是什么前途光明的职业!

#17


……看来这里的很多人不知道这世界上有一批专门拖欠工程款的无良公司啊……
程序可正常运行半年/一年,工程款结清后解除时间限制。
对付无赖就得用无赖招数。

#18


哪位达人可以帮助写一下呢?谢谢了

#19


原理都讲清楚了,程序还是自己写吧。我这里再简单的说一下,首先要设置一个定时器,利用这个定时器计时,无非是定义毫秒、秒、分、时、日、月、年等,你要多长时间都可以,时间到了按要求处理就行了。如果是功能性的,直接用RAM定义这些变量就行了,只不过是断电重启后,时间重新计算。如果不是,只是记录运行时间,则把时间记录到E2PROM中或者FLASH存储器中,掉电也不影响。

#20


引用 19 楼 iamlaosong 的回复:
原理都讲清楚了,程序还是自己写吧。我这里再简单的说一下,首先要设置一个定时器,利用这个定时器计时,无非是定义毫秒、秒、分、时、日、月、年等,你要多长时间都可以,时间到了按要求处理就行了。如果是功能性的,直接用RAM定义这些变量就行了,只不过是断电重启后,时间重新计算。如果不是,只是记录运行时间,则把时间记录到E2PROM中或者FLASH存储器中,掉电也不影响。


谢谢楼上的  !

#21