秒表计时功能(模仿)单片机程序
2012-10-11 来源:21ic
下面这个仿真效果图,大家可按上面的电路来制作
/** //模仿秒表计时功能,独立按键可控制计时数字的“暂停/走动”。(程序没有考虑计时精确度控制) /*P2.2~P2.4与138译码器输入口连接 /*P1.0连接独立按键 /*P0口输出数据 ***/ #includecode unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //共阴数码管 0-9 '-' '熄灭‘表 unsigned int count,a,b,sec,min,hour; bit c_flag; // 暂停/计时 标志 /*****T1初始化*****/ void timer_1(void) { TH1=0x0ec; TL1=0x078; TR1=1; } /*****数据计数******/ void time_count(viod) { if(hour==60){sec=0,min=0,hour=0;} else if(sec!=59) sec++; else if(min!=59) {sec=0,min++;} else {min=0,hour++;} } /******数字调整*******/ void get_count(unsigned int x) { a=x/10; b=x%10; } /*******按键检测********/ void key_tach(void) { int i,j; j=P1&0x01; if(j==0){ for(i=0;i<=200;i++); j=P1&0x01; if(j==0) {if(c_flag==1) c_flag=0; else c_flag=1;} } } /*******显示程序********/ void display(viod) { int flag; P0=0x00; flag=count%8; switch(flag){ case 0:P2=flag*4; get_count(hour); P0=tab[a]; break; case 1:P2=flag*4; P0=tab[b]; break; case 2:P2=flag*4; P0=tab[10]; break; case 3:P2=flag*4; get_count(min); P0=tab[a]; break; case 4:P2=flag*4; P0=tab[b]; break; case 5:P2=flag*4; P0=tab[10]; break; case 6:P2=flag*4; get_count(sec); P0=tab[a]; break; case 7:P2=flag*4; P0=tab[b]; break; default:return; } } /*******中断服务程序********/ void int1() interrupt 3 { key_tach(); if(c_flag==0) { if(count==7) {count=0;time_count();} else count++;} else { if(count==7) {count=0;} else count++;} display(); timer_1(); } /******主程序*****/ void main() { c_flag=0; count=0; sec=0; min=0; hour=0; TMOD=0x10; EA=1; ET1=1; timer_1(); while(1); }
上一篇:单片机控制三盏LED灯亮灭的程序
下一篇:拉暮式数码管显示
相关文章