完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
程序如下: /* 1、程序目的:使用定时器学习秒表计时,记录8组数据,通过上翻、下翻键查看记录的数据 2、硬件要求:数码管、晶振12M */ #include Code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管 0-9 code unsigned char tab1[]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF} ;//共阴数码管0-9带小数点 ***it key1 = P1^0; //开始、暂停 ***it key2 = P1^1; //记数 ***it key3 = P1^2; //上翻 ***it key4 = P1^3; //下翻 ***it key5 = P1^4; //清零 static unsigned char ms,sec; static unsigned char Sec[8],Ms[8]; static int i ,j; void delay(unsigned int cnt) //延时程序 { while(--cnt); } void main() { unsigned char key3_flag=0,key4_flag=0; TMOD |=0x01;//定时器0 10ms in 12M crystal 用于计时 TH0=0xd8; TL0=0xf0; ET0=1; TR0=0; TMOD |=0x10; //定时器1用于动态扫描 TH1=0xF8; TL1=0xf0; ET1=1; TR1=1; EA =1; sec=0; //初始化 ms=0; P1=0xff; i=0; j=0; start: while(1) { //开始、暂停 if(!key1) //判断是否按下 { delay(50); //去抖 if(!key1) while(!key1) //等待按键释放 {;} TR0=!TR0; } //记录 if(!key2) //判断是否按下 { delay(50); //去抖 if(!key2) { while(!key2) //等待按键释放 {;} if(i==8) //8组数据记录完毕 {TR0=0; goto start;} Sec= sec; //将数据存入数组 Ms= ms; i++; } } //上翻 if(!key3) { delay(50); if(!key3) { while(!key3) {;} TR0=0; key3_flag=1; //按键3标志 if(j==i) goto start; else if(key4_flag) j+=2; key4_flag=0; sec=Sec[j];ms=Ms[j]; //显示数组里的内容 j++; } } //下翻 if(!key4) { delay(50); if(!key4) { while(!key4) {;} TR0=0; key4_flag=1; //按键4标志 if(j<0) goto start; else if(key3_flag) j-=2; key3_flag=0; sec=Sec[j];ms=Ms[j]; //显示数组里的内容 j--; } } //清零 if(!key5) { delay(50); if(!key5) while(!key5) {;} TR0=0; ms=0; sec=0; for(i=0;i<8;i++) { Sec=0;Ms=0; } i=0; } } } /********************************/ /* 定时中断1 */ /********************************/ void time1_isr(void) interrupt 3 using 0//定时器1用来动态扫描 { static unsigned char num; TH1=0xF8;//重入初值 TL1=0xf0; switch(num) { case 0: P2=0xfe;P0=tab[sec/10];break;//显示秒十位 case 1: P2=0xfd;P0=tab1[sec%10];break; //显示秒个位 case 2: P2=0xfb;P0=tab[ms/10];break;//显示十位 case 3: P2=0xf7;P0=tab[ms%10];break; //显示个位 default:break; } num++; if(num==4) num=0; } /********************************/ /* 定时中断0 */ /********************************/ void tim(void) interrupt 1 using 1 { TH0=0xd8;//重新赋值 TL0=0xf0; ms++;//毫秒单元加1 if(ms==100) { ms=0;//等于100时归零 sec++;//秒加1 if(sec==60) { sec=0;//秒等于60时归零 } } } |
|
相关推荐
2 个讨论
|
|
实在搞不定可以找我,点击下面的链接
|
|
|
|
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
5831 浏览 3 评论
7105 浏览 1 评论
7352 浏览 0 评论
Protues中自己封装的芯片元件无Program File、Clock Frequency选项怎么解决,求求大神了!
9138 浏览 1 评论
基于51单片机的车辆倒车雷达报警系统,HC-SR04超声波测距,全套资料
1263 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 10:00 , Processed in 0.723690 second(s), Total 73, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号