欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6222|回復: 2
收起左側

利用單片機定時器設計秒表 四位共陰數碼管 小數點后一位、帶蜂鳴器

[復制鏈接]
ID:724857 發表于 2020-4-25 13:39 | 顯示全部樓層 |閱讀模式
本人單片機作品之一,純原創手打
一、實驗目的
自主設計電路,設計一個用于秒表及拓展功能的定時計數器。

二、實驗內容
設計原理圖及編寫代碼,實現以下功能:
采用中斷方式實現1分鐘的秒表定時器,從00顯示至59,再返回00開始循環。
擴展部分:
1、為秒表增加多一位小數位;
2、每一秒閃爍一次LED,每10秒響一次蜂鳴器。

三、實驗方法及步驟
使用四位共陰數碼管、AT89C51單片機、按鈕、蜂鳴器、三極管、LED、電阻等原件設計出以下電路:

圖片1.png

編寫單片機代碼,仿真運行。
#include<reg51.h>
#include<stdio.h>
sbit P20=P2^0;          //四位數碼管位選
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;

sbit start=P2^4;           //開始
sbit reset=P2^5;         //復位

sbit redled=P1^0;          //控制led亮不亮
sbit sounder=P1^1;        //控制蜂鳴器響不響

unsigned char led_times,sounder_times,sounder_flag,ge,shi,bai,qian;      
/*負責判斷led亮、sounder響,千位百位在小數點前,十位是小數點后一位 小數點后一位是100ms,十倍10ms*/
unsigned char code led[ ]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};  //共陰段選碼

void display();
void delay_ms(unsigned int ms)  //消隱用延時
{
   unsigned char a;
   while(ms--)
      for(a=125;a>0;a--);
}

void T0_init( )        //定時器T0初始化
{
   TMOD=0x01;
   TH0=0xD8;       //10ms定時
   TL0=0xF0;
   EA=1;
   ET0=1;
   redled=0;//初始led不亮
   sounder=0;//初始不響
}

void main()
{         
   T0_init( );
   while(1){         
      display( );
      while(!start)//開始/暫停鍵
      {           
         display( );
         if(start)
         TR0=!TR0;
      }
      while(!reset)         //清零鍵
      {
         display( );
         if(reset)
         TR0=0;
         qian=0;
         bai=0;
         shi=0;
         ge=0;
      }
      if(bai==10){        //滿十進位
         bai=0;
         qian++;
         }
      if(qian==6){      //一分鐘最多六十,十位滿六重新循環
         qian=0;bai=0;shi=0;ge=0;
         //TR0=0;
         }
      }
}


void display( )
{
   P23=0;        //位選
   P0=led[0];        //反正只要求小數點后一位,干脆最后一位就一直是0
   delay_ms(5); //消隱

   P23=1;        //位選
   P22=0;
   P0=led[shi];
   delay_ms(5); //消隱

   P22=1;        //位選
   P21=0;
   P0=led[bai]|0x80;//或運算,為的是段選碼和dp位,都置一,為了讓百位的小數點亮起來
   delay_ms(5); //消隱

   P21=1;        //位選
   P20=0;
   P0=led[qian];
   delay_ms(5); //消隱
   P20=1;
}

void T0int( ) interrupt 1 //定時器T0中斷 方式1
{
   TH0=0xD8;       //重新給a,10ms定時  65536-55536(a)  
   TL0=0xF0;
   ge++;
   led_times++;

   if(led_times==50){   //50*10ms=0.5s  一秒亮一次,一次亮0.5秒
      redled=~redled;        //閃爍,每0.5s改變一次狀態就是一秒閃一次
      led_times=0;
      sounder_times++;
      sounder=0;
      }
   if(sounder_times==20){//1000*10ms=10s  蜂鳴器響一次
      sounder=1;
      sounder_times=0;
      }
   if(ge==10){
      ge=0;
      shi++;
      }
   if(shi==10){
      shi=0;
      bai++;
      }
}
四、實驗結果及分析
成功完成了要求的程序以及拓展程序,一秒LED閃一次,十秒蜂鳴器響一次。
在本次試驗中,我將0xD8給TH0,0xF0給低位,初始化65536-D8F0=10000,也就是定時10ms,每中斷十次,也就是100ms,給小數點后的一位+1,滿十則進,以此類推。
并且加了用來記定時到了多少次的變量,滿50次(1S)則控制燈亮/滅,20次燈亮/滅(也就是10s)則控制蜂鳴器響。
51hei.png
原理圖及程序在附件工程文件中
定時計數器之秒表(帶拓展).zip (21.64 KB, 下載次數: 80)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:737761 發表于 2020-4-25 15:35 | 顯示全部樓層
謝謝樓主分享
回復

使用道具 舉報

無效樓層,該帖已經被刪除
無效樓層,該帖已經被刪除
ID:581952 發表于 2020-11-19 13:42 | 顯示全部樓層
這里面是什么文件啊,打不開。。。
回復

使用道具 舉報

6#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表