/**************************************************************
*【程序名稱】: 100s跑表
*【電路連接】: 跳線帽短接J1
*【程序?qū)崿F(xiàn)】: 數(shù)碼管記錄跑表的時間 * ************************************************************/
#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};//不帶小數(shù)點(diǎn)的共陰數(shù)碼管段值
/***************************延時函數(shù)**************************/ void delayms(uchar x) { uchar i; while(x--) { for(i=0;i<113;i++); } } /***************************************************************/
/****************************顯示函數(shù)***************************/ 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; }
/**********主函數(shù)**************/ 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(); } } /**********中斷服務(wù)程序************/ void Timer0_isr(void) interrupt 1 { ++Tcount; if(Tcount==5000) { Tcount=0; Count++; if(Count==1000) { Count=0; } }
}
|