C语言实现数字时钟的程序.doc_第1页
C语言实现数字时钟的程序.doc_第2页
C语言实现数字时钟的程序.doc_第3页
C语言实现数字时钟的程序.doc_第4页
C语言实现数字时钟的程序.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

求89c52单片机 C语言实现数字时钟程序悬赏分:0 - 解决时间:2009-8-30 16:12 希望朋友们帮忙,给一下STC89C52单片机 C语言实现数字时钟的程序,初学单片机,请多关照 提问者: 爱在9黎明1971 - 一级最佳答案#include AT89X52.H#include intrins.h#define REST P3_4#define SCLK P3_7#define DATA P3_6 unsigned char code displayCode=0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90;unsigned char code controladdress=0x80,0x82,0x84,0x86,0x88, 0x8a,0x8c,0x8e,0x90,0xbe;unsigned char hour,minute,second;unsigned char day,month,week,year;unsigned char clockhour,clockminute;unsigned int num;unsigned char select,oneminute;bit bdata modeselect;void delay();void writetime();void display(unsigned char temp,unsigned char mode);void sound() while(num2000) P3_0=0; P3_0=1;void initial() P0=0; TMOD=0x22; IE=0xCF; IT0=1; IT1=1; T2CON=0; RCAP2L=0xf0; RCAP2H=0x1f; TH2=0x1c; TL2=0xf0; IP=0X06; TH0=0x48; TL0=0x48; TH1=0X48; TR0=1; PCON=0x01; hour=12; minute=0; second=0; num=0; select=0; clockhour=12; clockminute=0; modeselect=0; day=16; month=8; week=7; year=9;void interrupt0()interrupt 0 using 3 TR1=1; select+; if(select=8) select=0; if(select=1) ET2=1; oneminute=second-1;void timer0()interrupt 1 using 3 num+; if(num=5000) num=0; second+; if(second=60) minute+; second=0; if(minute=60) hour+; minute=0; if(hour=24) hour=0;void interrupt1()interrupt 2 using 3 oneminute=second-1; switch(select) case 4: hour+; if(hour=24) hour=0; break; case 5: minute+; if(minute=60) minute=0; break; case 6: second+; if(second=60) second=0; break; case 2: clockhour+; if(clockhour=24) clockhour=0; break; case 3: clockminute+; if(clockminute=60) clockminute=0; break; default: modeselect=0; ET2=!ET2; break; void timer1()interrupt 3 using 3 if(select) if(second=oneminute) select=0; TR1=0; void timer2()interrupt 5 using 3 sound(); TF2=0; if(minute!=clockminute|hour!=clockhour) TR2=0;void delay() unsigned char i=255; while(-i) ; void display(unsigned char temp,unsigned char mode) if(temp=4|temp=2) P0=0; else P0=1; if(mode) P1=displayCodehour/10; else P1=displayCodeclockhour/10; delay(); if(temp=4|temp=2) P0=0; else P0=2; if(mode) P1=displayCodehour%10; else P1=displayCodeclockhour%10; delay(); if(temp=1|temp=2|temp=3) P0=0; else P0=4; P1=0xbf; delay(); if(temp=5|temp=3) P0=0; else P0=8; if(mode) P1=displayCodeminute/10; else P1=displayCodeclockminute/10; delay(); if(temp=5|temp=3) P0=0; else P0=16; if(mode) P1=displayCodeminute%10; else P1=displayCodeclockminute%10; delay(); if(temp=1|temp=2|temp=3) P0=0; else P0=32; P1=0xbf; delay(); if(temp=6) P0=0; else P0=64; if(mode) P1=displayCodesecond/10; else P1=displayCode0; delay(); if(temp=6) P0=0; else P0=128; if(mode) if(ET2) P1=displayCodesecond%10+128; else P1=displayCodesecond%10; else P1=displayCode0; delay();void write(unsigned char Bdata) unsigned char i=8; for(;i0;i-) if(Bdata0x01) DATA=1; else DATA=0; SCLK=1; SCLK=0; Bdata=1; void writedata(unsigned char address,Bdata) REST=0; SCLK=0; _nop_(); REST=1; write(address); write(Bdata); REST=0;unsigned char read(unsigned char Bdata) unsigned char tdata=0,i=8; REST=0; SCLK=0; _nop_(); REST=1; write(Bdata); for(;i0;i-) tdata=1; if(DATA) tdata=tdata|0x80; else tdata|=0x00; SCLK=1; SCLK=0; return tdata;void writetime() unsigned char i,time,temp3; temp0=second; temp1=minute; temp2=hour; for(i=0;i3;i+) time=tempi%10; time|=(tempi/10)4; writedata(controladdressi,time); void writeyear() unsigned char i,year0,temp4; temp0=day; temp1=month; temp2=week; temp3=year; for(i=0;i4;i+) year0=tempi%10; year0|=(tempi/10)4; writedata(controladdressi+3,year0); void readtime() unsigned char i,time,temp3; for(i=0;i3;i+) tempi=read(1+controladdressi); time=tempi0x0f; time+=(tempi4)*10; tempi=time; second=temp0; minute=temp1; hour=temp2;void readyear() unsigned char i,year0,temp4; for(i=0;i4;i+) tempi=read(1+controladdressi+3); year0=tempi0x0f; year0+=(tempi4)*10; tempi=year0; day=temp0; month=temp1; week=temp2; year=temp3;void main() initial(); sound(); writedata(0x8e,0x00); writedata(0x84,0x12); writedata(0x8f,0x00); readtime(); writeyear(); readyear(); while(1) switch(select) case 0: display(0,1); break; case 1: if(num=2500) display(1,0); else display(0,0); break; case 2: if(num=2500) display(2,0); else display(0,0); break; case 3: if(num=2500) display(3,0); else display(0,0); break; case 4: if(num=2500) display(4,1); else display(0,1); break; case 5: if(num=2500) display(5,1); else display(0,1); break; case 6: if(num=2500) display(6,1); else display(0,1); break; case 7: writ

温馨提示

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

评论

0/150

提交评论