亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標(biāo)題: 利用單片機定時器設(shè)計秒表 四位共陰數(shù)碼管 小數(shù)點后一位、帶蜂鳴器 [打印本頁]

作者: vanei    時間: 2020-4-25 13:39
標(biāo)題: 利用單片機定時器設(shè)計秒表 四位共陰數(shù)碼管 小數(shù)點后一位、帶蜂鳴器
本人單片機作品之一,純原創(chuàng)手打
一、實驗?zāi)康?br /> 自主設(shè)計電路,設(shè)計一個用于秒表及拓展功能的定時計數(shù)器。

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

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



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

sbit start=P2^4;           //開始
sbit reset=P2^5;         //復(fù)位

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

unsigned char led_times,sounder_times,sounder_flag,ge,shi,bai,qian;      
/*負(fù)責(zé)判斷l(xiāng)ed亮、sounder響,千位百位在小數(shù)點前,十位是小數(shù)點后一位 小數(shù)點后一位是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){      //一分鐘最多六十,十位滿六重新循環(huán)
         qian=0;bai=0;shi=0;ge=0;
         //TR0=0;
         }
      }
}


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

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

   P22=1;        //位選
   P21=0;
   P0=led[bai]|0x80;//或運算,為的是段選碼和dp位,都置一,為了讓百位的小數(shù)點亮起來
   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改變一次狀態(tài)就是一秒閃一次
      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++;
      }
}
四、實驗結(jié)果及分析
成功完成了要求的程序以及拓展程序,一秒LED閃一次,十秒蜂鳴器響一次。
在本次試驗中,我將0xD8給TH0,0xF0給低位,初始化65536-D8F0=10000,也就是定時10ms,每中斷十次,也就是100ms,給小數(shù)點后的一位+1,滿十則進,以此類推。
并且加了用來記定時到了多少次的變量,滿50次(1S)則控制燈亮/滅,20次燈亮/滅(也就是10s)則控制蜂鳴器響。

原理圖及程序在附件工程文件中
定時計數(shù)器之秒表(帶拓展).zip (21.64 KB, 下載次數(shù): 80)


作者: li159239    時間: 2020-4-25 15:35
謝謝樓主分享
作者: lj521    時間: 2020-11-19 13:42
這里面是什么文件啊,打不開。。。





歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1