/**************************************************************
*【程序名称】: 100s跑表
*【电路连接】: 跳线帽短接J1
*【程序实现】: 数码管记录跑表的时间 * ************************************************************/
#include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit wela1 = P1^0; //第一位 sbit wela2 = P1^1; //第二位 sbit wela3 = P1^2; //第三位 uint Count,Tcount; sbit K1=P3^3; sbit K2=P3^4; uchar Display_Buffer[3]={0,0,0}; uchar codetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f};//不带小数点的共阴数码管段值
/***************************延时函数**************************/ void delayms(uchar x) { uchar i; while(x--) { for(i=0;i<113;i++); } } /***************************************************************/
/****************************显示函数***************************/ void display() { Display_Buffer[2]=Count/100; //取出count里的个位十位百位 Display_Buffer[1]=Count%100/10; Display_Buffer[0]=Count%10;
P0=table[Display_Buffer[0]]; P1=0X01; delayms(5); wela1=0;
P0=table[Display_Buffer[1]]; P1=0X02; delayms(5); wela2=0;
P0=table[Display_Buffer[2]]; P1=0X04; delayms(5); wela3=0; }
/**********主函数**************/ void main() { TMOD=0X02; TH0=256-200; TL0=256-200; IE=0X82; TR0=0;
while(1) { if(K1==0) { delayms(5); if(K1==0) { TR0=~TR0; while(!K1); } }
if(K2==0) { delayms(5); if(K2==0) { Count=0; //TR0=~TR0; while(!K2); } } display(); } } /**********中断服务程序************/ void Timer0_isr(void) interrupt 1 { ++Tcount; if(Tcount==5000) { Tcount=0; Count++; if(Count==1000) { Count=0; } }
}
|