?? wqq.c
字號:
***********************************************************************
// 無刷電機轉速顯示程序
//AT89C51單片機,12M晶振,P0口輸出段碼口,P2口輸出列掃描,4個共陽LED數碼管
//T0為16位20ms定時模式,T1為計數模式
//電機轉速rpm=計數器1s計數值count()*20
/************************************************************************/
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code dispbit[]={0x01,0x02,0x04,0x08}; //列掃描控制字
uchar code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF};
uchar dispbuf[4]={0,0,0,0};
uint N; //定時中斷的次數
unsigned long f,rpm; //電機的頻率、轉速
void scan(void);
uint count(void);
void delay1ms(uint t);
void main(void)
{
uint i;
uchar temp[4];
EA=1;ET0=1;
TH0=(65536-20000)/256;
TL0=(65536-20000)%256;
TH1=0x00;TL1=0x00;
TMOD=0x51;
TR0=1;TR1=1;
while(1)
{
rpm=20*f; //電機轉速=電機的頻率f×20
for(i=0;i<4;i++)
{
temp[i]=0;
}
i=0;
while(rpm/10)
{
temp[i]=rpm%10;
rpm=rpm/10;
i++;
}
temp[i]=rpm;
for(i=0;i<4;i++)
{
dispbuf[i]=temp[i];
}
scan();
}
}
/*tms延時*/
void delay1ms(uint t)
{
int m,j;
for(m=0;m<t;m++)
for(j=0;j<150;j++);
}
/*20ms定時中斷程序*/
void timer0(void) interrupt 1 using 1
{
TH0=(65536-20000)/256;
TL0=(65536-20000)%256;
N++;
if(N==50)
{
N=0;
f=TH1*256+TL1;
TH1=0;
TL1=0;
TR1=1;
}
TR0=1;
scan();
}
/*顯示程序*/
void scan(void)
{
uchar k;
for(k=0;k<4;k++)
{
P0=dispcode[dispbuf[k]];
P2=dispbit[k];
delay1ms(4);
P2=0x00;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -