用51单片机做秒表设计
求用单片机AT89C51制作电子秒表,都需要什么元件。
元件:89c51,四位共阴极数码管,非自锁按键,10k电阻,10uf电解电容,30pf瓷片电容,10k排阻,晶振 留个邮箱,我把proteus仿真图发给你,以下是程序,临时写的,proteus测试正常,不知道符不符合你的要求,你可以自己再稍作修改。用的是12m晶振 #include#define uchar unsigned char #define uint unsigned int sbit key1=p3^0; //启停键定义 sbit key2=p3^1;//归零键定义 uint time=0; uchar count=0,i=0; uchar code table[]={ 0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90}; //共阴数码管编码 void delay(uchar z) //延时函数 { uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); //12m晶振 } void display(uint temp) //动态显示函数 { uchar qian,bai,shi,ge; qian=temp/1000; bai=temp%1000/100; shi=temp%100/10; ge=temp%10; p0=table[qian]; p2=0x01; delay(2); p2=0x00; p0=table[bai]; p2=0x02; delay(2); p2=0x00; p0=table[shi]; p2=0x04; delay(2); p2=0x00; p0=table[ge]; p2=0x08; delay(2); p2=0x00; } void keyscan() //按键扫描函数 { if(key1==0) { delay(10); //消抖 if(key1==0) { i++; if(i==3) i=0; } while(!key1); //松手检测 } if(i==1) ea=0; if(i==2) ea=1; if(key2==0) { delay(10); if(key2==0) time=0; while(!key2); } } void main() { ea=1; //开总中断 et0=1; //开定时器0中断 tmod=0x01; //设置定时器工作方式 tr0=1; //开启定时器0 th0=(65536-50000)/256; tl0=(65536-50000)%256; //设定定时器初值 p2=0x00; //初始化p2口 while(1) { keyscan(); display(time); } } void timer0() interrupt 1 //中断函数 { th0=(65536-50000)/256; tl0=(65536-50000)%256; count++; if(count==20) { count=0; time++; if(time==10000) time=0; } }