完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
实现秒表计数功能,使用定时器和外部中断实现。8号按键代表计时开始/结束,C号按键代表重置为0,为了演示方便,这里上限定为15秒。
代码中有详细的注释: #include ***it WEI=P2^7; ***it DUAN=P2^6; ***it L1=P3^4; unsigned char code dofly_DuanMa[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};// 显示段码值0~9 unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码 void delay(int t) { while(t--); } //第一个参数i代表控制第几个数码管,n代表要显示的数字 void Screen(int i,int n) { P0=0; DUAN=1; DUAN=0; P0=dofly_WeiMa; WEI=1; WEI=0; P0=dofly_DuanMa[n]; DUAN=1; DUAN=0; } int sec; int num; int i; int flag; int main() { flag=1; i=0; num=0; sec=0; WEI=0; DUAN=0; //开中断 EX0=1; IT0=1; EX1=1; IT1=1; //定时器初始化 TMOD |= 0x01; EA=1; ET0=1; TR0=1; L1=0; while(1) { if(num>=10) Screen(3,num/10); Screen(4,num%10); delay(10); Screen(5,10); Screen(6,sec/10); Screen(7,sec%10); } return 0; } void Timer_0() interrupt 1 using 1 { TH0=(65536-10000)/256; TL0=(65535-10000)%256; if(flag==1) { i++; sec++; if(sec==100) //0.1ms sec=0; if(i==101)//1s { i=0; num++; if(num==15) num=0; } } } void ACTION1() interrupt 0 { flag=!flag; } void ACTION2() interrupt 2 { if(flag==0) { Screen(7,0); num=0; sec=0; } } |
|
|
|
只有小组成员才能发言,加入小组>>
2549 浏览 0 评论
1147浏览 2评论
746浏览 1评论
499浏览 0评论
265浏览 0评论
428浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 16:28 , Processed in 1.508936 second(s), Total 78, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号