1、这是一个基于51,24C02的时钟教程,程序已经在protues中仿真,仿真图在下方!这个程序由1602显示,通过开发板测试了,还有结合了24c02pdf,24c02时序图,有了这些24c02时序序就没问题了!下面的有详细的程序解说。主要的还有就是些按键程序,都比较简单的-血顶猎鹰2011-4-13程序如下,有注释002.c#include /52库文件#include/1us延时库文件#define uint unsigned int /宏定义#define uchar unsigned char #include24c02.h /包含24c02头文件sbit lcdrs=P24; /液晶的
2、控制角sbit lcdrw=P25;sbit lcden=P26;sbit s1=P30;/三个调时钟的按键sbit s2=P31;sbit s3=P32;sbit beep=P23;/蜂鸣器uchar count,s1num;char miao,shi,fen;uchar code table=2011-04-09 SAT ;void delayms(uint z)/延时毫秒的程序uint x,y;for(x=z;x0;x-)for(y=112;y0;y-);void di()/蜂鸣器的响beep=0;delayms(100);beep=1;void write_cmd(uchar cmd)
3、/液晶写命令程序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_cmd(0x06);write_cmd(0x01);delayms(1);void write_
4、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(0x30+fg);write_cmd(0xc0+10);write_dat(0x30+ms);write_dat(0x30+mg); void keyscan()if(s1=0
5、) /如果功能按键1按下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=4)s1num=0; count=0;write_cmd(0x0c);TR0=1;if(s1num!=0)if(s2=0)/如果按键2按下执行加delayms(5);if(s
6、2=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,fen);if(s1num=3)shi+;if(shi=60)shi=0;write_sfm(shi,fen,miao);write_cmd(0xc0+4);write_add(3
7、,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_cmd(0xc0+7);write_add(2,fen);if(s1num=3)shi-;if(shi=-1)shi=23;write_sfm(shi,fen,miao);write
8、_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;num15;num+)write_dat(tablenum); write_cmd(0xc0+6);write_dat(:);write_cmd(0xc0+9);write_dat(:);miao=read_add(1);fen=read_add(2);shi=read_add(3);write_sfm(shi,fen,miao);TMOD=
9、0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;wp=0;while(1)keyscan();if(count=20)/等待1s count=0;miao+;if(miao=60) /进位程序miao=0;fen+;if(fen=60)fen=0;shi+;if(shi=24)shi=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_a
10、dd(1,miao); void timer0() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;count+;24c02.hsbit wp=P10;sbit sda=P12;sbit scl=P11;void delay1()/延时5us左右;void start() sda=1;/对应时序图将SDA拉高 delay1(); /延时 scl=1;/将CL拉高 delay1(); /延时 sda=0;/造成一个下降沿启动信号 delay1();void stop() sda=0; / SDA拉低 delay1(); scl=1;
11、/SCL拉高 delay1(); sda=1; /造成上升沿终止信号 delay1();void respons() unsigned char i; scl=1; /将SCL拉高 delay1(); while(sda=1)&(i250) i+; /等待SDA低电平如果时间超了就退出 scl=0; /将SCL拉低 delay1();void write_byte(unsigned char date) unsigned char i,temp; temp=date; /写数据 for(i=0;i8;i+) /循环输入 temp=temp1; /左移一位进CY,再放入sda中 scl=0; d
12、elay1(); 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;i8;i+) /读出sda放在k中 scl=1; delay1(); k=(k1)|sda; scl=0; delay1(); delay1(); return k;void write_add(unsigned char address,unsig
13、ned char date) start(); write_byte(0xae); /这里电路图中接的A0A1A2为高,故为0xae respons(); write_byte(address); /这一部分按照时序图看就行了 respons(); write_byte(date); respons(); stop();unsigned char read_add(unsigned char address) unsigned char date; start(); write_byte(0xae); respons(); write_byte(address); respons(); start(); write_byte(0xaf); /按时序图操作 respons(); date=read_byt
到此这篇51单片机电子时钟的接线图(51单片机电子时钟电路图)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/jszy-jszl/41539.html