完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
程序清单
#include #include #define uchar unsigned char #define uint unsigned int /*七段共阴管显示定义*/ uchar code dispcode[ ]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; uchar code dispcode1[ ]={ 0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x88,0x83,0xc6,0xa1,0x86,0x8e}; uchar code dispcode2[ ]={ 0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x88,0x83,0xc6,0xa1,0x86,0x8e}; /*定义并初始化变量*/ uchar seconde=0; uchar minite=0; uchar hour=12; uchar mstcnt=0; ***it P1_0=P1^2; // second 调整定义 ***it P1_1=P1^1; //minite调整定义 ***it P1_2=P1^0; //hour调整定义 /*函数声明*/ void delay(uchar k ); //延时子程序 void time_pro( ); //时间处理子程序 void display( ); //显示子程序 void keyscan( ); //键盘扫描子程序 /*****************************/ /*延时子程序*/ /****************************/ void delay (uchar k) { uchar j; while((k--)!=0) { for(j=0;j<10;j++) {;} } } /**************************/ /*时间处理子程序*/ /**************************/ void time_pro( void) { if(seconde==60) //秒钟设为60进制 { seconde=0; minite++; if( minite==60) //分钟设为60进制 { minite=0; hour++; if(hour==24) //时钟设为24进制 {hour=0; } } } } /*****************************/ /* 显示子程序*/ /*****************************/ void display(void) { P2=0x20; P0=dispcode1[hour/10]; //显示小时的十位 delay(10000); P2=0x10; P0=dispcode2[(hour%10)]; //显示小时的个位 delay(10000); P2=0x08; P0=dispcode1[minite/10]; //显示分的十位 delay(10000); P2=0x04; P0=dispcode2[minite%10]; //显示分的个位 delay(10000); P2=0x02; P0=dispcode[seconde/10]; //显示秒的十位 delay(10000); P2=0x01; P0=dispcode[seconde%10]; //显示秒的个位 delay(10000); } /*******************************/ /*键盘扫描子程序*/ /*******************************/ void keyscan (void) { if(P1_0==0) //按键1秒的调整 { delay(30); if(P1_0==0) { seconde++; if(seconde==60) {seconde=0; } while(!P1_0); } } if(P1_1==0) //按键2分的调整 { delay(30); if(P1_1==0) { minite++; if(minite==60) {minite=0;} while(!P1_1); } } if(P1_2==0) //按键3小时的调整 { delay(30); if(P1_2==0) { hour++; if(hour==24) {hour=0; } while(!P1_2); } } } void timer0(void) interrupt 1 using 0 //定时器0方式1,50ms中断一次 { TH0=0x3c; TMOD = 0x11; mstcnt++; if(mstcnt==20) { seconde++; mstcnt=0; //注意点。对计数单元的清零十分的重要,本次调试中就是 } //因为忽略了这一点,给我早成了很大的被动。 } /**************************/ /*主函数*/ /**************************/ void main(void) { P1=0xff; //初始化p1口,全设为1 TMOD = 0x11; //time0为定时器,方式1 TH0=0x3c; //预置计数初值 TL0=0xb0; EA=1; ET0=1; TR0=1; while (1) { keyscan( ); //按键扫描 time_pro( ); //时间处理 display( ); //显示时间 } } |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 09:51 , Processed in 0.619717 second(s), Total 53, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号