📄 转速表.c
字号:
/********************************************************/
//项目名称:转速表
//硬件结构:89c51+4位共阳数码管
/********************************************************/
#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};//共阳极数码管的编码
void display(unsigned int velocity)//显示函数
{
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;//关闭中断
P0=table1[led[i]];
P2=c;
for(a=6;a>0;a--)
for(b=248;b>0;b--);
}
EA = 1; //允许CPU中断
ET0 = 1; //定时器0中断打开
EX0=1;//打开外部中断0
IT0=1;//脉冲方式触发*/
}
void main(void)
{
EA = 1; //允许CPU中断
ET0 = 1; //定时器0中断打开
EX0=1;//打开外部中断0
IT0=1;//脉冲方式触发
TMOD = 0x1; //设定时器0为模式1,16位模式
TH0=0xFF;
TL0=0xCD; //设定时值为50us
TR0 = 1; //开始定时
while(1);
}
void outinterrupt0(void) interrupt 0//外部中断服务程序
{
count_n++;
if(count_n==2)
{
v=300000/count_x;
count_x=0;
count_n=0;
display(v);
}
}
void KeyAndDis_Time0(void) interrupt 1//定时中断服务程序
{
TH0=0xFF;
TL0=0xDA; //设定时值
if(count_n==1)
{
count_x++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -