51定時器/計數器齊上陣,借鑑
NE555脈衝發生器
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
//--定義使用的IO--//
#define GPIO_DIG P0
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//顯示0~F的值
u8 DisplayData[8];
//--定義全域性變數--//
unsigned long Freq; //用來存放要顯示的頻率值
unsigned long TimeCount; //用於計算1S鐘的
void delay(u16 i)
{
while(i--);
}
void DigDisplay()//數碼管動態掃描函式,迴圈掃描8個數碼管顯示
{
u8 i;
for(i=0;i<8;i++)
{
switch(i) //位選,選擇點亮的數碼管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;//顯示第0位
case(1):
LSA=1;LSB=0;LSC=0; break;//顯示第1位
case(2):
LSA=0;LSB=1;LSC=0; break;//顯示第2位
case(3):
LSA=1;LSB=1;LSC=0; break;//顯示第3位
case(4):
LSA=0;LSB=0;LSC=1; break;//顯示第4位
case(5):
LSA=1;LSB=0;LSC=1; break;//顯示第5位
case(6):
LSA=0;LSB=1;LSC=1; break;//顯示第6位
case(7):
LSA=1;LSB=1;LSC=1; break;//顯示第7位
}
GPIO_DIG=DisplayData[i];//傳送段碼
delay(10); //間隔一段時間掃描
GPIO_DIG=0x00;//消隱
}
}
void Timer_Config()//配置定時/計數器T0和T1
{
//--定時器T1做計數器,工作方式1(16位定時器),只由TRx開啟計數器--//
//--定時器T0做定時器,工作方式1(16位定時器),只由TRx開啟定時器--//
TMOD=0x51;
//--設定定時器晶振為12MHZ時定時50ms--//
TH0=0x3C;
TL0=0xB0;
//--開啟中斷-//
ET0=1;
ET1=1;
EA=1;
//--開啟定時器*/
TR0=1;
TR1=1;
}
void main()
{
Timer_Config();
while(1)
{
if(TR1 == 0) //當計數器停下的時候,表明計數完畢
{
Freq = Freq + TL1; //讀取TL的值
Freq = Freq + (TH1 * 256); //讀取TH的值
//--求頻率的個十百千萬十萬位--//
DisplayData[0] = smgduan[Freq%1000000/100000];
DisplayData[1] = smgduan[Freq%100000/10000];
DisplayData[2] = smgduan[Freq%10000/1000];
DisplayData[3] = smgduan[Freq%1000/100];
DisplayData[4] = smgduan[Freq%100/10];
DisplayData[5] = smgduan[Freq%10];
//--顯示完,重新計算下一次頻率。--//
Freq = 0;//將計算的頻率清零
TH1 = 0; //將計數器的值清零
TL1 = 0;
TR0 = 1; //開啟定時器
TR1 = 1; //開啟計數器
}
//--顯示求得的數值--//
DigDisplay();
}
}
void Timer0() interrupt 1
{
//--12MHZ設定定時50ms的初值--//
TH0=0x3C;
TL0=0xB0;
TimeCount++;
if(TimeCount==20)//計時到1S
{
TR0=0;
TR1=0;
TimeCount=0;
}
}
void Timer1() interrupt 3
{
//--進入一次中斷,表明計數到了65536--//
Freq=Freq+65536;
}
相關文章
- 51微控制器內部定時器/計數器實驗定時器
- 51微控制器定時器數碼管顯示定時器
- (八)定時計數器
- 基於51微控制器的定時器定時器
- 利用定時器實現51微控制器返回上電執行時間功能定時器
- 51模組_定時器與中斷定時器
- 一個不用定時器簡易51呼吸燈定時器
- 三菱FX PLC入門之定時器和計數器定時器
- Flutter 快速上手定時器/倒數計時及實戰講解Flutter定時器
- 安卓快速開發框架(十)XBaseAndroid倒數計時,定時器安卓框架Android定時器
- 超級齊全的微帶線線上計算器
- 定時器以及定時器的幾個案例定時器
- 51微控制器程式框架之矩陣按鍵框架矩陣
- 基於51微控制器的矩陣按鍵矩陣
- Flutter倒數計時/計時器的實現Flutter
- win10 自帶倒數計時如何設定_win10開啟計時器倒數計時的方法Win10
- 直播電商原始碼,商品出售倒數計時的定時器效果原始碼定時器
- Timer(定時器)定時器
- python定時器Python定時器
- JavaScript 定時器JavaScript定時器
- js定時器JS定時器
- JavaScript定時器JavaScript定時器
- iOS定時器iOS定時器
- (3)計數器&時序邏輯
- 純生JS輪播,定時器新增和清除定時器JS定時器
- Qt - QTimer(定時器)QT定時器
- TIM-定時器定時器
- python flask 定時器PythonFlask定時器
- Flink onTimer定時器定時器
- java 中定時器Java定時器
- Qt QTimer定時器QT定時器
- Linux核心定時器Linux定時器
- JMeter—定時器(八)JMeter定時器
- Systemd 定時器教程定時器
- Java - Timer定時器Java定時器
- Javascript 定時器呼叫傳遞引數的方法JavaScript定時器
- 位元組陣列轉浮點數線上轉換器陣列
- 51微控制器非常簡潔的矩陣掃描程式矩陣