?? 02-定時器.c
字號:
// 02-定時器.c
// 很經典的一個程式,主要利用定時器0;
// 將每秒累加的數目顯示在數碼管上;
// 29-09-09 akuei2;
#include "reg52.h"
#define uchar unsigned char
//定義數碼管碼
uchar code Led_Code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
//定義位選碼
//0b111101111,0b11111011,0b11111101,0b11111110
uchar code Led_Select[]={0xf7,0xfb,0xfd,0xfe};
//定義變量
int Sec,t0;
//50微秒延遲函數
void Delay_50us(int t)
{
uchar j;
t--;
for(;t>0;t--)
for(j=19;j>0;j--);
}
//數碼管顯示函數
void Display(void)
{
int Digit[4],i;
Digit[3]=Sec/1000; //第一個數碼管取千位
Digit[2]=Sec%1000/100; //第二個數碼管取百位
Digit[1]=Sec%100/10; //第三個數碼管取十位
Digit[0]=Sec%10; //第四個數碼管取個位
for(i=0;i<4;i++)
{
P0=Led_Code[Digit[3-i]]; //送數碼管碼
P2=Led_Select[i]; //送位選碼
Delay_50us(20); //延遲1微秒
P0=P2=0xff; //消影
}
}
//初始化函數
void Init(void)
{
TMOD=0x01; //定時0,工作模式1
TH0=(65536-(50000))/256; //定時器0,高四位賦值
TL0=(65536-(50000))%256; //定時器0,第四位賦值,時間大約是50毫秒
EA=1; //全能中斷使能
ET0=1; //定時器0中斷使能
TR0=1; //定時0啟動
}
//主函數
void main(void)
{
Init(); //初始化函數
while(1)
{
Display(); //顯示函數
}
}
//定時器0 中斷函數
void Ir_t0(void) interrupt 1
{
TH0=(65536-(50000))/256; //重新賦值
TL0=(65536-(50000))%256; //重新賦值
t0++;
if(t0>=20) //大約1秒
{
t0=0; Sec++; //Sec增值
if(Sec>=10000) Sec=0; //當Sec大于等于10000,Sec重新賦值
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -