求一个关于用C语言编写的电子时钟的程序,内容要有闹钟,可以调整时间

求一个关于用C语言编写的电子时钟的程序,内容要有闹钟,可以调整时间,第1张

#include<reg52.h>

#include<absacc.h>

#include<intrins.h>

#define unit unsigned int

#define uchar unsigned char

//#define HZ 12

sbit key0=P0^0 // 分钟调整

sbit key1=P0^1 // 小时调整

sbit P2_0=P2^7 //秒 指示灯

sbit MN_RXD=P3^6

sbit MN_TXD=P3^7

uchar data CLOCK[4]={0,0,0,12}//存放时钟时间(百分秒,秒,分,和时位)

//数码管显示表0-f 灭

uchar code TABLE[]={0xBE,0x06,0xEA,0x6E,0x56,0x7C,0xFC,0x0E,0xFE,0x7E,0x00}

//**********************************

//模拟串口发送一个字节数据 函数

//**********************************

void SendData(unsigned char senddata)

{

unsigned char i

for(i=0i<8i++)

{

if((senddata&0x01)==0)

MN_RXD=0

else

MN_RXD=1

_nop_()

MN_TXD=0

_nop_()

MN_TXD=1

senddata=senddata>>1

}

}

//**********************************

//显示程序函数

//**********************************

void display(void)

{

// unsigned int n

uchar temp

temp=CLOCK[1]temp=temp%10 SendData(TABLE[temp])

temp=CLOCK[1]temp=temp/10 SendData(TABLE[temp])

temp=CLOCK[2]temp=temp%10 SendData(TABLE[temp])

temp=CLOCK[2]temp=temp/10 SendData(TABLE[temp])

temp=CLOCK[3]temp=temp%10 SendData(TABLE[temp])

temp=CLOCK[3]temp=temp/10 SendData(TABLE[temp])

/*

for(n=0n<5000n++)

for(n=0n<6n++)

{

SendData(TABLE[10])

}

*/

}

//**********************************

//按键控制函数

//**********************************

void keycan()

{

unsigned int n

EA=0

if(key0==0) // 分钟调整

{

for(n=0n<10000n++) //延时去抖动

while(key0==0)

CLOCK[2]=CLOCK[2]+1

if(CLOCK[2]==60) //到一时

{

CLOCK[2]=0

}

display()

}

if(key1==0) // 小时调整

{

for(n=0n<10000n++) //延时去抖动

while(key1==0)

CLOCK[3]=CLOCK[3]+1

if(CLOCK[3]==24)

{

CLOCK[3]=0

}

display()

}

EA=1

}

//**********************************

//T0中断服务函数

//**********************************

void time0() interrupt 1 //using 1

{

TH0=0xD8TL0=0xF0 //重置初值

// TH0=0xB1 TL0=0xE0

//时钟处理

CLOCK[0]=CLOCK[0]+1

}

//**********************************

//主函数

//**********************************

void main()

{

EA=1

ET0=1

TMOD=0x01 //T0方式1定时

TH0=0xD8TL0=0xF0 //D8F0 定时10ms

// TH0=0xB1 TL0=0xE0 //定时 20ms

TR0=1

for()

{

if(CLOCK[0]==100) //到一秒 10ms*100

{

CLOCK[0]=0

P2_0=~P2_0

CLOCK[1]=CLOCK[1]+1

if(CLOCK[1]==60) //到一分

{

CLOCK[1]=0

CLOCK[2]=CLOCK[2]+1

if(CLOCK[2]==60) //到一时

{

CLOCK[2]=0

CLOCK[3]=CLOCK[3]+1

if(CLOCK[3]==24)

{

CLOCK[3]=0

}

}

}

display()

}

keycan()

}

}

1 例如当时间达到09年6月3日20点31分20秒的时候,CPU转到停止,前提是CPU有硬件时钟,并且正确设置了时间。

LD SM0.5

EU

TODR VB0 //读取时间

LDB>= VB0, 16#09//读取的时间是BCD码,这样用省去格式转换

AB>= VB1, 16#06

AB>= VB2, 16#03

AB>= VB3, 16#20

AB>= VB4, 16#31

AB>= VB5, 16#20

STOP

2 如果定时开启关闭外部设备,那PLC可以轻松完成。

例如每天早上6点到晚上8点开机

LD SM0.5

EU

TODR VB0

LDB>= VB3, 16#06

AB= Q0.0

3 PLC运行一段时间停止

LD SM0.4

EU

INCD MD0 //每分钟累加一次,

LDD= MD0, 4320 //3天后CPU停止,4320=3天*24小时*60分钟

STOP //在系统块里将MD0设置为断电保持,那么计时不受停电影响,停电自动保存计时时间。

关键是如何读系统时钟:

S7-200的硬件实时时钟可以提供年、月、时、分、秒的日期/时间数据。

CPU221、CPU222没有内置的实时时钟,需要外插“时钟/电池卡”才能获得此功能。CPU224、CPU226和CPU226 XM都有内置的实时时钟。

为了提高运算效率,应当避免每个程序周期都读取实时时钟。实际上可读取的最小时间单位是1秒,可每秒读取一次(使用SM0.5上升沿触发读取指令)。

使用程序读取的实时时钟数据为BCD格式,可在状态图中使用十六进制格式查看。

CPU靠内置超级电容(+外插电池卡)在失去供电后为实时时钟提供电源缓冲;缓冲电源放电完毕后,再次上电后时钟将停止在缺省值,并不开始走动。

要设置日期、时间值,使之开始走动,可以:

用编程软件(Micro/WIN)的菜单命令PLC >Time of Day Clock...,通过与CPU的在线连接设置,完成后时钟开始走动

编用户程序使用Set_RTC(设置时钟)指令设置

Micro/WIN可以通过任何编程连接实现实时时钟的设置。

使用 S7-200 的 READ_RTC(读取实时时钟)和 SET_RTC(设置实时时钟)指令时, 读取和设置的数据格式都是 BCD 码的。如果觉得不便计算、处理,可使用 Clock Integer 指令库。

定时器虽然大家在平时生活中都有听说过,但是可能不是经常接触,所以对其的了解不是很多,所以今天为了大家更好的认识定时器,就跟大家说说定时器怎么设置时间以及定时器的使用注意事项,一起来看看。

定时器虽然大家在平时生活中都有听说过,但是可能不是经常接触,所以对其的了解不是很多,所以今天为了大家更好的认识定时器,就跟大家说说定时器怎么设置时间以及定时器的使用注意事项,一起来看看。

一、定时器怎么设置时间

1、电子定时器的当前时间调整方式简单,需要通过组合按键的方式进行 *** 作(注意:默认状态下星期、钟头、分3个按键是屏蔽的,单独按下之后是没有任何反应的,需要先按下【时钟】键,再按【星期】、【钟头】、【分】中的任意键,这也是一种防止不小心误 *** 作的方式,所以对3个按键采取了屏蔽)。

2、调整星期:先按下【时钟】键,再按下【星期】键,调整到当前星期值。(每按1次增加1天,长按可快速调整。)

3、调整钟头:先按下【时钟】键,再按下【钟头】键,调整到当前钟头值。(每按1次增加1钟头,长按可快速调整。)

4、调整分:先按下【时钟】键,再按下【分】键,调整到当前分值。(每按1次增加1分,长按可快速调整。)

5、调整夏令时:定时器自带有夏令时功能可以选用,默认情况下不开启。 *** 作方法:按住【时钟】键3秒钟,当前时间增加1钟头,液晶屏显示“夏令时”字样,进入夏令时功能再按【时钟】键3秒钟,当前时间减少1钟头,液晶屏取消显示“夏令时”字样,退出夏令时功能。

二、定时器的使用注意事项

在FC里使用像T0、T1这样的定时器,如果多次调用就有问题了,一个定时器不能同时用于两台设备!解决的方法是在FC中创建一个参数类型为Timer(定时器)的输入参数,在调用时为该参数指定不同的实参,例如设备A的实参为T0、设备B的实参为T1等等。

西门子结构化编程的精髓和相对其他PLC(包括S7-200)的就在于FB、FC的可移植性和可重用性。其基本规则是在FB、FC内部不使用任何全局变量,全部使用局部变量。这样的FB、FC的内部程序不作任何修改,就可以在同一项目中多次调用,或者将它们移植到其他项目中去。FC、FB众多的参数类型能实现这一要求。编程人员在工作中积累了大量的这样的FC、FB后,就可以像搭积木一样迅速地创建出满足不同客户要求的类似系统的程序。

作为编程人员应该养成不在FB、FC内部使用全局变量的习惯!

好了,关于定时器怎么设置时间以及定时器的使用注意事项的全部知识就跟大家介绍到这里了,希望以上的文章可以帮助到大家,大家在选购的时候,不要只看价格哦,要注意质量,如果还想了解相关的知识,可以继续关注我们的网站哦。


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

原文地址: https://outofmemory.cn/yw/12145011.html

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

发表评论

登录后才能评论

评论列表(0条)

保存