打印
[国产单片机]

【快乐分享】+基于STC89C51

[复制链接]
3149|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 gaoyang9992006 于 2013-7-17 22:48 编辑

基于STC89C51制作的具有记录天亮天黑时间功能的时钟.pdf (1.14 MB)


以上是PDF文档,绝对原创。
下面附件是程序代码文件
基于STC89C5X系统的具有记录天亮天黑功能的时钟.rar (56.3 KB)



记录天亮天黑时间的仪器,要求能存储时间,并且时钟要精度高,需要的时候可以上传到电脑进行分析处
理。传感器可以用光敏二极管和光敏三极管以及光敏电阻,考虑
到易于调整最终选择了使用光敏电阻。在数码管的驱动上选择了
MAX7219芯片刚好驱动八位共阴极数码管,因为手头上只有三个
按键,所以在按键的设计上,采用一键多能的设计方法,按键的
功能分布如下:
K1:按动一次可以进行小时的调整,且小时位闪烁给出提
示,按动第二次可以对分钟调整,同样给出提示,按下第三次时
候可以对秒进行调整,秒位也闪烁一下进行提示,第四次显示传
感器读数,第五次按下后进入上传和格式化内部EEPROM的操作,
并且都会给出提示。
K2:调整时间时候进行加操作,上传和格式化时候为上传指
令键。
K3:调整时间时候进行减操作,上传和格式化时候为格式化
指令键。
由于手头没有时钟芯片,又不想去买,就考虑如何用定时器
做出高精度的计时器,在进行stc的下载中发现了一个奇怪的现
象,显示我单片机的晶振和标称相差很多,更换了几个做测试,
结果一样,终于被我发现原来定时器不准的最大原因在晶振本身
是不准的,现在我按照STC编程软件提示的频率设计中断程序的
定时器初始值,然后把中断跳转的指令消耗的时间考虑进去,进
行了两天的测量,尽然与我笔记本的时间误差不到1s,获得较为
精准的时间成功,这完全可以和普通的时钟芯片相比了。
考虑到按键的延时函数,以前都是使用for循环那样写太老
套了,在各种书上我们只能看到for循环和while循环的延时函
数,这种软件延时显然不能有效的控制延时时间,于是我考虑在
中断里加上一个延时变量。这样就可以更为精准的控制延时了。
而且会使目标代码更为短小。
以前没有使用过STC的内部EEPROM,由于要求能够存储足够
多的数据,需要能掉电保护的存储器,查看了STC89C51的手册
发现竟然有4K的EEPROM可以使用,心里大喜,把手册上提供的
EEPROM读写和擦除操作代码直接复制过来就行了。
传感器选择了光敏电阻,经过万用表的测量,电阻在光照较
强的时候大约1K,在黑暗环境达到几百K,于是选择了手头上的
一枚10K的电阻进行串联匹配,用于分压比较。因为这样只需要
测量定值电阻上的分压比就行了,不用考虑电压源的稳定性。在
AD转换上采用ADC0832一片就OK,还多出来一个通道呢。
在通过电脑串口上传数据时候发现每次上传一位需要延时一
下,给硬件足够的反应时间,要不接收会出错的,比如没有收到
全部数据,数据丢失,等等。
在判断何时记录时间时候,考虑到传感器可能会出现数值
震荡或者不稳定情况,那么我就通过设定缓冲区来解决这个问
题。定义X1和X2作为触发记录的上下限,其中X1<X2,且X1不等
于X2,那么X1和X2直接的取值就作为了缓冲区了,当传感器读数
X在缓冲区和其任意边界进行跳变时候不进行触发,唯X1(或者
X2)跨越缓冲区进入X2(或者X1)时候触发记录程序,记录下当
时的时间。考虑到干扰发生,并进行延时再判断。
在EEPROM进行写的时候先查找空白区,在空白区进行按组
写入,本程序只写入了小时分钟秒,如果扩展可以加入月份和日
期。擦除的时候逐个熄灭数码管提示进度。
其余的设计细节请参考程序注释。
评分
参与人数 2威望 -3 收起 理由
地瓜patch + 2 赞一个!
qin552011373 -5 山寨

相关帖子

沙发
ayb_ice| | 2013-7-18 10:52 | 只看该作者

不要乱下结论,什么晶振不准引起的时间不准

TH0=(65536-46068)/256;         
TL0=(65536-46068)%256;         

你这样的代码本身就有问题,赋初值时定时器仍在运行,怎么可能准呢,这需要动态调整来消除误差

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
地瓜patch + 2 技术总监
板凳
ayb_ice| | 2013-7-18 10:57 | 只看该作者
按键不松,程序基本都停了(只有中断还在运行,但显示已经被冻结了),有什么意义

使用特权

评论回复
地板
ayb_ice| | 2013-7-18 10:59 | 只看该作者
还有数据调整,已经出现非法数据了,居然没有任何处理

使用特权

评论回复
5
outstanding| | 2013-7-18 14:38 | 只看该作者
这么多问题么?

使用特权

评论回复
6
gaoyang9992006|  楼主 | 2013-7-18 22:53 | 只看该作者
ayb_ice 发表于 2013-7-18 10:52
不要乱下结论,什么晶振不准引起的时间不准

TH0=(65536-46068)/256;         

真不准,我那晶振五毛钱一个。

使用特权

评论回复
评分
参与人数 1威望 -5 收起 理由
qin552011373 -5 山寨
7
gaoyang9992006|  楼主 | 2013-7-18 22:54 | 只看该作者
ayb_ice 发表于 2013-7-18 10:59
还有数据调整,已经出现非法数据了,居然没有任何处理

哪儿,告诉我。我去瞧瞧。

使用特权

评论回复
评分
参与人数 1威望 -4 收起 理由
qin552011373 -4
8
gaoyang9992006|  楼主 | 2013-7-18 22:55 | 只看该作者
ayb_ice 发表于 2013-7-18 10:52
不要乱下结论,什么晶振不准引起的时间不准

TH0=(65536-46068)/256;         

你详细说说。跟大侠学习学习。

使用特权

评论回复
评分
参与人数 1威望 -4 收起 理由
qin552011373 -4
9
ayb_ice| | 2013-7-19 09:29 | 只看该作者
首先这个理论值就不准
其次在2L已经说的很清楚了

使用特权

评论回复
10
gaoyang9992006|  楼主 | 2013-7-19 12:27 | 只看该作者
ayb_ice 发表于 2013-7-19 09:29
首先这个理论值就不准
其次在2L已经说的很清楚了

理论值啊?呵呵。能让它精确回去就行啊。我这个方法能让系统时间更接近北京时间。走好几天也不会错几秒

使用特权

评论回复
11
ayb_ice| | 2013-7-19 15:32 | 只看该作者
你这个方法是因为你只有这一个中断,中断多了就不行了,

而且还随系统规模的大小有变化,没有什么可扩展性

使用特权

评论回复
12
gaoyang9992006|  楼主 | 2013-7-19 23:03 | 只看该作者
ayb_ice 发表于 2013-7-19 15:32
你这个方法是因为你只有这一个中断,中断多了就不行了,

而且还随系统规模的大小有变化,没有什么可扩展性 ...

en ,你说对了,谢谢你,呵呵,这个是我以前刚学51的时候做的一个小东西。现在不用定时器做了,用时钟芯片。就不占用系统的时钟周期了。

使用特权

评论回复
13
gaoyang9992006|  楼主 | 2013-7-19 23:03 | 只看该作者
ayb_ice 发表于 2013-7-19 15:32
你这个方法是因为你只有这一个中断,中断多了就不行了,

而且还随系统规模的大小有变化,没有什么可扩展性 ...

en ,你说对了,谢谢你,呵呵,这个是我以前刚学51的时候做的一个小东西。现在不用定时器做了,用时钟芯片。就不占用系统的时钟周期了。

使用特权

评论回复
14
llyyff1636| | 2013-8-9 17:27 | 只看该作者
很好,有时间做一个

使用特权

评论回复
15
logokfu| | 2013-8-10 09:17 | 只看该作者
既然做有关时间的,就得用专用的RTC,用单片机的timer,做这个没有意义。

使用特权

评论回复
16
gaoyang9992006|  楼主 | 2013-8-10 09:27 | 只看该作者
**kfu 发表于 2013-8-10 09:17
既然做有关时间的,就得用专用的RTC,用单片机的timer,做这个没有意义。

呵呵,省钱

使用特权

评论回复
17
dong_abc| | 2013-8-11 02:19 | 只看该作者
用keil软件仿真 可以调整精确度。

使用特权

评论回复
18
gaoyang9992006|  楼主 | 2013-8-11 21:26 | 只看该作者
dong_abc 发表于 2013-8-11 02:19
用keil软件仿真 可以调整精确度。

讲讲

使用特权

评论回复
19
dong_abc| | 2013-8-11 21:48 | 只看该作者
gaoyang9992006 发表于 2013-8-11 21:26
讲讲

在中断入口设置个断点,调整两次运行时间刚好为5ms。

使用特权

评论回复
20
gaoyang9992006|  楼主 | 2013-8-11 22:19 | 只看该作者
dong_abc 发表于 2013-8-11 21:48
在中断入口设置个断点,调整两次运行时间刚好为5ms。

Very Good, 非常感谢。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:西安公路研究院南京院
简介:主要工作从事监控网络与通信网络设计,以及从事基于嵌入式的通信与控制设备研发。擅长单片机嵌入式系统物联网设备开发,音频功放电路开发。

1971

主题

15978

帖子

210

粉丝