文档详情

《51单片机的24c02电子时钟程序和电路图》.doc

发布:2016-01-24约5.5千字共10页下载文档
文本预览下载声明
这是一个基于51,24C02的时钟教程,程序已经在protues中仿真,仿真图在下方!! 这个程序由1602显示,通过开发板测试了,还有结合了24c02pdf,24c02时序图,有了这些24c02时序序就没问题了!下面的有详细的程序解说。 主要的还有就是些按键程序,都比较简单的 -------------血顶猎鹰2011-4-13 程序如下,有注释 002.c #includereg52.h //52库文件 #includeintrins.h //1us延时库文件 #define uint unsigned int //宏定义 #define uchar unsigned char #include24c02.h //包含24c02头文件 sbit lcdrs=P2^4; //液晶的控制角 sbit lcdrw=P2^5; sbit lcden=P2^6; sbit s1=P3^0; //三个调时钟的按键 sbit s2=P3^1; sbit s3=P3^2; sbit beep=P2^3; //蜂鸣器 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) //液晶写命令程序 { 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_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) //如果功能按键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(s2==0) { while(!s2); di(); if(s1num==1) //对应调整分秒时 {
显示全部
相似文档