|
#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define out P0
uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x01};
int i=0;
//int TH00;
void main(void)
{
int j;
TMOD=0x15; // T0方式1計(jì)數(shù),T1方式1定時(shí)
TH0=0; // T0計(jì)數(shù)器清零
TL0=0;
TH1=0x3C; // 12MHz晶振,T1定時(shí)50ms
TL1=0xB0;
TR0=1; // 啟動(dòng)T0計(jì)數(shù)器
TR1=1; // 啟動(dòng)T1
IE=0x88; // 允許T1中斷和總中斷允許
while(1)
{ P2=0x00; // 輸出百位顯示值
out=seg[i/100];
P2=0x02;
for(j=0;j<100;j++);
P2=0x00;
out=seg[i%100/10]; // 輸出十位顯示值
P2=0x04;
for(j=0;j<100;j++);
P2=0x00; out=seg[i%10]; // 輸出個(gè)位顯示值
P2=0x08;
for(j=0;j<100;j++);
}
}
void Timer1_ISR() interrupt 3 // T1中斷程序,產(chǎn)生50ms 定時(shí)
{ static char j = 0;
TH1=0x3C; // 重設(shè)定時(shí)器值,50ms 定時(shí),12MHz 晶振
TL1=0xB0;
if(++j == 20) // 是否中斷20次,即50msx20次 = 1s
{ j=0;
i=(TH0 << 8)|TL0;
// 1s內(nèi)的計(jì)數(shù)值即為電機(jī)轉(zhuǎn)動(dòng)速度,單位:轉(zhuǎn)/秒
TH0=0; // T0清零
TL0=0;
}
} |
|