91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

89C52來做定時記數(shù)器程序,51定時程序

454398 ? 2018-09-20 19:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

89C52來做定時記數(shù)器程序,51定時程序

關(guān)鍵字:89c52,定時程序

使用89C52來做定時記數(shù)器


/***************************************************************
功能:實現(xiàn)單片機定時記數(shù)器
***************************************************************/
#include "reg51.h"
sbit DsDat=0x94; /*定義數(shù)據(jù)位輸入給74ALS164數(shù)據(jù)位就是從P14出去的*/
sbit DsClk=0x95; /*定義脈沖信號給164,脈沖信號是從P15出去的*/
sbit Gw=0x90; /*定義個位定形P10*/
sbit Sw=0x91; /*定義十位P11*/
sbit Bw=0x92; /*定義百位P12*/
sbit Qw=0x93; /*定義千位P13*/
sbit sw1=P3^2; //啟動計時器按鈕
sbit sw2=P3^3; //結(jié)束按鈕
sbit sw3=P3^4; //查看按鈕總分鐘按鈕

/*------------------------------------------------
功能:對應0--9顯示碼.
-------------------------------------------------*/
unsigned char code Led_Show[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};//{0x50,0xf5,0x68,0x4a,0x47,0xc2,0xc0,0x5b,0x40,0x42,0x41,0xc4,0xf0,0x4c,0xe0,0xe1,0xff};
unsigned int ms=0;//1000MS為1S作為中間變量
unsigned char ss=0;//作為秒的中間變量
static unsigned int nn=0;//分的中間變量
static unsigned int all_nn=0;//總的時間分鐘
unsigned int ms1=0;//定時器1 MS的中間變量
unsigned int ss1=0;//定時器1 秒的中間變量
static unsigned char alltime_show=0;//顯示總分鐘的標示
static unsigned char time_shong=0;//
/*-------------------------------------------------
功能:1MS延時子程序
-------------------------------------------------*/
void Delay_xMs(unsigned int x)
{
unsigned int i,j;
for( i =0;i < x;i++ )
{
for( j =0;j<500;j++ );
}
}
/*-------------------------------------------------
功能:數(shù)碼管顯示子程序
-------------------------------------------------*/
void Hc164(unsigned char temp )
{//temp是要顯示的定符
unsigned char i,temp1;
temp1 = Led_Show[temp];
for(i = 0;i < 8;i++ )
{
// DsClk = 0;/*先不給脈沖給164*/
if( temp1 & 0x80 )
DsDat = 1;/*數(shù)據(jù)不傳輸*/
else
DsDat= 0;/*一個位的數(shù)據(jù)傳輸*/

DsClk = 1;/*給脈沖給164*/
DsClk = 0;/*先不給脈沖給164*/
temp1 <<=1;
}
}
/*to BCD控制 個十百千 位*/
void toBCD(unsigned int y1)
{
unsigned char x1,x2,x3,x4,y2,y3,y4;
x1=y1/1000;/*顯示千位*/
if(y1<1000)
{}
else
{
Hc164(x1);
Qw=0;
Delay_xMs(1);
Qw=1;
}

y2=y1%1000;
x2=y2/100;

if (y1<100)
{}
else
{
Hc164(x2);/*顯示百位*/
Bw=0;
Delay_xMs(1);
Bw=1;
}
y3=y2%100;
x3=y3/10;
if(y1<10)
{}
else
{
Hc164(x3);/*顯示十位*/
Sw=0;
Delay_xMs(1);
Sw=1;
}
y4=y3%10;
x4=y4;


Hc164(x4);/*顯示個位*/
Gw=0;
Delay_xMs(1);
Gw=1;
}
/*------------------------------------------------
定時器0的初始化工作設為1MS中斷一次
-------------------------------------------------*/
void T0_first(void)
{
TMOD=0x01;//定時器0工作方式1
TH0=0xFC;
TL0=0x66;
EA=1;//CPU啟動
ET0=1;//T/C0開中斷
TR0=1;//啟動記數(shù)
}
/*------------------------------------------------
定時器T0關(guān)中斷
--------------------------------------------------*/
void T0_out(void)
{
EA=0;//CPU關(guān)中斷
ET0=0;//T/C0關(guān)中斷
TR0=0;//關(guān)記數(shù)器
}
/*------------------------------------------------
中斷函數(shù)1MS中斷一次
--------------------------------------------------*/
void timer0(void)interrupt 1 using 1
{
TH0=0xFC;
TL0=0x66;
ms=ms+1;
if (ms==1000)//夠了1S
{
ms=0;
ss=ss+1;
if (ss==60)//夠了1分了,
{
ss=0;
nn=nn+1;//分鐘加1
all_nn=all_nn+1;//總的時間分鐘加1
if(nn==9999)
nn=0;
if (all_nn==9999)
all_nn=0;
}
}

}
//////////////////////////////////////////////////////
/*------------------------------------------------
定時器1的初始化工作設為1MS中斷一次
-------------------------------------------------*/
void T1_first(void)
{
TMOD=0x10;//定時器1工作方式1
TH1=0xFC;
TL1=0x66;
EA=1;//CPU啟動
ET1=1;//T/C1開中斷
TR1=1;//啟動記數(shù)
}
/*------------------------------------------------
定時器T1關(guān)中斷
--------------------------------------------------*/
void T1_out(void)
{
EA=0;//CPU關(guān)中斷
ET1=0;//T/C1關(guān)中斷
TR1=0;//關(guān)記數(shù)器
}
/*------------------------------------------------
中斷函數(shù)1MS中斷一次
--------------------------------------------------*/
void timer1(void)interrupt 3 using 3
{
TH1=0xFC;//重裁定時器1
TL1=0x66;
ms1=ms1+1;
if (ms1==1000)//夠了1S
{
ms1=0;
ss1=ss1+1;
if(ss1>=4)
{
//if (time_shong==1)//這說明先前已經(jīng)有啟動按鈕按下
alltime_show=time_shong;
T1_out();//停此定時器1
//EA=1;//CPU開中?
if (alltime_show==1)
T0_first();//重切縷?

}
}

}

/*-------------------------------------------------
主程序
功能:在數(shù)碼管上在數(shù)碼管上顯示出啟動的總時間,以分鐘為單位,如果要查總運行時間請按第三個按鈕,如果要停止當前運行狀態(tài),請按第二個按鈕,如果要啟動,請按第一個按鈕
-------------------------------------------------*/
void main()
{
while(1)
{
if (sw1==0)
{
alltime_show=1;
ms=0;//中間變量MS清零
ss=0;//中間變量ss清零
nn=1;//中間變量分清零
T0_first();//初始化定時器0
}
if(sw2==0)
{
alltime_show=2;
ms=0;//中間變量MS清零
ss=0;//中間變量ss清零
nn=0;//中間變量分清零

}
if(sw3==0)
{
if (alltime_show!=3)//如果在查看總分鐘以前開始按鈕被按下時,
time_shong=alltime_show;//先保存下來以后有用,
alltime_show=3;
T1_first();//啟動定時器1
}
switch(alltime_show)
{
case 1://啟動記時器
{


toBCD(nn);//在數(shù)碼管上顯示
break;
}
case 2:
{

T0_out();//關(guān)閉T/C0定時器中斷
toBCD(nn);//在數(shù)碼管上顯示
break;
}
case 3:
{

toBCD(all_nn);//顯示出總分
break;
}
}
if (alltime_show==0)

//if (time_go==0&&time_out==0&&alltime_show==0)
toBCD(0);//一開始就顯示0;

}
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    LM555QML定時器:功能特性、應用及設計要點

    LM555QML定時器:功能特性、應用及設計要點 在電子設計領(lǐng)域,定時器是一種常用的器件,可用于生成精確的時間延遲或振蕩。TI公司的LM555QML定時器就是這樣一款高度穩(wěn)定的器件,下面我們
    的頭像 發(fā)表于 02-10 15:40 ?181次閱讀

    AT89LP51/52微控制:高效能與低功耗的完美融合

    AT89LP51/52微控制:高效能與低功耗的完美融合 在電子工程師的設計世界里,尋找一款性能卓越、功能豐富且功耗合理的微控制是一項關(guān)鍵任務。AT
    的頭像 發(fā)表于 02-09 17:20 ?338次閱讀

    LM555-MIL定時器:高精度定時與振蕩的理想之選

    LM555-MIL定時器:高精度定時與振蕩的理想之選 在電子設計領(lǐng)域,定時器和振蕩是極為關(guān)鍵的元件,它們廣泛應用于各種需要精確時間控制的場景。TI公司的LM555-MIL
    的頭像 發(fā)表于 02-09 10:55 ?443次閱讀

    LAT1173高精度定時器的同步功能應用筆記

    STM32G474 所含的高精度定時器(HRTIMER)其實包含了多個定時器,多個定時器之間可以單獨工作,也可以進行同步,且高精度定時器還能與片上的其他
    發(fā)表于 01-11 17:32 ?0次下載

    實現(xiàn)一個嵌入式的軟件定時器

    1.什么是軟件定時器 軟件定時器是用程序模擬出來的定時器,可以由一個硬件定時器模擬出成千上萬個軟件定時器
    發(fā)表于 12-10 08:29

    CW32定時器及中斷介紹

    ,否則將觸發(fā)系統(tǒng)復位。WWDT 通常被用來監(jiān)測有嚴格時間要求的程序執(zhí)行流程,防止由外部干擾或未知條件造成應用程序的執(zhí)行異常, 導致發(fā)生系統(tǒng)故障。 01 CW32定時器中斷 定時器中斷
    發(fā)表于 12-01 07:08

    C語言程序的結(jié)構(gòu)

    ,87LPC764有4KB的Flash ROM,而筆者的程序量只有2KB多點,因而第一個想法是改用C語言作為主要的開發(fā)語言,應該不至于導致代碼空間不夠用。其次,考慮到需要定時功能的模塊(或稱任務,以下統(tǒng)稱任務
    發(fā)表于 11-26 08:12

    單片機定時器中斷

    51單片機內(nèi)部共有兩個16位可編程的定時器/計數(shù),即定時器T0和定時器T1。它們既有定時功能又
    發(fā)表于 11-24 06:22

    使用系統(tǒng)定時器SysTick實現(xiàn)精確延時微秒和毫秒函數(shù)

    到 0 時,將從RELOAD 寄存中自動重裝載定時初值,開始新一輪計數(shù)。使用內(nèi)核的SysTick定時器實現(xiàn)延時,可以不占用系統(tǒng)定時器,由
    發(fā)表于 11-20 07:12

    PWM、定時器、SysTick 區(qū)別及應用場景

    。下面我們梳理清楚。一、基本概念定時器(Timer)MCU內(nèi)最基礎(chǔ)的計數(shù)外設,通過計數(shù)時鐘周期實現(xiàn)定時、計數(shù)功能。多數(shù)MCU內(nèi)部有多個通用定時器,可配置為
    的頭像 發(fā)表于 11-17 10:53 ?571次閱讀
    PWM、<b class='flag-5'>定時器</b>、SysTick 區(qū)別及應用場景

    看門狗定時器、復位源、異常處理機制科普

    的作用、原理與應用。一、看門狗定時器(WatchdogTimer)1.原理看門狗定時器本質(zhì)上是一個獨立定時器,持續(xù)倒計時:軟件在規(guī)定時間內(nèi)“喂狗”(重置看門狗計數(shù)
    的頭像 發(fā)表于 11-17 10:53 ?1401次閱讀
    看門狗<b class='flag-5'>定時器</b>、復位源、異常處理機制科普

    SysTick系統(tǒng)滴答定時器簡介

    SysTick—系統(tǒng)定時器是屬于CM33內(nèi)核中的一個外設,內(nèi)嵌在NVIC中。系統(tǒng)定時器是一個24bit的向下遞減的計數(shù),計數(shù)每計數(shù)一次的時間為 1/SYSCLK,一般我們設置系統(tǒng)時
    的頭像 發(fā)表于 09-23 09:50 ?1663次閱讀
    SysTick系統(tǒng)滴答<b class='flag-5'>定時器</b>簡介

    大彩講堂:VisualHMI-LUA教程-定時器的使用指南

    定時器的使用
    的頭像 發(fā)表于 08-31 16:59 ?1213次閱讀
    大彩講堂:VisualHMI-LUA教程-<b class='flag-5'>定時器</b>的使用指南

    AT89C51 單片機中文資料

    電子發(fā)燒友網(wǎng)站提供《AT89C51 單片機中文資料.pdf》資料免費下載
    發(fā)表于 06-24 15:29 ?1次下載

    MCU定時器/計數(shù)

    RISC-V核低功耗MCU通過靈活的定時器架構(gòu)、低功耗模式適配及硬件級中斷優(yōu)化,在工業(yè)控制、智能家居等場景中實現(xiàn)高精度計時與能耗控制的協(xié)同設計,滿足復雜任務調(diào)度與實時響應的雙重需求?。 一、?硬件
    的頭像 發(fā)表于 04-27 13:54 ?821次閱讀