📄 f_measure.c
字号:
#include <reg51.h>
sbit Dig1 = P2^0;
sbit Dig2 = P2^1;
sbit Dig3 = P2^2;
sbit Dig4 = P2^3;
sbit Dig5 = P2^4;
sbit Dig6 = P2^5;
sbit Dig7 = P2^6;
sbit Latch = P3^0; //latch in
sbit Clr_data = P3^4;
sbit Dig_sel2 = P3^5;
sbit Dig_sel1 = P3^6;
sbit Dig_sel0 = P3^7;
#define T0_High_Init 0xfa;
#define T0_Low_Init 0x00;
unsigned int Counter;
unsigned char Digit1,Digit2,Digit3,Digit4,Digit5,Digit6,Digit7;
//字形表
int Get_7_Segment[16] = {0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70,0x7F,0x7B,0x77,0x1f,0x4e,0x3d,0x4f,0x47};
unsigned char indata;
//---------------------------------------------------------------------------------------------------------
//主函数
//初始化函数
void Initial(void)
{
Counter = 0;
TMOD = 0x11; //定时器工作方式
TH0 = T0_High_Init;
TL0 = T0_Low_Init; //设置定时器初值
TR0 = 1; //启动定时器
ET0 = 1; //允许定时器中断
EA = 1; //开中断
}
//延时
void delay()
{
int ti;
for(ti=0;ti<10;ti++)
{}
}
//判断Latch是否为高电平
int latch_high(void)
{
int reci; //返回值
if(Latch)
{
delay();
if(Latch)
reci = 1;
else
reci = 0;
}
else
reci = 0;
return reci;
}
//判断Latch是否为低电平
int latch_low(void)
{
int reci; //返回值
if(!Latch)
{
delay();
if(!Latch)
reci = 1;
else
reci = 0;
}
else
reci = 0;
return reci;
}
void get_data(void)
{
Dig_sel2 = 0;
Dig_sel1 = 0;
Dig_sel0 = 0;
delay();
indata = P0;
Digit7 = indata & 0x0f;
Dig_sel0 = 1;
delay();
indata = P0;
Digit6 = indata & 0x0f;
Dig_sel1 = 1;
Dig_sel0 = 0;
delay();
indata = P0;
Digit5 = indata & 0x0f;
Dig_sel0 = 1;
delay();
indata = P0;
Digit4 = indata & 0x0f;
Dig_sel2 = 1;
Dig_sel1 = 0;
Dig_sel0 = 0;
delay();
indata = P0;
Digit3 = indata & 0x0f;
Dig_sel0 = 1;
delay();
indata = P0;
Digit2 = indata & 0x0f;
Dig_sel1 = 1;
Dig_sel0 = 0;
delay();
indata = P0;
Digit1 = indata & 0x0f;
}
//主函数
void main()
{
Initial();
while( 1 )
{
while( latch_high() );
get_data();
Clr_data = 0;
delay();
Clr_data = 1;
while( latch_low() );
}
}
//-------------------------------------------------------------------
//中断
//显示
void Display_Digit(unsigned int Digit_Selected)
{
if( Digit_Selected == 1 )
{
Dig7 = 1;
P1 = Get_7_Segment[Digit1];
Dig1 = 0;
}
if( Digit_Selected == 2 )
{
Dig1 = 1;
P1 = Get_7_Segment[Digit2];
Dig2 = 0;
}
if( Digit_Selected == 3 )
{
Dig2 = 1;
P1 = Get_7_Segment[Digit3];
Dig3 = 0;
}
if( Digit_Selected == 4 )
{
Dig3 = 1;
P1 = Get_7_Segment[Digit4];
Dig4 = 0;
}
if( Digit_Selected == 5 )
{
Dig4 = 1;
P1 = Get_7_Segment[Digit5];
Dig5 = 0;
}
if( Digit_Selected == 6 )
{
Dig5 = 1;
P1 = Get_7_Segment[Digit6];
Dig6 = 0;
}
if( Digit_Selected == 7 )
{
Dig6 = 1;
P1 = Get_7_Segment[Digit7];
Dig7 = 0;
}
}
//中断处理函数
void display(void) interrupt 1
{
ET0 = 0;
TR0 = 0;
TH0 = T0_High_Init;
TL0 = T0_Low_Init; //重装定时器初值
TR0 = 1;
if( ++Counter == 8 )
Counter = 1;
Display_Digit(Counter); //显示
ET0 = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -