供大家参考,和修改,有源程序,也可供大家,学习和修改.
电路原理图如下:
单片机源程序如下:
/**********************网线测试仪***************************** 网线测试仪,定义三个按钮作为速度选择 速度选择分别有30ms/1s/2s 程序初始化默认进入1s运行函数 其中网线扫描口用的P2口 *************************************************************/ #include <STC15.h> #include <intrins.h> //循环左右移头文件 #define uchar unsigned char #define uint unsigned int sbit sw1 = P0^0; //k1按键.定义30ms按钮 sbit sw2 = P0^1; //k2按键,定义1S按钮 sbit sw3 = P0^2; //K3按键,定义2S按钮 uint i,a,b; //定义变量 void delay(int t) { int y; for(;t>0;t--) for(y=110;y>0;y--); } void key1(); //函数声明 void key2(); void key3(); void key1() //30ms运行函数 { if(sw1 == 0) { delay(10); if(sw1 == 0) { sw2 = sw3 = 1; P2 = a; b = 1; while(b) { for(i=9;i>0;i--) { P2 = _crol_(a,1); for(i=30;i>0;i--) //1/2s { delay(10); if(sw2 == 0) { delay(5); if(sw2 == 0) { key2(); } } if(sw3 == 0) { delay(5); if(sw3 == 0) { key3(); } } } a = P2; } } } } } void key2() //1S运行函数 { if(sw2 == 0) { delay(10); if(sw2 == 0) { sw1 = sw3 =1; P2 = a; b = 1; while(b) { for(i=8;i>0;i--) { P2 = _crol_(a,1); for(i=60;i>0;i--) //1S { delay(10); if(sw1 == 0) { delay(5); if(sw1 == 0) { key1(); } } if(sw3 == 0) { delay(5); if(sw3 == 0) { key3(); } } } a = P2; } } } } } void key3() //2S运行函数 { if(sw3 == 0) { delay(10); if(sw3 == 0) { sw1 = sw2 = 1; P2 = a; b = 1; while(b) { for(i=8;i>0;i--) { P2 = _crol_(a,1); for(i=200;i>0;i--) //2S { delay(10); if(sw1 == 0) { delay(5); if(sw1 == 0) { key1(); } } if(sw2 == 0) { delay(5); if(sw2 == 0) { key2(); } } } a = P2; } } } } } void main() { P2 = 0xff; //IO赋初值 a = 0xfe; sw2 = 0; //初始执行1s函数 while(1) { key1(); key2(); key3(); } }
复制代码