51单片机的24c02电子时钟程序和电路图_第1页
51单片机的24c02电子时钟程序和电路图_第2页
51单片机的24c02电子时钟程序和电路图_第3页
51单片机的24c02电子时钟程序和电路图_第4页
51单片机的24c02电子时钟程序和电路图_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、#include<reg52.h>#include<intrins.h>/52库文件/1us延时库文件这是一个基于51, 24C02的时钟教程,程序已经在 protues中仿真,仿真图在下方! ! 这个程序由1602显示,通过开发板测试了,还有结合了24c02pdf, 24c02时序图,有了这些24c02时序序就没问题了!下面的有详细的程序解说。主要的还有就是些按键程序,都比较简单的血顶猎鹰 2011-4-13LS1P23 J -SOUNDER程序如下,有注释002.c#define uint unsigned int宏定义#define uchar unsigned

2、char#include"24c02.h" sbit lcdrs=P2A4; sbit lcdrw=P2A5; sbit lcden=P2A6; sbit s1=P3A0;sbit s2=P3A1;sbit s3=P3A2;sbit beep=P2A3; uchar count,s1num; char miao,shi,fen;/包含24c02头文件液晶的控制角三个调时钟的按键蜂鸣器uchar code table="2011-04-09 SAT "void delayms(uint z)uint x,y;for(x=z;x>0;x-) for(y

3、=112;y>0;y-);void di()beep=0;delayms(100);beep=1;void write_cmd(uchar cmd)lcden=0;lcdrs=0;lcdrw=0;P0=cmd;_nop_();lcden=1;delayms(1);lcden=0;_nop_();void write_dat(uchar dat)lcden=0;lcdrs=1;P0=dat;_nop_();lcden=1;delayms(1);lcden=0;_nop_();void lcdint()lcden=0;write_cmd(0x38);write_cmd(0x0c);write

4、_cmd(0x06);write_cmd(0x01);/蜂鸣器的响/液晶写命令程序/延时毫秒的程序/液晶写数据程序/液晶初始化程序delayms(1);void write_sfm(uchar s,uchar f,uchar m)/数据在液晶显示uchar ss,sg,fs,fg,ms,mg;ss=s/10;sg=s%10;fs=f/10;fg=f%10;ms=m/10;mg=m%10;write_cmd(0xc0+4);write_dat(0x30+ss);write_dat(0x30+sg);write_cmd(0xc0+7);write_dat(0x30+fs);write_dat(0x

5、30+fg);write_cmd(0xc0+10);write_dat(0x30+ms);write_dat(0x30+mg);void keyscan()/ 如果功能按键 1 按下/去抖动if(s1=0)delayms(5);if(s1=0) /等待松手/主要还是记下次数/蜂鸣器响/按一下秒钟while(!s1);s1num+;di();if(s1num=1)TR0=0;write_cmd(0xc0+10); / 指针显示闪烁 write_cmd(0x0f);if(s1num=2)write_cmd(0xc0+7);if(s1num=3)write_cmd(0xc0+4);if(s1num=

6、4)s1num=0; count=0;write_cmd(0x0c);TR0=1;if(s1num!=0)/如果按键2 按下执行加if(s2=0)delayms(5);if(s2=0)while(!s2);/对应调整分秒时di();if(s1num=1) miao+;if(miao=60)miao=0;write_sfm(shi,fen,miao);write_cmd(0xc0+10);write_add(1,miao);if(s1num=2)fen+;if(fen=60)fen=0;write_sfm(shi,fen,miao);write_cmd(0xc0+7);write_add(2,f

7、en);if(s1num=3)shi+;if(shi=60)shi=0;write_sfm(shi,fen,miao);write_cmd(0xc0+4);write_add(3,shi);if(s3=0)delayms(5);if(s3=0)while(!s3);di();if(s1num=1)miao-;if(miao=-1)miao=59; write_sfm(shi,fen,miao); write_cmd(0xc0+10);write_add(1,miao);if(s1num=2)fen-;if(fen=-1)fen=59;write_sfm(shi,fen,miao);write_

8、cmd(0xc0+7); write_add(2,fen);if(s1num=3)shi-;if(shi=-1)shi=23;write_sfm(shi,fen,miao);write_cmd(0xc0+4); write_add(3,shi);void main()uchar num;lcdint();wp=0;s1num=0;count=0;shi=0;fen=0;miao=0;write_cmd(0x80+1);for(num=0;num<15;num+)write_dat(tablenum);write_cmd(0xc0+6);write_dat(':');wri

9、te_cmd(0xc0+9);write_dat(':');miao=read_add(1);fen=read_add(2);shi=read_add(3);write_sfm(shi,fen,miao);TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;wp=0;while(1)keyscan();if(count=20) /等待1scount=0;miao+;if(miao=60) /进位程序miao=0;fen+;if(fen=60) fen=0;shi+;if(shi=24)sh

10、i=0;write_sfm(shi,fen,miao);write_add(3,shi);write_sfm(shi,fen,miao);write_add(2,fen);write_sfm(shi,fen,miao);write_add(1,miao);void timer0() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;count+;24c02.hsbit wp=P1A0;sbit sda=P1A2;sbit scl=P1A1;void delay1() /延时5us 左右;void start()sda=1; / 对应时

11、序图将SDA 拉高delay1(); /延时scl=1;/ 将 CL 拉高delay1();/延时sda=0;/ 造成一个下降沿启动信号delay1();void stop()sda=0; / SDA 拉低delay1();scl=1; /SCL 拉高delay1();sda=1; / 造成上升沿终止信号delay1();void respons()unsigned char i;scl=1; /将 SCL 拉高delay1();while(sda=1)&&(i<250) i+;/等待SDA 低电平如果时间超了就退出scl=0;/将 SCL 拉低delay1();void

12、 write_byte(unsigned char date)unsigned char i,temp;temp=date;/写数据for(i=0;i<8;i+)/循环输入temp=temp<<1;/左移一位进CY ,再放入 sda 中scl=0;delay1();sda=CY;delay1();scl=1;delay1();scl=0;delay1();sda=1;delay1();unsigned char read_byte() / 读一个字节unsigned char i,k;k=0;scl=0;delay1();sda=1;delay1();for(i=0;i<

13、;8;i+) 读出 sda 放在 k 中scl=1;delay1();k=(k<<1)|sda;scl=0;delay1();delay1(); return k;void write_add(unsigned char address,unsigned char date)start();write_byte(0xae);/这里电路图中接的A0A1A2 为高,故为 0xaerespons();write_byte(address); / 这一部分按照时序图看就行了 respons();write_byte(date);respons();Stop(); unsigned char

14、 read_add(unsigned char address)unsigned char date;start();write_byte(0xae);respons();write_byte(address);respons();start();write_byte(0xaf); 按时序图操作respons();date=read_byte();stop();return date;把两个文件放在同一文件夹下就行了已通过实物验证可以用写一个字节的时序流程图对应上面的 void write_add(unsigned char address,unsigned char date)FIGURE 5 1: BYTE WRITESDA

温馨提示

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

评论

0/150

提交评论