📄 net test.c
字号:
#include <Reg51.h>
#define Master_LED P2
#define Slaver_LED P3
#define D_LED P2^7
sbit key1 = P1^0;
sbit key2 = P1^1;
sbit key3 = P1^2;
sbit key4 = P1^3;
unsigned char code direct [] = { 0x06, 0x5b, 0x4f, 0x66, 0x6d,
0x7d, 0x07, 0x7f, 0x6f,0x3f};
//--------------------------
// 共阴数码管,交叉线, 1-3,3-1,2-6,6-2? 的 1~9,0显示表
unsigned char code across [] = {0x21, 0x7c, 0x6d, 0x63, 0x4f,
0x5f, 0x25, 0x7f, 0x6f, 0x3f};
unsigned char key_val = 0;
unsigned char counter = 0;
unsigned char key_counter = 0;
unsigned char step_counter = 0;
void timer0_int(void);
void delay(unsigned int i);
void direct_test(unsigned int j);
void across_test(unsigned int k);
void lin_dot(unsigned int a);
main()
{
counter = 4;
key_val = 0xfb;
TH0=0x3B; //给计数寄存器高8位赋初值
TL0=0xC0; //给计数寄存器低8位赋初值
ET0 = 1;
EA = 1;
TR0=1;
while (1)
{
while (key_val == 0xfe)
{
step_counter = 0;
direct_test (key_counter++);
if (key_counter == 10)
{
key_counter = 0;
}
}
while (key_val == 0xfd)
{
step_counter = 0;
across_test (key_counter++);
if (key_counter == 10)
{
key_counter = 0;
}
}
while (key_val == 0xfb)
{
lin_dot (0);
step_counter = 0;
}
while (key_val == 0xf7)
{
Master_LED = 1<<(step_counter-1);
Slaver_LED = 1<<(step_counter-1);
}
}
}
void delay(unsigned int i )
{
signed int j,k;
for(k=0;k<i;k++)
for(j=0;j<1000;j++);
// Master_LED = 0x00; //直通线的标记
}
//直线测试函数Slaver_LED,Master_LED,由1~9,0显示
void direct_test(unsigned int j)
{
Master_LED = 0x81; //直通线的标记
Slaver_LED = 0x81;
delay(50);
Master_LED = direct[j];
Slaver_LED = direct[j];
delay(50);
}
//交叉线测试函数Master_LED直显示,Slaver_LED,1-3,2-6,数值互换
void across_test(unsigned int k)
{
Master_LED = 0xC0; //0x40; //交叉线的标记
Slaver_LED = 0xC0; //0x40;
delay(50);
Master_LED = direct[k];
Slaver_LED = across[k];
delay(50);
}
//---------------------------------
//两边按顺序单点显示由a~g,.共8段,
//
void lin_dot(unsigned int a)
{
unsigned char x = 1;
//unsigned int h = a;
while(a!=8)
{
a++;
if(x == 0x00)
x = 1;
//Slaver_LED = direct[a];
//Master_LED = direct[a];
delay(50);
Slaver_LED = x;
Master_LED = x;
x = x<<1;
delay(50);
}
}
void timer0_int(void) interrupt 1
{
TR0=0; //停止计数
TH0=0x3B; //给计数寄存器高8位赋初值
TL0=0xC0; //给计数寄存器低8位赋初值
if(!(counter--)) //当计完2次后=0,取反为1,之后在改变回初值,重新计数。
{
counter=0x01;
if (P1 != 0xff)
{
key_val = P1;
if (key_val == 0xf7)
{
if (step_counter == 8)
{
step_counter = 0;
}
step_counter++;
}
while (P1 != 0xff);
}
}
TR0=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -