秒表計時器,仿真+程序已成功
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (122.3 KB, 下載次數: 73)
下載附件
2021-7-3 17:48 上傳
單片機源程序如下:
- #include<reg52.h>
- #define uchar unsigned char //無符號字符型宏定義
- #define MS 2000
- uchar code led1[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //不帶小數點數碼管段碼
- uchar code led2[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//帶小數點數碼管段碼
- uchar n=0,m=0,j=0,k=0;//四位要顯示數據
- uchar keyln=0; //按鍵值
- sbit key=P3^3; //按鍵接口
- sbit key2=P3^2;
- sbit key1=P3^1;
- sbit key4=P3^4;
- uchar bit_;
- uchar num;
- uchar z,x,c,v;
- uchar h;
- uchar flag=0;
- uchar val[5][5];
- char val_index;
- uchar bc[4];
- uchar bc2[4];
- void Display2(void) ;
- void Display3(void) ; //顯示函數;
- void Delay_ms(uchar s);//延時函數聲明
- void Display(void); //顯示函數聲明
- void disp_1();
- void disp_2();
- void disp_3();
- void disp_4();
- void main(void) // 主函數
- {
- TMOD=0X01; //定時器0方式1
- TH0=(65536-8000)/256; //預設初值高位
- TL0=(65536-8000)%256; //預設初值低位
- ET0=1; //開定時器0中斷
- EA=1; //開總中斷
- TR0=0; //定時器關
- z=x=c=v=0;
- while(1) //主函數循環
- {
-
- if(key==0) //判斷按鍵是否按下
- {
- Delay_ms(50); //延時,軟件消抖
- if(key==0) //再次判斷按鍵是否一直被按下
- {
- TR0=!TR0;
- while(!key); //等待按鍵彈起
- }
- }
- if(key4==0) //判斷按鍵是否按下
- {
- Delay_ms(50); //延時,軟件消抖
- if(key4==0) //再次判斷按鍵是否一直被按下
- {
- n=m=j=k=0;
- while(!key4); //等待按鍵彈起
- }
- }
- Display();//正常模式下數據
- }
- }
- void timer0(void) interrupt 1 //定時器0中斷服務子程序
- {
- TH0=(65536-8000)/256; //重賦初值高位
- TL0=(65536-8000)%256; //重賦初值低位
- //num++;
-
- n++; //秒表最低位+1
- if(n==10) //如果最低位=10
- {
- n=0; //則最低位清0
- m++; //前一位+1
- if(m==10) //以下如此推理
- {
- m=0;
- j++;
- if(j==10)
- {
- j=0;
- k++;
- if(k==6) //當最高位為10時,全部清零
- {
- n=0;
- m=0;
- j=0;
- k=0;
- }
- }
- }
- }
- }
- void Delay_ms(uchar s) //延時函數
- {
- uchar i;
- for(i=0;i<s;i++);
- }
- void Display(void) //顯示函數
- {
- P2=0XF7; //最低位
- P1=led1[n];
- Delay_ms(MS);
- P2=0XFF;
- P2=0XFB; //第三位
- P1=led1[m];
- Delay_ms(MS);
- P2=0XFF;
- P2=0XFD; //第二位
- P1=led2[j];
- Delay_ms(MS);
- P2=0XFF;
-
- P2=0XFE; //第一位
- P1=led1[k];
- Delay_ms(MS);
- P2=0XFF;
- }
- void Display2(void) //顯示函數
- {
- P2=0XF7; //最低位
- P1=led1[bc[0]];
- Delay_ms(MS);
- P2=0XFF;
- P2=0XFB; //第三位
- P1=led1[bc[1]];
- Delay_ms(MS);
- P2=0XFF;
- P2=0XFD; //第二位
- P1=led2[bc[2]];
- Delay_ms(MS);
- P2=0XFF;
-
- P2=0XFE; //第一位
- P1=led1[bc[3]];
- Delay_ms(MS);
- P2=0XFF;
- }
- void Display3(void) //顯示函數
- {
- P2=0XF7; //最低位
- P1=led1[bc2[0]];
- Delay_ms(MS);
- P2=0XFF;
- P2=0XFB; //第三位
- P1=led1[bc2[1]];
- Delay_ms(MS);
- P2=0XFF;
- P2=0XFD; //第二位
- P1=led2[bc2[2]];
- Delay_ms(MS);
- P2=0XFF;
-
- P2=0XFE; //第一位
- P1=led1[bc2[3]];
- Delay_ms(MS);
- P2=0XFF;
-
- }
復制代碼
51hei.png (10.1 KB, 下載次數: 69)
下載附件
2021-7-3 17:49 上傳
所有資料51hei提供下載(Proteus是7.5版本的工程,不要用高版本打開):
秒表基礎版.rar
(73.07 KB, 下載次數: 130)
2021-7-2 21:14 上傳
點擊文件名下載附件
秒表計時器 下載積分: 黑幣 -5
|