标题:单片机秒表实验
内容:这是前两个星期做的秒表的文件,
单片机c语言版,里面的功能可以实现三分钟的计时,
有三个按键,一个按键按下,可以停止计数,
一个按下可以开始计数,一个按下可以复位。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include"reg52.h"
- #define uchar unsigned char
- sbit s1=P3^2;
- sbit s2=P3^3;
- sbit s3=P3^4;
- uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- uchar time=0; //记录中断次数
- uchar second;
- void delay()
- { uchar i,j;
- for(i=0;i<20;i++)
- for(j=0;j<20;j++);}
- main()
- {TMOD=0x01;
- ET0=1;
- EA=1;
- second=0;
- while(1)
- { P2=0xfe;
- P0=seg[second/100];
- delay();
- P2=0xfd;
- P0=seg[second/10%10];
- delay();
- P2=0xfb;
- P0=seg[second%10];
- delay();
- if(s1==0){TH0=0xee;TL0=0x00;TR0=1;}
- if(s2==0)TR0=0;
- if(s3==0){second=0;
- P2=0xfe; //选择第一个数码管点亮
- P0=seg[second/100]; //显示秒位0
- delay();
- P2=0xfd; //选择第二个数码管点亮
- P0=seg[second/10%10]; //显示0.1秒位0
- delay();
- P2=0xfb; //选择第三个数码管点亮
- P0=seg[second%10]; //显示0.01秒位0
- delay();
- }
- while(P3&0x20==0x00);//消除抖动
- while(P3&0x10==0x00);//消除抖动
- while(P3&0x08==0x00);}}//消除抖动
- void t0() interrupt 1 using 1
- {
- TH0=0xee;
- TL0=0x00;
- time++;
- if(time==200) //中断200次,共计时200*5ms=1000ms=1s
- {time=0;
- second++;
- P2=0xfe; //选择第一个数码管点亮
- P0=seg[second/100]; //显示秒位0
- delay();
- P2=0xfd; //选择第二个数码管点亮
- P0=seg[second/10%10]; //显示0.1秒位0
- delay();
- P2=0xfb; //选择第三个数码管点亮
- P0=seg[second%10]; //显示0.01秒位0
- delay();
- }
- if(second==180)
- {TR0=0;
- second=180; }
- else TR0=1;}
复制代码
所有资料51hei提供下载:
秒表.zip
(60.14 KB, 下载次数: 35)
|