文档详情

基于STC89C52RC单片机的秒表程序设计.doc

发布:2017-08-21约2.63千字共6页下载文档
文本预览下载声明
基于STC89C52RC单片机的秒表程序设计。(长安大学单片机公选课考试题目)。数码管为六位,单片机P0口为段选,P1口位选(列扫描)。键盘为P2口矩阵键盘。 #includereg52.h #includeintrins.h char shzh[6]; char h=0,m=0,s=0; char num=0,Lnum1,Lnum2,Lnum3,Lnum4,flag1; #define TH ((65536-57596)/256) #define TL ((65536-57596)%256) //时间计算过程 char XS[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay(char x) { while(x0) { _nop_(); x--; } } void timer0() interrupt 1 using 1 { TH0=TH; TL0=TL; num++; if(num=16) { num=0; s++; } if(s==60) { s=0; m++; if(m==60) { m=0; h++; if(h==24) {h=0; m=0; s=0;} } } } void display() { char i; shzh[0]=h/10; shzh[1]=h%10; shzh[2]=m/10; shzh[3]=m%10; shzh[4]=s/10; shzh[5]=s%10; P1=0x00; for(i=4;i6;i++) { P0=XS[shzh[i]]; delay(5); P0=0x00; if(i!=5) P1=P1+0x20; } } /*****时显示******/ void display1() { shzh[0]=h/10; shzh[1]=h%10; P1=0x00; P0=XS[shzh[0]]; delay(5); P0=0x00; P1=0x20; P0=XS[shzh[1]]; delay(5); P0=0x00; } /*********分显示******/ void display2() { shzh[2]=m/10; shzh[3]=m%10; P1=0x40; P0=XS[shzh[2]]; delay(5); P0=0x00; P1=0x60; P0=XS[shzh[3]]; delay(5); P0=0x00; } /*********秒显示********/ void display3() { shzh[4]=s/10; shzh[5]=s%10; P1=0x80; P0=XS[shzh[4]]; delay(5); P0=0x00; P1=0xa0; P0=XS[shzh[5]]; delay(5); P0=0x00; } keyscan() { P2=0xf0; if((P20xf0)!=0xf0) { delay(100); if((P20xf0)!=0xf0) { if(P2==0xe0) Lnum1=1; //设置键 if(P2==0xd0) Lnum2=1; //加一键 if(P2==0xb0) Lnum3=1; //减一键 if(P2==0x70) Lnum4=1; //保存键 } } } main() { int k; TMOD=0X01; TH0=TH; TL0=TL; ET0=1; EA=1; TR0=1; while(1) { keyscan(); if(Lnum1==1) { TR0=0; flag1++; if(flag1=4) flag1=0; } /*****加一****/ if(Lnum2==1) { if(flag1==1) { s=0; if(s==60) s=0; } if(flag1==2) { s=0; if(m==60) m=0; } if(flag1==3) { s=0; if(h==24) h=0; } } /*****减一******/ if(L
显示全部
相似文档