基于1302数码管显示可调时钟C程序设计_第1页
基于1302数码管显示可调时钟C程序设计_第2页
基于1302数码管显示可调时钟C程序设计_第3页
基于1302数码管显示可调时钟C程序设计_第4页
基于1302数码管显示可调时钟C程序设计_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于1302数字可调时钟的设计-文/振勇 这是我最近完善的1302数字可调时钟,经过20多个小时的走时实验,走时相当准确,与电脑时间完全一致,最起码肉眼看不出误差,1302的另一个突出优点是可以接备用电源,用纽扣电池供电,在外部系统电力中断的情况下,仍能保持内部时钟正常走时,经多次故意掉电实验,走时正常。  本次的完善主要在软件。一个系统能够实现功能并不一定意味着成功,关键要让这个系统如何稳定的工作,提高其可靠性,是现代电子行业努力追求的目标。本项目完全由本人在目前比较简陋的“振勇电子实验室”完成,介于条件简陋,设备简单,导致硬件系统尚不完善。在软件编程方面,用先

2、进的ASP下载取代了我一贯使用的串口下载,其好处是不用冷启动(个人认为除此之外没别的好处,而且下载效率没有串口的高,成功率保持在50%就很不错了)。单片机用ATMEL公司的AT89S52取代了我以前用的STC系列单片机,STC是国产单片机,虽然我们提倡支持国产,但是很多时候国产真的太不争气了。    另一个比较大的改动在软件调时方面,按键抖动是一个很让人头疼的问题,就连我一直很佩服的郭天祥老师在这一块也曾犯过错误,而且错误还著书出版了,单片机的扫描是很快的,那么怎么才能有效地去除按键抖动呢?下面我介绍的这种方法是我自己纯脑力劳动的结晶,实验证明运行效果良

3、好。    if(key=0)            con+;        if(con=20)                    con=0;

4、0;           qita();            一般人都能理解这个用法,也能想到,但关键这个程序不完整,比方说con没加到20,加到10就松开了,那么请问con还能被清0吗?显然不能。那么你下一次再按的时候就有可能按一下加两下,这种不稳定性在编程中是不能存在的,最起码一个合格的产品不能有这样的毛病。所以在这个函数里面应该加上下面这句:else if(k

5、ey=1)    if(con!=0)            con=0;    这个函数很简单,关键是它的位置,一定要与上面的的那个函数在同一位置。 该数字时钟另一个有技术含量的地方就是在调节时间的时候会在对应的位置闪烁,原理也很简单,就是在显示之前加一个门卡,比方说占空比50%的闪烁,那我就定义一个son,让son+;加满是60,那加到30以后让数码管不显示,就行了。程序如下:

6、60;else if(num2=0)     son+;   if(son>30)       aa=bb=10;    if(son=60)         son=0;       aa和bb是对应的两位共阳数码管。等于10就是除了小数点以

7、外都不亮,也可以直接等于0.这个函数也是我没有参考任何程序纯自主研发的。编程这一块锻炼的是思维方式,同一个问题,我能用不同的方法来实现,关键是哪一种更合理。编程没有标准答案,只有更好没有最好。有的人会评价别人的程序思路偏或者怎么怎么样,实际上是自己的思路出了问题,咱们的思路不一样,你又不愿意承认自己有问题,你当然会说别人有问题了。呵呵,那么谁才能检验真理呢?邓小平说过一句话:实践是检验真理的唯一标准。  下面是我的1302显示的完整的程序:#include<reg52.h>#include<intrins.h>#define uchar unsign

8、ed char#define uint unsigned intuchar miao,fen,shi,aa,bb,cc,dd,ee,ff,gg,num1,num2,num3,con,son;uchar code table=0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff;sbit DATA=P21;sbit RST=P22;sbit SCLK=P20;sbit wela=P30;sbit dula=P31;sbit d1=P10;sbit key1=P14;sbit key2=P13;sbit key3=P12;sbit key4=

9、P11;void delaynus(uchar n) uchar i; for(i=0;i<n;i+)  void write1302(uchar dat) uchar i; SCLK=0; delaynus(2); for(i=0;i<8;i+)   DATA=dat&0x01;  delaynus(2);  SCLK=1;  delaynus(2);  SCLK=0; &#

10、160;dat>>=1; void writeset1302(uchar cmd,uchar dat) RST=0; SCLK=0; RST=1; delaynus(2); write1302(cmd); write1302(dat); SCLK=1; RST=0;uchar read1302(void) uchar i,dat; delaynus(2); for(i=0;i<8;i+)   dat>>=1;

11、0; if(DATA=1)   dat|=0x80;  SCLK=1;  delaynus(2);  SCLK=0;  delaynus(2);  return dat;uchar readset1302(uchar cmd) uchar dat; RST=0; SCLK=0; RST=1; write1302(cmd); dat=read1302(); SCLK=1; RST

12、=0; return dat;void init_1302(void) writeset1302(0x8e,0x00); writeset1302(0x80,(00/10)<<4|(00%10); writeset1302(0x82,(04/10)<<4|(04%10); writeset1302(0x84,(13/10)<<4|(13%10); writeset1302(0x86,(16/10)<<4|(16%10); writeset1302(0x88,(11/10)<

13、;<4|(11%10); writeset1302(0x8c,(8/10)<<4|(8%10);void delay(uint x) uchar i,j; for(i=x;i>0;i-)  for(j=121;j>0;j-);void saomiao() if(key1=0)   con+;  if(con=12)     con=0;  / EA=0;  

14、 num1+;   if(num1=3)       num1=0;       else if(num1=1)   if(key2=0)     con+;   if(con=12)       con=0;  

15、60; num2+;    if(num2=3)         num2=0;            else if(num2=0)     son+;   if(son>30)      &

16、#160;aa=bb=10;    if(son=60)         son=0;          if(key3=0)       con+;    if(con=20)       

17、;  con=0;     miao+;         if(miao=60)           miao=0;           writeset1302(0x80,(miao/10)<<4|(miao%10)

18、;              else if(key4=0)       con+;    if(con=20)         con=0;     miao-;    

19、0;if(miao=-1)           miao=59;          writeset1302(0x80,(miao/10)<<4|(miao%10);                 else if(n

20、um2=1)     son+;   if(son>30)       dd=cc=10;    if(son=60)         son=0;          if(key3=0)  &

21、#160;    con+;    if(con=12)         con=0;     fen+;     if(fen=60)           fen=0;    &

22、#160;      writeset1302(0x82,(fen/10)<<4|(fen%10);          else if(key4=0)          con+;    if(con=12)      

23、0;  con=0;     fen-;     if(fen=-1)           fen=59;          writeset1302(0x82,(fen/10)<<4|(fen%10);    

24、60;      else if(num2=2)      son+;   if(son>30)       ff=ee=10;    if(son=60)         son=0;     

25、;     if(key3=0)       con+;    if(con=12)         con=0;     shi+;     if(shi=24)       &

26、#160;   shi=0;           writeset1302(0x84,(shi/10)<<4|(shi%10);           if(key4=0)       con+;    if(con=12)

27、60;        con=0;     shi-;     if(shi=-1)           shi=23;           writeset1302(0x84,(shi/10)<

28、;<4|(shi%10);            else if(num1=2)  / EA=1;  num1=0; void sfm() aa=miao/10; bb=miao%10; cc=fen/10; dd=fen%10; ee=shi/10; ff=shi%10;void desplay()/ sfm(); dula=0;

29、 wela=1; P0=0x01; wela=0; dula=1; P0=tablebb; dula=0; delay(5); P0=0x00;  dula=0; wela=1; P0=0x02; wela=0; dula=1; P0=tableaa; dula=0; delay(5); P0=0x00;  dula=0; wela=1; P0=0x08; wela=

30、0; dula=1; P0=tabledd; dula=0; delay(5); P0=0x00;  dula=0; wela=1; P0=0x10; wela=0; dula=1; P0=tablecc; dula=0; delay(5); P0=0x00;  dula=0; wela=1; P0=0x40; wela=0; dula=1; P0=tableff; 

31、dula=0; delay(5); P0=0x00;  dula=0; wela=1; P0=0x80; wela=0; dula=1; P0=tableee; dula=0; delay(5); P0=0x00;  dula=0; wela=1; P0=0x20; wela=0; dula=1; P0=0xfd; dula=0; delay(5); P0=0x00;  dula=0; wela=1; P0=0x04; wela=0; dula=1; P0=0xfd; dula=0; delay(5);&#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论