采用8位数码管进行秒表设计。
仿真原理图:

程序设计:
/*数码管秒表设计*/#include<reg52.h>unsigned 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; } } }
641

被折叠的 条评论
为什么被折叠?



