基于STC89C51单片机的万年制作方法.docVIP

  • 6
  • 0
  • 约7.71千字
  • 约 16页
  • 2018-06-23 发布于浙江
  • 举报
基于STC89C51单片机的万年制作方法

基于51单片机的万年历论文 学校 华侨大学 学院 信息科学与工程学院 班级 10级 集成电路设计与集成系统 摘要 1、 2、74lLS245摘要: 74LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。 74LS245还具有双向三态功能,既可以输出,也可以输入数据。#includereg51.h #includeabsacc.h #define uchar unsigned char #define uint unsigned int /*七段共阳管显示定义*/ uchar code dispcode[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x80}; //此表为 LED 的字模, 共阳数码管 0-9 ,_ 和. /*定义并初始化变量*/ uchar seconde=0;//秒 uchar minite=0;//分 uchar hour=12; //时 uchar day=24;//日 uchar month=3;//月 uint year=2012,a=1,b=1,c=1; //年和下降沿变量 uchar mstcnt=0;//定时器计数,定时50ms,mstcnt满20,秒加1 int dateadd1=0; sbit P1_0=P1^0; //时钟秒或日历天调整 sbit P1_1=P1^1; //时钟分或日历月调整 sbit P1_2=P1^2; //时钟时或日历年调整 sbit P1_3=P1^3; //时间与日历间的切换 /*函数声明*/ void delay(uint k ); //延时子程序 void time_pro( ); //时间处理子程序 void display( ); //时间显示调整子程序 void dateadd(int m); //日历处理子程序 void calendar( ); //日历显示调整子程序 /*延时子程序*/ void delay (uint k) { uchar j; while(k--) { for(j=0;j125;j++) {;} } } /*时间处理子程序*/ void time_pro(void) { if(seconde==60) { seconde=0; minite++; if(minite==60) { minite=0; hour++; if(hour==24) { hour=0; dateadd1++; } } } } /*时间显示调整子程序*/ void display(void) { if(P1_3==1) { /*时间调整键盘扫描子程序*/ if(P1_0!=a)//秒位的调整,下降沿有效 { delay(10); if(P1_0==0) { seconde++; if(seconde==60) { seconde=0; } }a=P1_0; } if(P1_1!=b)//分位的调整,下降沿有效 { delay(10); if(P1_1==0) { minite++; if(minite==60) { minite=0; } }b=P1_1; } if(P1_2!=c)//时位的调整,下降沿有效 { delay(10); if(P1_2==0) { hour++; if(hour==24) { hour=0; } }c=P1_2; } /*时间显示子程序*/ P3=0Xfe; P0=dispcode[hour/10];//时十位 delay(2); P3=0Xfd; P0=dispcode[hour%10];//时个位 delay(2); P3=0Xfb; P0=dispcode[10];//间隔符 - delay(2); P3=0Xf7; P0=dispcode[minite/10];//分十位 delay(2); P3=0Xef; P0=dispcode[minite%10];//分个位 delay(2); P3=0Xdf; P0=dispcode[10];//间隔符 - delay(2); P3=0Xbf; P0=dispcode[seconde/10];//秒十位 dela

文档评论(0)

1亿VIP精品文档

相关文档