采用8位數位管進行秒表設計。仿真原理圖:
程式設計:
/*數位管秒表設計*/#includeunsigned char LedBuff[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};unsigned char code LedChar[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共陽/*unsigned char code LedChar[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共陰*/void delay_ms(unsigned int ms) { unsigned int a,b; for(a=ms;a>0;a--) for(b=123;b>0;b--);}void main(){ unsigned char cnt=0; unsigned long sec=0; unsigned char i=0; TMOD=0X01; TH0=0XB8; TL0=0X00; TR0=1; while(1) { if(TF0==1) { TF0=0; TH0=0XB8; TL0=0X00;//計時器溢出一次0.002秒 cnt++; if(cnt>=50)//溢出100次為1秒 { cnt=0; sec++; LedBuff[0]= LedChar[sec%10]; LedBuff[1]= LedChar[sec/10%10]; LedBuff[2]= LedChar[sec/100%10]; LedBuff[3]= LedChar[sec/1000%10]; LedBuff[4]= LedChar[sec/10000%10]; LedBuff[5]= LedChar[sec/100000%10]; } } for(i=0;i<6;i++) { P0=0xff; switch(i) //位選,選擇點亮的數位管, { case(0): P1=0x20; break;//顯示第0位 case(1): P1=0x10; break;//顯示第1位 case(2): P1=0x08; break;//顯示第2位 case(3): P1=0x04; break;//顯示第3位 case(4): P1=0x02; break;//顯示第4位 case(5): P1=0x01; break;//顯示第5位 default: break; } P0=LedBuff[i];//發送段碼 delay_ms(1); //間隔一段時間掃描 P0=0xFF; } }}
為驗證仿真設計,仿真視訊如下:
溫馨提示:需要仿真資料請背景私信!