?? 轉(zhuǎn)速表.c
字號(hào):
/********************************************************/
//項(xiàng)目名稱:轉(zhuǎn)速表
//硬件結(jié)構(gòu):89c51+4位共陽(yáng)數(shù)碼管
/********************************************************/
#include <at89x51.h>
unsigned int led[4],count_x=0;
unsigned long int v=0;
unsigned char count_n=0,i,a,b,c;
unsigned char code table1[]={0xC0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90};//共陽(yáng)極數(shù)碼管的編碼
void display(unsigned int velocity)//顯示函數(shù)
{
led[0]=velocity/0x3E8;
led[1]=(velocity-led[0]*1000)/0x64;
led[2]=(velocity-led[0]*1000-led[1]*100)/0xA;
led[3]=velocity%0xA;
for(i=0,c=0x01;i<=4,c<=0x08;c*=2,i++)
{
EA=0;//關(guān)閉中斷
P0=table1[led[i]];
P2=c;
for(a=6;a>0;a--)
for(b=248;b>0;b--);
}
EA = 1; //允許CPU中斷
ET0 = 1; //定時(shí)器0中斷打開(kāi)
EX0=1;//打開(kāi)外部中斷0
IT0=1;//脈沖方式觸發(fā)*/
}
void main(void)
{
EA = 1; //允許CPU中斷
ET0 = 1; //定時(shí)器0中斷打開(kāi)
EX0=1;//打開(kāi)外部中斷0
IT0=1;//脈沖方式觸發(fā)
TMOD = 0x1; //設(shè)定時(shí)器0為模式1,16位模式
TH0=0xFF;
TL0=0xCD; //設(shè)定時(shí)值為50us
TR0 = 1; //開(kāi)始定時(shí)
while(1);
}
void outinterrupt0(void) interrupt 0//外部中斷服務(wù)程序
{
count_n++;
if(count_n==2)
{
v=300000/count_x;
count_x=0;
count_n=0;
display(v);
}
}
void KeyAndDis_Time0(void) interrupt 1//定時(shí)中斷服務(wù)程序
{
TH0=0xFF;
TL0=0xDA; //設(shè)定時(shí)值
if(count_n==1)
{
count_x++;
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -